2009-05-31 11 views
4

Y at-il un événement dans C# qui se déclenche lorsque le formulaire STOPS est déplacé? Pas pendant son déplacement.Evénement C# Form Move Stopped

S'il n'y a aucun événement pour cela, est-il possible de le faire avec WndProc?

Répondre

12

L'événement ResizeEnd se déclenche après la fin d'un mouvement. Peut-être pourriez-vous l'utiliser.

+0

Je n'avais aucune idée à ce sujet. Juste vérifié, ça marche! Merci –

+0

+1 - J'ai évidemment passé trop de temps à faire des applications web. –

+0

Haha, une belle. Fonctionne parfaitement merci. – Ozzy

0

Définissez simplement un indicateur sur 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é. Je reconnais que cela ne fonctionnera probablement pas dans le cas d'un utilisateur qui déplace un formulaire via le clavier, mais c'est plutôt rare.

+1

L'événement MouseUp est très peu probable à cuire car le déplacement du formulaire est généralement effectué à l'aide de la barre de titre et les événements de la souris ne sont pas déclenchés pour les opérations de la souris dans cette zone. –

+0

L'événement mouseup ne se déclenche pas si vous déplacez le formulaire depuis la barre de titre – Ozzy

2

Il ne s'agit pas d'une solution à sécurité intégrée, mais d'un .NET pur et simple. Ajouter une minuterie à votre formulaire, réglez-le à un délai relativement court (100-150 ms semblait OK pour moi). 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 voulez traiter plus exact (sachant exactement quand le bouton de la souris est dans la version barre de titre et par exemple), vous aurez probablement besoin de plonger dans la surveillance des messages Windows.

+0

Pour ceux qui viennent ici et qui veulent en savoir un peu plus sur la dernière partie de cette réponse (Déterminer quand la souris est pressée et relâchée pendant un mouvement), consultez ma question qui plonge un peu plus dans cela http://stackoverflow.com/questions/24493167/wm-nclbuttonup-message-not-sent-at-the-end-of-dragging-a-form-how-to-do -so – AnotherUser

0

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

Voir un exemple here

0

Je l'ai testé événement ResizeChanged, et il fonctionne très bien, mais je ne sais pas relation entre déplacer et redimensionner, mais il fonctionne pour moi