Benutzer mit den meisten Antworten
Name des selektierten Knoten aus einem TreeView auslesen VB2008

Frage
-
Hallo,
Ich möchte aus einem TreeView den Namen des Knotens auslesen.
Dabei gehe ich wie folgt vor:Me.L_FullPath_Wert.Text = Me.TV_Ordner.SelectedNode.Name
Wenn ich das Programm starte und einen Knoten in dem TreeView-Steuerelement "TV_Ordner" anklicke erscheint immer folgende Fehlermeldung:
Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
Ich wies mir nicht weiter. Wer kann helfen?
Antworten
-
Du reagierst nur auf das Click-Ereignis.
Wie ich bereits oben angedeutet habe, gibt es dafür aber andere Ergebnisse. Das Click-Ereignis wird auch ausgelöst, wenn man garnicht an der Auswhal ändernt.
Bitte regisitrere den Eventhandler eher auf TreeView.AfterSelect
Ferner musst du in deinem Code eine Prüfung ausführen:
''' ''' Sollte der Syntax nicht stimmen, sorry. ''' Habe schon lange nicht mehr mit VB gearbeitet... ''' IF TV_Ordner.SelectedNode <> Nothing THEN ''' Es gibt einen Wert, jetzt kann man Arbeiten L_Knotenname.Text = TV_Ordner.SelectedNode END IF
Ich hoffe, das beantwortet deinen Fragen.
© 2015 Thomas Roskop
Germany // Deutschland- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 20. Juli 2015 07:27
- Bearbeitet Thomas Roskop Montag, 20. Juli 2015 15:21 VB anwenden
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 28. Juli 2015 05:55
Alle Antworten
-
Hallo Jörg, wo hast du den Code den Eingefügt?
Da du uns nicht geschrieben hast, ob du mit WinForms oder mit WPF arbeitest, kann ich nur allgemein antworten.
Es gibt immer ein Ereignis welches ausgelöst wird, sobald ein Wert gewählt wurde. Bei WPF müsste es SelctionChanged sein, bei WinForms AfterSelect.
Wenn du nun dieses Ereignis abfängst UND überprüfst, ob es einen gültigen Wert gibt, bist du auf der sicheren Seite. Denn: Die Ereignisse werden auch geworfen, wenn die Auswahl aufgehoben wird (nichts mehr gewählt ist).
Überprüfe einfach vorher, ob SelectedNode null ist. Wenn dies der Fall ist, brich ab. Anderfalls, kannst du mit dem Knoten arbeiten und wie in deinem Beispiel den Namen auslesen.
© 2015 Thomas Roskop
Germany // Deutschland -
Hallo Thomas,
ich arbeite mit Windows Forms.
In einem Formular habe ich ein TreeView-Steuerelement angelegt "TV_Ordner".Dieses TreeView-Steuerelement habe ich testweise beliebig von Hand gefüllt. Das hat alles wunderbar funktioniert.
Dim HauptKnoten As TreeNode = New TreeNode("Knoten") TV_Ordner.Nodes.Add(HauptKnoten) LastNode = HauptKnoten Dim UnterKnoten1 As TreeNode = New TreeNode("Knoten 1") LastNode.Nodes.Add(UnterKnoten1) Dim UnterKnoten2 As TreeNode = New TreeNode("Knoten 2") LastNode.Nodes.Add(UnterKnoten2) Dim UnterKnoten3 As TreeNode = New TreeNode("Knoten 3") LastNode.Nodes.Add(UnterKnoten3) LastNode = UnterKnoten3 Dim UnterKnoten3_1 As TreeNode = New TreeNode("Knoten 3.1") LastNode.Nodes.Add(UnterKnoten3_1) Dim UnterKnoten3_2 As TreeNode = New TreeNode("Knoten 3.2") LastNode.Nodes.Add(UnterKnoten3_2)
Nach dem Start des Programms klicke ich auf einen beliebigen Knoten. Das Ereignis "TV_Ordner_Click" wird ausgelöst. In diesem Ereignis möchte ich den Namen des Knotens auslesen und auf ein Label-Steuerelement schreiben.Private Sub TV_Ordner_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TV_Ordner.Click Me.L_Knotenname.Text = Me.TV_Ordner.SelectedNode.Text End Sub
Dabei erscheint besagte Fehlermeldung.
Warum soll ich eine Objektinstanz von einem Objekt anlegen, wo ich lediglich einen Wert auslesen möchte?
-
Du reagierst nur auf das Click-Ereignis.
Wie ich bereits oben angedeutet habe, gibt es dafür aber andere Ergebnisse. Das Click-Ereignis wird auch ausgelöst, wenn man garnicht an der Auswhal ändernt.
Bitte regisitrere den Eventhandler eher auf TreeView.AfterSelect
Ferner musst du in deinem Code eine Prüfung ausführen:
''' ''' Sollte der Syntax nicht stimmen, sorry. ''' Habe schon lange nicht mehr mit VB gearbeitet... ''' IF TV_Ordner.SelectedNode <> Nothing THEN ''' Es gibt einen Wert, jetzt kann man Arbeiten L_Knotenname.Text = TV_Ordner.SelectedNode END IF
Ich hoffe, das beantwortet deinen Fragen.
© 2015 Thomas Roskop
Germany // Deutschland- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 20. Juli 2015 07:27
- Bearbeitet Thomas Roskop Montag, 20. Juli 2015 15:21 VB anwenden
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 28. Juli 2015 05:55
-
Hi Jörg,
wenn die Fehlernachricht "Objektverweis wurde nicht auf eine Objektinstanz festgelegt" kommt, dann sollte man sich die Variable anschauen, die keine Verweis enthält. In Deinem Falls kann das TV_Ordner sein, weil sie vielleicht im konkreten Kontext (Routine) nicht gefüllt wurde. Wenn "TV_Ordner" einen Verweis enthält, dann wird kein SelectedNode zur Verfügung stehen. Ursache dafür kann sein, dass Du im falschen Ereignis die Anweisung nutzt.--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks -
Hallo Thomas,
''' Sollte der Syntax nicht stimmen, sorry.
''' Habe schon lange nicht mehr mit VB gearbeitet...Ich habe Deinen Beitrag als Antwort vorgeschlagen, weil Jörg Rocktäschel bestätigt hat, dass er ihm weitergeholfen hat. Würdest Du jedoch den Codeausschnitt der VB.NET-Syntax annähern, und zwar: != durch <> und Null durch Nothing ersetzen und ein Leerzeichen zwischen END und IF einfügen?
Gruß,
DimitarBitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.