Frage zu Checkboxen in einem TreeView!

hauke1981

Erfahrenes Mitglied
Hi,

ich lasse in einem Treeview die Ordnerstruktur von einem Laufwerk anzeigen. Neben dem Text habe ich Checkboxen anzeigen lassen. Jetzt will ich die Zeile markiert haben in der ich den Haken setze und wenn ich einen übergeordneten Odner anklicke sollen in den daruntergelegenen auch der haken gesetzt sein. Wie kann ich das am besten anstellen?

Grüße
 
Entweder über eine Rekursion, in dem alle ChildNodes des geklickten Node sowie alle weiteren Childs durchläufst oder du machst dir (falls vorhanden) das CheckChanged-Event (oder so) zu nutzen.

Vermutlich wird nach jeden Haken setzen ein CheckChanged-Event gefeuert. Wahrscheinlich kannst du dir das zu nutze machen und sparst dir die Rekursion, da du im Eventhandler dann nur über die Childnodes iterieren musst.

Wenn du damit nicht klar kommst, bastel ich dir gerne ein kleines Beispiel...
 
Hi,
danke schonmal für die Anregungen, hab schon einmal versucht durch einen TreeViewEvent eine MessageBox auszugeben. Hat aber leider nicht geklappt, werd mich mal an dem CheckChanged Event mal versuchen. Wäre aber trotzdem über ein kurzes Beispiel dankbar:)

Grüße
 
Hi,

die einfachste Lösung ist die, dass du das AfterCheck-Event benutzt:

C#:
        private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
        {
            if (e.Node.Checked == true)
                foreach (TreeNode tn in e.Node.Nodes)
                    tn.Checked = true;
        }

Im Eventhandler wird immer nur die nächste Ebene zum angeklickten Node ebenfalls mit Haken versehen. Da jedoch durch das setzen der Checked-Eigenschaft das Event ebenfalls gefeuert wird, setzt die das setzen der Haken über alle untergeordneten TreeNodes fort.
 
Hi, ich habs mal probiert. Lieder klappts nicht. Kann es sein das es daran liegt das ich die Checkboxen im Treeview nur anzeigen lasse? Ich meine mit

Code:
treeview1.Checkboxes = true;

Hab mal was gelesen, das diese Checkboxen keine echten darstellen. Gibts da eine Möglichkeit, hab sowas in der Art wie du vorgeschlagen hast auch schon probiert.

Grüße
 
Du musst das entsprechende Event abonnieren (z.B. über "Blitz"-Icon in den Eigenschaften des TreeView und dann Doppelklick auf das Feld rechts neben dem Eventnamen)

Mein Code funktioniert jedenfalls einwandfrei.

Edit: Ansonsten poste mal etwas mehr Code, nachdem du das geprüft hast und es immer noch nicht klappen sollte.
 
Code:
public CheckState GetChecked(TreeNode node)
		{
			if (node.ImageIndex < 0)
				return CheckState.Unchecked;
			else
				return (CheckState)node.ImageIndex;
		}

Habs über Checkstate und enum gelöst. Hab mir aber auch ein paar Beispiele aus dem Internet zu ThreeState TreeViews geholt.

Grüße
Wollt dich bewerten geht aber leider nicht. Muss noch davor ein paar andere bewerten :rolleyes:
 

Neue Beiträge

Zurück