Node in altem Treeview selektieren und in neuem Treeview öffnen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Node in altem Treeview selektieren und in neuem Treeview öffnen

    Hallo liebe Programmierer. Seit mehreren Tagen versuche ich durch kleinere Programme und Durchforstung des Internets mein Problem zu lösen. Da es mir einfach nicht gelingen will, dachte ich mir ich frag hier mal nach und überlasse euch die Arbeit;)

    Ich programmiere in Visual Basic .net und habe ein Treeview erstellt welches diverse Aufträge aus einer Datenbank enthält. Dementsprechend gibt es mehrere Ebenen. Wenn nun ein User einen Knoten selektiert und in den Bearbeitungsmodus wechselt (per Knopfdruck) soll nur noch der komplette Ast (dieser eine gewählte Auftrag) sichtbar sein. Schön und gut, das bekomme ich gerade noch so hin. Doch um das Programm Benutzerfreundlicher zu machen, möchte ich, dass bei dem neu geladenen Treeview sofort der knoten aufgeht in dem der User sich befinden hat, zb. Level 3 und Index 15.

    Leider versagen meine ganzen Ansätze und ich bin am Ende. Hoffe ich konnte mich gut ausdrücken und ihr könnt mir weiter helfen.




    MfG Euer Steak
    wenn der neue Treeview nur noch einen Ast enthält, dann willst du wohl alle seine Nodes expandieren.
    Da gibts einen Befehl für - guck dir die Treeview-Klasse mal im ObjectBrowser an (nicht im Internet! ;) )

    achso - viele (vlt. gar die meisten) kennen den ObjectBrowser ühaupt nicht: VisualStudio richtig nutzen (Google ist nicht deine Mami)
    @T-BoneSteak Willkommen im Forum. :thumbup:
    Sofern die Nodes beider Treeviews identische Namen haben, probier mal dies:
    Ggf. musst Du den Root-Path weglassen.

    VB.NET-Quellcode

    1. Private Sub TreeView1_AfterSelect(sender As Object, e As TreeViewEventArgs) Handles TreeView1.AfterSelect
    2. For Each nd As TreeNode In TreeView2.Nodes
    3. nd.Collapse()
    4. Next
    5. Dim node As TreeNode = TreeView1.SelectedNode
    6. Dim path = node.FullPath
    7. Dim parts() = path.Split("\"c)
    8. Dim tn As TreeNode = TreeView2.Nodes(parts(0))
    9. For i = 1 To parts.Length - 1
    10. tn = tn.Nodes(parts(i))
    11. Next
    12. TreeView2.SelectedNode = tn
    13. TreeView2.SelectedNode.Expand()
    14. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Vielen Dank für eure schnellen Antworten. Doch leider bekomm ich es weder mit dem Objektkatalog noch mit dem Code hin.
    @RodFromGermany ich bekomme immer eine NullReferenceException Fehlermeldung in der zweiten For-Schleife..

    Edit: Die Nodes haben identische Namen

    Edit.Edit: Meiner Meinung nach ist das Problem, dass bei der Zeile "Dim tn As TreeNode = TreeView2.Nodes(parts(0))" nichts in tn geschrieben wird, da mit FullPath nicht der key sonder der Text der Nodes geholt wird, aber eben in besagter Zeile ein key erwartet wird. Da ich aber noch ein Anfänger bin, lass ich mich gerne eines Besseren belehren;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „T-BoneSteak“ ()

    T-BoneSteak schrieb:

    NullReferenceException
    Ich hab vom Designer generierte Node-Namen, die sind alle disjunkt. Bei mir läuft es.
    Setz mal einen Haltepunkt drauf und sieh Dir genau an, was da Nothing ist.
    Gugst Du auch hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also in tn wird nichts geschrieben. Nach der Zeile "tn = TreeView2.Nodes(parts(0))" ist tn immer noch nothing
    Bilder
    • asfasfas.png

      43,56 kB, 2.037×535, 136 mal angesehen
    • Objektkatalog.png

      119,81 kB, 1.836×1.015, 124 mal angesehen
    • Unbenandasgdant.png

      98,03 kB, 1.873×1.033, 136 mal angesehen

    T-BoneSteak schrieb:

    Die Nodes haben identische Namen
    Da würde ich jetzt dran zweifeln.
    Machma MessageBox.Show(parts(0))
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Sieh Dir mal alle parts einzeln an und stell fest, ob es doch einen Unterschied gibt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wenn ich jetzt z.B. tn = TreeView2.Nodes(0) da öffnet er natürlich den ersten Knoten, da Index gleich Null. Und die Eingabeparameter sind bei mir entweder Index oder Key. Aber mit FullPath, wenn ich mir das dann ausgeben lasse, sind es nicht die Keys der Nodes sondern der Node.Text.. Hier liegt der Hund begraben

    T-BoneSteak schrieb:

    Node.Text
    Jou. In meinem Beispiel ist Node.Text = Node.Name.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!