C# TreeView de Développer/réduire parent sélectionnez

C'est difficile à expliquer donc je vais juste vous dire ce que je veux faire et comment je fais alors peut-être quelqu'un witll avez une idée sur ce que je fais de mal.

Dans mon winForm j'ai un contrôle TreeView que j'remplir. Tous les parents qui ont des enfants (n'importe quel nombre d'entre eux), mais pas d'enfants ont des enfants de leur propre. Exemple:

- Parent 1
        Child 1
        Child 2
        Child 3
- Parent 2
       Child 4

Le comportement que je veux est la suivante:

  1. lorsque l'utilisateur clique sur un enfant, il est sélectionné (par défaut)
  2. Lorsque l'utilisateur clique sur un parent, il faut soit réduire ou développer, mais pas de modifier toute sélection

Point 1 n'est pas un problème puisque c'est le comportement par défaut d'un TreeView, Point 2, cependant, est une autre histoire.

Voici ce que j'ai fait jusqu'à présent:

Pour empêcher le parent d'être sélectionnée je ajouter un BeforeSelect gestionnaire d'événement et y mettre le code suivant:

if (e.Node.Parent == null)
    e.Cancel = true;

Ce fait le travail parfaitement. Alors, maintenant que j'ai annulé la sélection de la société mère je veux agrandir ou le réduire. J'ai donc modifié le code ci-dessus:

if (e.Node.Parent == null)
{
    if (e.Node.IsExpanded)
    {
        e.Node.Collapse();
    }
    else
    {
        e.Node.Expand();
    }
    e.Cancel = true;
}

Un peu cela fonctionne - sauf que, contrairement cliquant sur le signe+, l'appel de l'expansion() ou réduire() rend le nœud parent d'être sélectionné, en ignorant l'e.Cancel = true; ligne.

J'ai essayé de faire le SelectedNode avant que j'appelle l'Effondrement() ou Augmenter() et ensuite le réglage de l'arrière - fonctionne mais quand je fais une extension de la mère de nouveau à faire de la sélection.

Somewhow le signe + est exactement ce que je veux quand je clique sur un parent - que je n'arrive pas à le faire fonctionner.

Idées?

Merci d'avance

OriginalL'auteur 537mfb | 2012-04-12