C # System.Windows.Forms.TreeView: Arrêtez l’extension / réduction automatique en double-cliquant (et exécutez un autre gestionnaire)

Existe-t-il un moyen simple de désactiver l’extension / la réduction automatique d’un nœud TreeView lorsque vous double-cliquez dessus? J’ai été incapable de trouver une réponse à cette question qui fonctionne sans vérifier BeforeExpand / BeforeCollapse si l’heure système actuelle correspond à ce qui est attendu pour un double-clic – le remplacement OnNodeMouseDoubleClick et / ou OnDoubleClick ne semble pas suffisant.

Ou bien, vérifier l’heure du système et voir si cela correspond à un double-clic est la seule façon de procéder?

Merci pour votre aide, -Walt

Résolu: En fait, la solution entière était à http://www.developersdex.com/gurus/code/831.asp . Apparemment, OnNodeMouseDoubleClick () n’est pas appelé dans le gestionnaire WM_LBUTTONDBLCLK pour TreeView. . . il est appelé dans le gestionnaire LBUTTONUP. Donc, voici ce qui se passe sur ce site:

protected override void DefWndProc(ref Message m) { if (m.Msg == 515) { /* WM_LBUTTONDBLCLK */ } else base.DefWndProc(ref m); } 

Si vous souhaitez interrompre le traitement à gauche du noeud, dans OnNodeMouseDoubleClick (), procédez comme suit:

 if (eX >= e.Node.Bounds.Left) { return; } 

Je n’ai pas eu beaucoup de chance avec les réponses que j’ai trouvées jusqu’ici, mais la réponse de Walt a inspiré ceci:

 int treeX; // somewhere in class scope // Add a MouseMove event handler private void treeView1_MouseMove(object sender, MouseEventArgs e) { treeX = eX; } // Add a BeforeExpand event handler private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e) { if (treeX > e.Node.Bounds.Left) e.Cancel = true; } 

Néanmoins ce fil est vieux … Je n’ai pas trouvé de solution facile à ce problème, alors j’ai enquêté tout seul. C’est le résultat:

Hériter d’un Treeview spécialisé ayant le comportement souhaité dans Treeview. En remplaçant le MouseDown et en vérifiant si ce sera un double clic. Si tel est le cas, empêchez l’expansion / la réduction en définissant un indicateur pour supprimer l’action. BeforeExpand / collapse est remplacé pour annuler l’action si l’indicateur est défini. Vous pouvez réinitialiser l’indicateur dans votre fichier BeforeExpand / Collapse-EventHandler si vous le souhaitez.

  Public Class DblClickTreeview Inherits TreeView Private _SupressExpColl As Boolean = False Private _LastClick As DateTime = Now Protected Overrides Sub OnMouseDown(e As MouseEventArgs) _SupressExpColl = Now.Subtract(_LastClick).TotalMilliseconds <= SystemInformation.DoubleClickTime _LastClick = Now MyBase.OnMouseDown(e) End Sub Protected Overrides Sub OnBeforeCollapse(e As TreeViewCancelEventArgs) e.Cancel = _SupressExpColl MyBase.OnBeforeCollapse(e) End Sub Protected Overrides Sub OnBeforeExpand(e As TreeViewCancelEventArgs) e.Cancel = _SupressExpColl MyBase.OnBeforeExpand(e) End Sub End Class