Wie deaktiviere ich ein WinForms TreeView Knoten Kontrollkästchen?
Ich muss in der Lage sein zu deaktivieren einige der Checkboxen in einem TreeView-Steuerelement von einer WinForms-Anwendung, aber es gibt keine solche Funktionalität eingebaut, um die standard-TreeView-Steuerelement.
Ich bin schon mit dem TreeView.BeforeCheck Falle und brechen Sie es ab, wenn der Knoten wird deaktiviert und das funktioniert bestens.
Ändere ich auch die ForeColor des deaktivierten Knoten GrayText.
Hat jemand eine einfache und robuste Lösung?
InformationsquelleAutor der Frage Vassili Altynikov | 2009-03-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da gibt es Unterstützung in C++ können wir lösen es mithilfe von p/invoke.
Hier ist das setup für den p/invoke-Teil, nur zur Verfügung stellen, um die aufrufende Klasse.
Den wir bestimmen wollen, die auf einen Knoten-Knoten-basis. Der einfachste Weg, dies zu tun, ist auf den draw-Knoten-Ereignis. Wir haben unseren Baum gesetzt werden als Inhaber gezogen, um für dieses Ereignis, so werden Sie sicher, dass auf etwas anderes als die Standardeinstellung.
In Ihrem tree_DrawNode Funktion bestimmen, wenn der Knoten gezeichnet wird, soll es eine checkbox, und es verstecken, wenn entsprechenden. Dann legen Sie die Standard-Zeichnen-Eigenschaft auf true, da wollen wir nicht sorgen zu machen über die Zeichnung, die alle anderen details.
Schließlich den eigentlichen Aufruf der Funktion, die wir definiert:
InformationsquelleAutor der Antwort Sam Trost
TreeView.BeforeCheck -- für diese Veranstaltung anmelden, überprüfen Sie, ob der Knoten, in dem die Checkboxen sind, dürfen geprüft werden oder nicht und, wenn es nicht überprüft werden kann, dann können Sie das Ereignis abzubrechen, indem die Cancel-Eigenschaft auf die TreeViewCancelEventArgs. Das sollte hoffentlich verhindern, dass der Benutzer von der überprüfung jene Boxen aber nicht für die beste user-experience.
Entfernen Sie die Kontrollkästchen für die nicht überprüfbar Elemente, die Sie möglicherweise nutzen owner-draw-zeichnen Sie ein gefülltes Rechteck über die check-box, um es zu entfernen.
InformationsquelleAutor der Antwort Paul Ruane
Da ist nichts eingebaut, um dies zu tun. Sie können die BeforeCheck Veranstaltung stornieren und es für die gewünschten Knoten. Im Falle der Darstellung des checkbox-Fragen, dann werden Sie brauchen, um ein Bild zu zeigen, das Kontrollkästchen deaktiviert.
Diese link könnte von Interesse sein könnten.
InformationsquelleAutor der Antwort danish