Déplacer un formulaire à partir d'un contrôle ???

Résolu
EmacLi Messages postés 165 Date d'inscription jeudi 3 novembre 2005 Statut Membre Dernière intervention 1 février 2013 - 28 juil. 2006 à 09:03
EmacLi Messages postés 165 Date d'inscription jeudi 3 novembre 2005 Statut Membre Dernière intervention 1 février 2013 - 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

9 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
28 juil. 2006 à 11:53
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 );
    }
}
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
2 août 2006 à 13:09
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" ); };
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
28 juil. 2006 à 09:33
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#]
0
EmacLi Messages postés 165 Date d'inscription jeudi 3 novembre 2005 Statut Membre Dernière intervention 1 février 2013 1
28 juil. 2006 à 10:05
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
28 juil. 2006 à 10:13
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#]
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
28 juil. 2006 à 11:57
hum... ooops...

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
0
EmacLi Messages postés 165 Date d'inscription jeudi 3 novembre 2005 Statut Membre Dernière intervention 1 février 2013 1
31 juil. 2006 à 08:53
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 !
0
EmacLi Messages postés 165 Date d'inscription jeudi 3 novembre 2005 Statut Membre Dernière intervention 1 février 2013 1
2 août 2006 à 10:47
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.
0
EmacLi Messages postés 165 Date d'inscription jeudi 3 novembre 2005 Statut Membre Dernière intervention 1 février 2013 1
2 août 2006 à 14:10
Merci pour cette précision
0
Rejoignez-nous