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

Messages postés
165
Date d'inscription
jeudi 3 novembre 2005
Dernière intervention
1 février 2013
- - Dernière réponse : EmacLi
Messages postés
165
Date d'inscription
jeudi 3 novembre 2005
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
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
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

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de Lutinore
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
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

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de Lutinore
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Dernière intervention
14 février 2014
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
Messages postés
165
Date d'inscription
jeudi 3 novembre 2005
Dernière intervention
1 février 2013
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
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Dernière intervention
14 février 2014
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
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Dernière intervention
14 février 2014
0
Merci
hum... ooops...

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
Commenter la réponse de sebmafate
Messages postés
165
Date d'inscription
jeudi 3 novembre 2005
Dernière intervention
1 février 2013
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
Messages postés
165
Date d'inscription
jeudi 3 novembre 2005
Dernière intervention
1 février 2013
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
Messages postés
165
Date d'inscription
jeudi 3 novembre 2005
Dernière intervention
1 février 2013
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.