J'ai une application Windows Forms qui utilise certains gestionnaires Application.Idle pour modifier l'état des contrôles sur le formulaire. Après avoir ajouté un ListView au formulaire, j'ai réalisé que les gestionnaires d'inactifs sont appelés trop souvent lorsque le curseur de la souris est sur ListView. En utilisant Spy ++, j'ai vu que lorsque le curseur de la souris est sur le contrôle (ne bouge pas), le contrôle reçoit les messages WM_MOUSEHOVER sur un over qui déclenche à son tour l'événement inactif (après que la file d'attente soit vide). La même chose s'applique à TreeView-Controls.Comment désactiver Hover-Messages dans .NET List/TreeViews?
Je me demande comment je peux désactiver ce comportement?
L'exécution de ce code à partir de l'invite de commande montrera ce que je veux dire:
using System;
using System.Windows.Forms;
public class IdleTest {
public static void Main() {
Application.Idle += delegate {
Console.WriteLine(
DateTime.Now.ToString() + " idle!") ;
};
Form f = new Form(){ Width=300 };
f.Controls.Add(new ListView(){ Left=0, Width=100 });
f.Controls.Add(new TreeView(){ Left=100, Width=100 });
f.Controls.Add(new TextBox() { Left=200, Width=100 });
Application.Run(f) ;
}
}
. Le gestionnaire d'inactivité a été appelé plusieurs fois pendant que la souris est sur ListView. MAIS, en utilisant une classe dérivée ListView, remplacer le WndProc et retourner simplement sur WM_HOUSEMOVER a résolu le problème. Merci beaucoup, ParmesanCodice! – miasbeck
@miasbeck heureux que cela a fonctionné. Gardez juste à l'esprit que le MouseHoverEvent ne déclenchera (très probablement) pas de classe dérivée. Donc, si vous utilisez des info-bulles sur cet événement, vous devrez les déplacer dans l'événement MouseMoveEvent – ParmesanCodice