Déplacer un Winform en maintenant le bouton de bordure droit de la souris, avec éventuellement des méthodes natives

StackOverflow https://stackoverflow.com/questions/5827208

Question

J'ai une situation où je voudrais passer une forme de fenêtres en maintenant le bouton droit de la souris sur son espace client; la forme lui est comme je l'ai sans frontières dit.

Je voudrais déplacer « nativement » (si possible, sinon d'autres réponses sont ok aussi). Je veux dire la façon dont il se comporte lorsque vous maintenez le bouton gauche de la souris sur la barre de titre (avec déplacement de la souris et des choses comme ça, je reçois beaucoup de comportements étranges, mais peut-être juste moi).

Je l'ai lu dans beaucoup de choses et ce poste a l'air utile

http: / /social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/b9985b19-cab5-4fba-9dc5-f323d0d37e2f/

J'ai essayé différentes façons de l'utiliser et regardé par

Autres conseils

Vous avez besoin de deux méthodes P / Invoke pour y parvenir.

[DllImport("user32.dll")]
static extern int SendMessage(IntPtr hwnd, int msg, int wparam, int lparam);

[DllImport("user32.dll")]
static extern bool ReleaseCapture();

Quelques constantes:

const int WmNcLButtonDown = 0xA1;
const int HtCaption= 2;

Gérer l'événement de MouseDown sur votre formulaire, faites ceci:

private void Form_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Right)
    {
        ReleaseCapture();
        SendMessage(this.Handle, WmNcLButtonDown, HtCaption, 0);
    }
}

envoie votre formulaire le même événement reçoit lorsque les clics de souris et maintient le zone de légende. Déplacez la souris et la fenêtre se déplace. Lorsque vous relâchez le bouton de la souris, arrête le mouvement. Très facile.

scroll top