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 ?
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 ?
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.
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
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.
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.