Déplacer un formulaire à partir d'un contrôle ??? [Résolu]

EmacLi 165 Messages postés jeudi 3 novembre 2005Date d'inscription 1 février 2013 Dernière intervention - 28 juil. 2006 à 09:03 - Dernière réponse : EmacLi 165 Messages postés jeudi 3 novembre 2005Date d'inscription 1 février 2013 Dernière intervention
- 2 août 2006 à 14:10
Bonjour,

Quelqu'un pourrait il me dire comment faire pour déplacer un formulaire à partir d'un contrôle ?

En faite j'ai un panel et je voudrais déplacer mon fomulaire à partir de celui ci, sur l'évènement MouseDown.

Merci à tous
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 28 juil. 2006 à 11:53
3
Merci
Tu as écrit un peu vite Seb , les valeurs de retour c'est à m.Result qu'il faut les attribuées. Pas sûr non plus que que la fenêtre recoit WM_NCHITTEST quand on passe au dessus du contrôle faudrait overrider la fonction WndProc du Panel pour ça.


EmacLi, tu as un exemple sur Codyx :



http://www.codyx.org/snippet_deplacer-forme-sans-barre-titre_23.aspx


Autre exemple pour déplacer ta forme avec le Panel :


public partial class Form1 : Form
{
    private Panel panel = null;
    private Point position = Point.Empty;


    public Form1( )
    {
        InitializeComponent( );


        panel = new Panel( );
        panel.BackColor = Color.Azure;
        panel.MouseDown += delegate( object sd, MouseEventArgs e )
        {
            if ( e.Button == MouseButtons.Left )
                position = e.Location;
        };
        panel.MouseMove += delegate( object sd, MouseEventArgs e )
        {
            if ( e.Button == MouseButtons.Left )
            {
                int x = this.Left + ( e.X - position.X );
                int y = this.Top + ( e.Y - position.Y );
                this.Bounds = new Rectangle( x, y, this.Width, this.Height );
            }
        };


        this.Controls.Add( panel );
    }
}

Merci Lutinore 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 118 internautes ce mois-ci

Commenter la réponse de Lutinore
Meilleure réponse
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 2 août 2006 à 13:09
3
Merci
C'est une méthode anomyme..

.NET 1.1

this.Click += new EventHandler( Form1_Click );




void Form1_Click( object sender, EventArgs e )
{
   MessageBox.Show( "Hello" );
}





.NET 2.0

this.Click += Form1_Click;



void Form1_Click( object sender, EventArgs e )
{
 
}

ou

this.Click += delegate( object sd, EventArgs e )
{
    MessageBox.Show( "Hello" );
};




et ( sans paramètre )



this.Click += delegate { MessageBox.Show( "Hello" ); };

Merci Lutinore 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 118 internautes ce mois-ci

Commenter la réponse de Lutinore
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 28 juil. 2006 à 09:33
0
Merci
genre un formulaire sans barre de titre :)

il faut utiliser le message WM_NCHITTEST...

ex:

private override WndProc(ref Message m) {
    if (m.Msg == 0x0084) {   // WM_NCHITTEST
       if (this.myPanel.Bounds.Contains(MousePosition)) {
          return 0x2; // HTCAPTION
        } else {
          return 0x1; // HTCLIENT
        }
    }
}

Pour plus d'infos : http://msdn.microsoft.com/library/.../wm_nchittest.asp

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
Commenter la réponse de sebmafate
EmacLi 165 Messages postés jeudi 3 novembre 2005Date d'inscription 1 février 2013 Dernière intervention - 28 juil. 2006 à 10:05
0
Merci
Merci pour la piste mais c'est pas encore tout à fait ca.

Que siginfie au juste WM_NCHITTEST ?

Parceque ton code ne rentre jamais dans le premier if().

Merci.
Commenter la réponse de EmacLi
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 28 juil. 2006 à 10:13
0
Merci
il faut mettre ca dans le formulaire...

WM_NCHITTEST :
    -> WM : Windows Message
    -> NC : Non Client
    -> HITTEST : teste de "hit"

en gros, c'est le message qui demande à la fenetre si le curseur se trouve dans une zone cliente ou non de la fenêtre...

j'ai d'ailleur fait une bourde dans mon code...

private override WndProc(ref Message m) {
    if (m.Msg == 0x0084) {   // WM_NCHITTEST
       if (this.myPanel.Bounds.Contains(MousePosition)) {
          return 0x2; // HTCAPTION
        } else {
          return 0x1; // HTCLIENT
        }
    } else {
       base.WndProc(ref m);
    }
}

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
Commenter la réponse de sebmafate
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 28 juil. 2006 à 11:57
0
Merci
hum... ooops...

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
Commenter la réponse de sebmafate
EmacLi 165 Messages postés jeudi 3 novembre 2005Date d'inscription 1 février 2013 Dernière intervention - 31 juil. 2006 à 08:53
0
Merci
Merci Lutinore, je viens d'opter pour ta solution.

En effet, la méthode WndProc appartient au formulaire et non au contrôle, elle n'est donc pas appelée lors du clic sur le panel.

Merci à tous pour votre aide !
Commenter la réponse de EmacLi
EmacLi 165 Messages postés jeudi 3 novembre 2005Date d'inscription 1 février 2013 Dernière intervention - 2 août 2006 à 10:47
0
Merci
Dit Lutinore,


Peut tu m'expliquer ce que tu fait avec tes déléguées ?


Tu rajoute un délégué à l'évenement MouseMouve ? Ce n'est pas plutôt l'évenement qui doit être ajouté au délégué ?


Merci d'avance.
Commenter la réponse de EmacLi
EmacLi 165 Messages postés jeudi 3 novembre 2005Date d'inscription 1 février 2013 Dernière intervention - 2 août 2006 à 14:10
0
Merci
Merci pour cette précision
Commenter la réponse de EmacLi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.