6 votes

Événement C# Form Move Stopped

Existe-t-il un événement en C# qui se déclenche lorsque le formulaire cesse d'être déplacé ? Pas pendant son déplacement.

S'il n'y a pas d'événement pour cela, y a-t-il un moyen de le faire avec WndProc ?

18voto

burca toni Points 51

L'événement ResizeEnd se déclenche à la fin d'un déplacement. Vous pourriez peut-être l'utiliser.

2voto

Fredrik Mörk Points 85694

Ce n'est pas une solution infaillible, mais c'est du pur .NET et c'est très simple. Ajoutez une minuterie à votre formulaire, réglez-la sur un délai relativement court (100-150 ms me semble correct). Ajoutez le code suivant pour les événements Form.LocationChanged et Timer.Tick :

private void Form_LocationChanged(object sender, EventArgs e)
{
    if (this.Text != "Moving")
    {
        this.Text = "Moving";
    }
    tmrStoppedMoving.Start();
}

private void Timer_Tick(object sender, EventArgs e)
{
    tmrStoppedMoving.Start();
    this.Text = "Stopped";
}

Si vous souhaitez un traitement plus précis (savoir exactement quand le bouton de la souris est relâché dans la barre de titre, etc.), vous devrez probablement vous plonger dans la surveillance des messages Windows.

2voto

J'ai eu le même problème avec un contrôle utilisateur, mais il n'a pas l'événement ResizeEnd. La solution, qui a fonctionné, est de remplacer la méthode WndProc et d'écouter l'événement EXITSIZEMOVE.

Voir exemple ici

0voto

Brian Points 14040

Il suffit de mettre un drapeau à true lorsque les événements onmove sont déclenchés. Si un événement mouseup se produit et que l'indicateur est vrai, le formulaire a cessé d'être déplacé.

J'admets que cela ne fonctionnera probablement pas dans le cas où un utilisateur déplace un formulaire au moyen du clavier, mais c'est plutôt rare.

0voto

user6474751 Points 1

J'ai testé l'événement ResizeChanged, et cela fonctionne bien, mais je ne connais pas la relation entre le déplacement et le redimensionnement, mais cela fonctionne pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X