Treeview - Mehrere Nodes mit Maus selektieren

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Treeview - Mehrere Nodes mit Maus selektieren

    Hallo,

    Ich habe ein Treeview wie im tv.png abgebildet.

    Jetzt möchte ich mit der linken Maustaste auf z.B. Knoten4 klicken, die Maus halten und auf Knoten1 ziehen, dann loslassen. Oder umgekehrt.

    Es sollen jetzt nur die Hauptknoten markiert werden und in einer List die Indexe von den Hauptknoten gespeichert werden.

    Hab keinen Plan wie ich da beginnen soll. HILFE :-))))

    LG
    Bilder
    • tv.png

      37,19 kB, 324×467, 54 mal angesehen
    normaler Treeview kann das nicth.
    man kann ShowCheckboxes einstellen, und dann kann man codeseitig die Treenodes auf Checked stellen, die man gecheckt haben möchte.
    Das wäre die einfachere Lösung, und leichter gangbar.

    Die Markieung, die normalerweise den SelectedNode markiert, kann man so aber nicht auf weitere Nodes übertragen.
    Um das zu berwerkstelligen müsstest du dich in das Thema OwnerDrawing einarbeiten, und auf Treeview-OwnerDrawing spezielisieren.
    Das wiederum setzt eine gute Beherrschung der Programmiersprache voraus - also mal Frage: Wieviel Zeit bist du bereit, in diese Aufgabe zu investieren?

    Übrigens gute Darstellung des Problems - eine nachvollziehbare Problembeschreibung ist oft mit die grösste Hürde.

    Aber ich könnte mir vorstellen, dass mit den Checkboxes ist in deinem Fall eine ebenso gute Lösung, oder gar besser.
    Selbst wenn man nichtmal Drag&Drop implementiert (also das mit linke Maustaste gedrückt halten und ziehen).

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    OK. Probiere das mal aus einer Anderen Sichtweise zu schildern. Bitte siehe das neue Bild im Anhang.

    Das Treeview hat ein Menü ( rechte Maustaste ) und spiegelt eine List(Of VerschiedeneKlassen) wieder. Also z.B. das ParentNode mit Index 4 ist in der Liste auch auf Index 4.

    Mit dem Menü kann ich den geklickten Index eine Option zuweisen. Wenn ich also Bohrung_A_1 bis Bohrung_A_4 eine bestimmte Option zuweisen will, muss ich also 4mal mit der rechten Maus auf jedes ParentNode klicken und im Menü die Option auswählen und zuweisen.

    Bei 4 Stück oder bei Bohrung_B 3 Stück ist das nicht das Problem. Es können aber auch 50 Bohrungen sein und das kann man so vergessen. Ist ja nicht zumutbar.

    Man kann auch nicht allen Bohrungen etwas zuweisen, weil diese eben verschieden sein können.


    Also würde gerne mit der Maus auf Bohrung_A_1 klicken, die Maus halten und bei Bohrung_A_4 loslassen und herausfinden welche ParentIndexe ich in diesem theoretischen Mausrechteck habe.

    Wie könnte man das lösen?

    LG
    Bilder
    • tv.png

      8,65 kB, 246×462, 50 mal angesehen
    Naja, das könnte man einfacher hinbekommen. So würd ich als Einstieg für die Nodesammlung arbeiten:

    VB.NET-Quellcode

    1. Private FirstNode As TreeNode = Nothing
    2. Private Sub TreeView1_MouseDown(sender As Object, e As MouseEventArgs) Handles TreeView1.MouseDown
    3. FirstNode = TreeView1.GetNodeAt(e.Location)
    4. End Sub
    5. Private Sub TreeView1_MouseUp(sender As Object, e As MouseEventArgs) Handles TreeView1.MouseUp
    6. Dim SelectedNodes As New List(Of TreeNode)
    7. Dim CollectNodes = False
    8. Dim LastNode = TreeView1.GetNodeAt(e.Location)
    9. For i = 0 To TreeView1.Nodes.Count - 1
    10. If TreeView1.Nodes(i) Is FirstNode Then CollectNodes = True
    11. If CollectNodes Then SelectedNodes.Add(TreeView1.Nodes(i))
    12. If TreeView1.Nodes(i) Is LastNode Then CollectNodes = False
    13. Next
    14. End Sub
    So werden, wenn man die Maus von oben nach unten zieht, die Hauptknoten gesammelt, die zwischen MouseDown und MouseUp umfasst sind.
    Dateien
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ist ja auch ein Video :). Da wollte ich eigentlich nur zeigen, was der Code macht, damit @DragsTrail erstmal schauen kann, ob es das ist, was er will. Der Code selber steht ja schon da. Da jetzt n Testprojekt zu machen, erschien mir überflüssig.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    Der Code selber steht ja schon da.

    Sorry, ich kann an dem Code nicht sehen, wie da die Selectierung an die Nodes kommt.
    Also wieso sind sie auf dem Bildle blau? - das find ich das interessante.

    Edit
    Achgott - TreeNode hat einfach eine IsSelected - Property!
    Sowas ist zu einfach für mich - damit binnich überfordert.
    Nun, wie die Mehrfach-Selektierung auf dem Bild in Post#5 zustande kommt, weiß ich allerdings auch nicht. Denn IsSelected ist ReadOnly. Da ich TreeViews aber nicht nutze, isses mir - zugegeben - fast egal. Mein Code gibt ja nur wieder, welche Nodes durch das Ziehen der Maus erfasst werden. Aber die Selektierung wird ja dadurch nicht geändert. Vielleicht verrät es uns @DragsTrail. Nicht, dass er am Ende am Bild getrickst hat ;)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.