2012-07-02 5 views
1

J'ai le contrôle treeview sur un winform et ai besoin d'implémenter l'événement onChange pour cela. Cependant, il semble qu'il n'en possède pas et a seulement onChangeUI.Quel est l'événement équivalent Treeview.OnChange dans .net?

Si l'arborescence ne prend pas en charge l'événement onChange, quel est son équivalent dans .NET. J'ai recherché dans MSDN Library et n'ai trouvé aucune information.

Mise à jour: une note de côté, je suis en train de convertir le programme win32 pour .net.

Merci à l'avance,

+0

Avez-vous regardé l'événement 'SelectedNodeChanged'? – Kane

+1

@Kane, c'est pour le contrôle d'arbre ASP.NET, pas celui de Windows Forms. digitalanalog, quel genre de changement cherchez-vous? Changement de sélection? Changement d'étiquette d'article? Autre chose? –

+0

@ FrédéricHamidi merci de venir chercher sur doh! moment pour aujourd'hui. Il y a beaucoup d'événements 'BeforeXXX' et' AfterXXX' à choisir dont vous avez besoin? – Kane

Répondre

3

soutien pour le changement de sélection est un peu limité dans le contrôle Windows Forms TreeView.

Fondamentalement, il existe une paire d'événements (BeforeSelect et AfterSelect) qui vous permettent de réagir lorsqu'un nœud d'arbre est sélectionné. BeforeSelect vous permet d'annuler la nouvelle sélection, AfterSelect non (car il se produit après que la nouvelle sélection a été validée). Toutefois, aucun de ces événements n'est déclenché lorsqu'un noeud est non sélectionné. Pour détecter ce cas, vous devez gérer l'événement MouseUp générique et vérifier la propriété IsSelected du nœud cliqué pour obtenir l'état de sélection réel.

1

Il s'agit d'une restriction courante dans les classes wrapper qui enveloppent les contrôles Windows natifs. Qui ne génèrent que des notifications pour des choses que vous ne pouvez pas connaître. Comme tout ce que l'utilisateur peut faire qui affecte le contrôle. Il omet les notifications pour les choses que vous faire, avec la philosophie sous-jacente que vous n'avez pas à vous souvenir de quelque chose que vous connaissez déjà.

Ce qui est certainement le cas pour TreeView, l'utilisateur ne peut pas ajouter de nœuds. Seulement vous pouvez. Même chose pour le texte affiché dans les nœuds. Aucun événement pour vous dire que le texte a changé. Sauf dans le cas très particulier où l'utilisateur édite le noeud, événement AfterLabelEdit.

Vous pouvez dériver votre propre classe à partir de TreeView et ajouter un événement Change et une méthode OnChange() qui le déclenche. C'est à vous d'écrire le code pour appeler la méthode. Prenez garde que cela soit difficile à faire de manière fiable, la classe TreeNodeCollection n'a pas de méthodes virtuelles, donc vous ne pouvez pas les surcharger pour détecter les nœuds changeant de code client. Il vaut mieux ne pas écrire ce code et simplement générer un événement interne dans le formulaire dans toute méthode qui modifie le contenu de TreeView.

+0

Je suis d'accord avec la plupart de vos réponses, mais je crois que la restriction en question n'est pas native à Windows, car le bon vieux contrôle TreeView avait [TVN_SELCHANGING] (http://msdn.microsoft.com/fr-fr/ library/windows/desktop/bb773547.aspx) et [TVN_SELCHANGED] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb773544.aspx), qui se déclenchent tous les deux lorsqu'un nœud d'arbre est non sélectionné ainsi que sélectionné. Bien sûr, la sélection multiple était à vous de mettre en œuvre à l'époque, mais à mon humble avis même cette caractéristique ne justifie pas les cerceaux que nous devons passer maintenant pour gérer les événements de sélection simples :) –