2009-02-20 11 views
3

J'ai un contrôle WinForms TreeView que je voudrais utiliser pour ouvrir un autre formulaire basé sur le nœud qui est actuellement sélectionné. Je veux ouvrir cet autre formulaire quand je Ctrl + clic sur le noeud.TreeView re-grabbs se concentrer sur Ctrl + Click

Actuellement, cela fonctionne comme je le voudrais si j'ouvre l'autre formulaire dans un gestionnaire DoubleClick (et double-cliquez sur le nœud, évidemment); Toutefois, si j'utilise un gestionnaire Click (ou MouseClick) et que j'ouvre l'autre formulaire lorsque la touche Control est enfoncée, l'autre formulaire s'ouvre correctement mais renvoie le focus au formulaire d'origine. Comment puis-je garder le focus de revenir au formulaire d'origine (je veux toujours le garder ouvert) après l'ouverture de l'autre formulaire? Pourquoi existe-t-il un comportement différent entre les gestionnaires Click et DoubleClick? TreeView récupère le focus après le retour de l'événement

Répondre

7

Très ennuyant. Vous pouvez utiliser une astuce: retarder l'action de l'événement avec Control.BeginInvoke:

private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { 
    this.BeginInvoke(new TreeNodeMouseClickEventHandler(delayedClick), sender, e); 
} 
private void delayedClick(object sender, TreeNodeMouseClickEventArgs e) { 
    // Now do your thing... 
} 

La méthode delayedClick exécute dès que tous les événements de la TreeView ont terminé en cours d'exécution et votre programme se met en veille et réintègre le boucle de message.

+0

Merci! Bon conseil. Maintenant fonctionne comme souhaité. –