Treeview mit Checkboxen - Doch noch eine Frage...

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von lris08.

    Treeview mit Checkboxen - Doch noch eine Frage...

    Hi,

    verstehe da den Zusammanhang nicht so ganz... vielleicht könntet Ihr mir das erklären...

    Habe Treeview mit dem unten genannten Code.
    Treevier habe ich Checboxes = true (Werden auch angezeigt)

    Mit diesem Beispiel habe ich es mal ausprobiert...

    VB.NET-Quellcode

    1. Private Sub Treeview1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TreeView1.Click
    2. With TreeView1.Nodes(1)
    3. .Checked = True
    4. End With
    5. End Sub


    Wenn ich das richtig verstanden habe, ist Nodes(1) praktisch die zweite Zeile... In diesem Beispiel würde der "Hackecn" auch bleiben, egal was ich anderes markiere oder "einhacke"...

    Nun möchte ich aber erreichen, daß ich eine markierung auch über den Hacken im Treeview setzen kann oder andersherum, markiere ich einen "Wert oder Zeile" soll da der Hacken gesetzt werden und wenn der Hacken vorher wo anders war - weg damit.

    Wenn ich das nun richtig verstehe, müßte ich die Zeilen vorher zählen, damit ich anschließend einen "Hacken" löschen kann bzw. setzen kann?

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Kat_Laden()
    2. Dim dt As DataTable = New DataTable("TreeView")
    3. Me.FillDataTable(dt)
    4. Me.FillTreeView(dt)
    5. Me.TreeView1.CollapseAll()
    6. TreeView1.Nodes(2).Expand()
    7. End Sub
    8. Public Sub FillDataTable(ByRef dt As DataTable)
    9. Try
    10. Dim sCN As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & Datenbankpfad & "\" & Datenbankname & ".mdb"
    11. Dim sql As String = "SELECT * FROM " & TableName08 & " ORDER BY ID"
    12. Dim cn As OleDb.OleDbConnection = New OleDb.OleDbConnection(sCN)
    13. Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(sql, cn)
    14. Dim cmd As OleDb.OleDbCommandBuilder = New OleDb.OleDbCommandBuilder(da)
    15. da.Fill(dt)
    16. Catch ex As OleDb.OleDbException
    17. MsgBox(ex.Message)
    18. End Try
    19. End Sub
    20. Public Sub FillTreeView(ByVal dt As DataTable)
    21. Dim Tn As TreeNode
    22. Tn = New TreeNode("Kategorie")
    23. Tn.ImageIndex = 0
    24. Tn.SelectedImageIndex = 1
    25. Tn.NodeFont = New Font(TreeView1.Font, FontStyle.Bold)
    26. Me.TreeView1.Nodes.Add(Tn)
    27. FillTreeNode_Sub(Tn, dt, Convert.ToInt32("0"))
    28. Me.TreeView1.EndUpdate()
    29. End Sub
    30. Public Sub FillTreeNode_Sub(ByRef tn As TreeNode, ByRef dt As DataTable, ByVal ID As Integer)
    31. Dim foundRows() As DataRow = dt.Select("Kat_ParentID = " + ID.ToString, "ID")
    32. Dim Tn_Sub As TreeNode
    33. For Each _r As DataRow In foundRows
    34. Tn_Sub = New TreeNode((_r("Kat_Tag").ToString))
    35. Tn_Sub.Tag = (_r("ID").ToString)
    36. Tn_Sub.ImageIndex = 0
    37. Tn_Sub.SelectedImageIndex = 1
    38. tn.Nodes.Add(Tn_Sub)
    39. FillTreeNode_Sub(Tn_Sub, dt, Convert.ToInt32(_r("ID")))
    40. Next
    41. End Sub


    Gruß
    Alex

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

    Du bist im Click-Event.
    Es gibt auch noch andere..
    wintoolz.de
    • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
    • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
    • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

    Benutze auch du Ecosia
    Schau dir mal in der TreeView die SelectedNode-Eigenschaft an.
    wintoolz.de
    • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
    • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
    • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

    Benutze auch du Ecosia

    VB.NET-Quellcode

    1. TreeView1.SelectedNode.Checked = True

    checked das selektierten Node.
    wintoolz.de
    • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
    • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
    • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

    Benutze auch du Ecosia
    Das hatte ich nicht verstanden...

    Dachte das die Checkbox und Treeview getrennt von einander zu sehen sind und sich das SelectNode nur auf das Treeview bezieht...

    Danke, für deine Antwort !



    Ist im Zusammenhang mir TreeView1.SelectedNode.Checked = True dann auch das deaktivieren der bereits gesetzten Hacken möglich?
    Jein.
    Beim TreeView gibt es leider kein CheckedItems. Ich würde eine Variable deklarieren, in der du den aktuellen Node speicherst.
    Danach kannst du mit TreeView.Nodes(Variable).Checked=False diese unchecken...
    wintoolz.de
    • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
    • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
    • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

    Benutze auch du Ecosia
    also im Grund so ?

    VB.NET-Quellcode

    1. Private Sub TreeView1_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect
    2. Dim Check As Integer = TreeView1.SelectedNode.Level <<< - wobei Level falsch ist
    3. Label23.Text = Check
    4. TreeView1.Nodes(Check).Checked = False
    5. TreeView1.SelectedNode.Checked = True
    6. End Sub


    Habe gerade versucht anstatt Level andere Optionen - komm aber nicht drauf...

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim Check As Integer
    3. Private Sub TreeView1_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect
    4. TreeView1.Nodes(Check).Checked = False
    5. TreeView1.SelectedNode.Checked = True
    6. Check = TreeView1.SelectedNode.Index
    7. End Sub
    8. End Class
    wintoolz.de
    • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
    • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
    • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

    Benutze auch du Ecosia
    naja, soweit war ich nicht weg davon :)


    Habe mal deinen Code getestet... Bekomme da diese FEhlermeldung:

    Das angegebene Argument liegt außerhalb des gültigen Wertebereichs.
    Parametername: index

    VB.NET-Quellcode

    1. Private Sub TreeView1_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect
    2. TreeView1.Nodes(Check).Checked = False
    3. TreeView1.SelectedNode.Checked = True
    4. Check = TreeView1.SelectedNode.Index
    5. End Sub
    Also bei mir gehts. Zumindest ohne weitere Level. Aber dann kommt auch keine Meldung.
    Wann kommt den die Fehlermeldung?
    wintoolz.de
    • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
    • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
    • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

    Benutze auch du Ecosia
    Wie gesagt, bei mir kommen keine Fehler, wenn ich Subnodes anklicke.
    Und der Code ist nicht für mehrere Level ausgelegt. Musst noch ändern.
    Anstelle des Index musst halt den Pfad oder sonst irgendwie eine eindeutige ID oder ähnliches zwischenspeichern.
    wintoolz.de
    • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
    • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
    • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

    Benutze auch du Ecosia
    Denke mal das hat was mit dem SubNodes zu tun...

    na ich werde vorsichtshalber das mit den Cheboxes mal zurückstellen...
    will mir da jetzt nix kaputt machen...

    Werde es aber die Tage noch mal probieren...

    Danke aber für deine Hilfe...