Treeview mit erweiterten Attributen erstellen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von spYro.

    Treeview mit erweiterten Attributen erstellen

    Hi :)
    Habe folgendes Problem:
    Ich möchte gerne einen Treeview erstellen. Dieser soll später Daten aus einer XML einlesen und diese auch wieder zurückspeichern können.
    Die einzelnen Nodes sollen mehr als die default-Attribute besitzen (z.B. "IP", "MAC" als string u.s.w.).
    Ich hatte mir das so vorgestellt, dass ich eine Klasse erstellt "MyNode", die die normale Node-Klasse erweitert, sodass ich einfach ein paar strings zu jeder node hinzufügen kann.
    Aber anscheinend ist das nicht so ganz einfach. Folgenden Code habe ich bereits:

    VB.NET-Quellcode

    1. Public Class MyNode
    2. extends System.Windows.Forms.TreeNode
    3. Dim nodeType As String
    4. Dim pc_ip As String
    5. Dim pc_mac As String
    6. Dim pc_name As String
    7. Dim pc_beschr As System.Text.UTF8Encoding
    8. 'Public Sub New(ByVal name As String)
    9. ' Me.pc_name = name
    10. 'End Sub
    11. 'Public Sub New()
    12. 'End Sub
    13. End Class

    Das ist meine Klasse.
    Weiter oben im Code fülle ich die Nodes erstmal mit werten.

    VB.NET-Quellcode

    1. Private Sub InitializeComponent()
    2. Me.components = New System.ComponentModel.Container()
    3. 'Dim TreeNode1 As System.Windows.Forms.TreeNode = New System.Windows.Forms.TreeNode("PC 1")
    4. Dim Treenode1 As MyNode = New MyNode("PC 1")
    5. Dim TreeNode2 As MyNode = New MyNode("PC 2")
    6. Dim TreeNode3 As MyNode = New MyNode("PC 3")
    7. Dim TreeNode4 As MyNode = New MyNode("PC 4")
    8. .... u.s.w.


    Aber die nächste Zeile sieht folgendermaßen aus:

    VB.NET-Quellcode

    1. Dim TreeNode5 As MyNode = New MyNode("Beamer", New MyNode() {Treenode1, TreeNode2, TreeNode3, TreeNode4})

    Und da kommt das Problem. Denn VB sagt mir, dass dieser new-aufruf zu viele Parameter hat. Stimmt auch. Der MyNode-Constructor hat maximal einen Parameter (wenn ihr euch meinen auskommentierten Constructor-Code oben anseht). Aber wenn ich die nodes statt als MyNode mit dem normalen "System.Windows.Forms.TreeNode"-Typ erstelle, dann kann man diese mehreren Parameter übergeben, wodurch die treeview-hierarchie entsteht.
    Also sieht es für mich so aus, als ob meine MyNode-Klasse den normalen Constructor der "System.Windows.Forms.TreeNode"-Klasse nicht mitübernimmt, sondern einen eigenen leeren Constructor erstellt, selbst wenn ich keinen explizit festlege.
    Ich müsste also eigentlich den Constructor der "System.Windows.Forms.TreeNode"-Klasse als neuen Constructor in meine MyNode-Klase kopieren.
    Aber wie kann ich das anstellen? Oder gibt es einfachere Wege, mein Vorhaben umzusetzen und ich kenne diese nur nicht?

    Bin dankbar für jede Antwort :)

    Viele Grüße
    spYro

    ErfinderDesRades schrieb:

    achja - dein Node kennt den Konstruktor ja garnet :/

    Entweder schreibste ihm einen, oder - wie gesagt - einzeln adden. Wassis weniger Code-Aufwand?

    Also weniger Arbeit wäre in dem Fall bestimmt das einzeln Adden. Aber die Frage ist, ob das dann hinterher noch mit dem XML-im- und export klappt. Evtl. muss ich dann die ganze import-funktion, die VB defaultmäßig mitbringt, neu coden. Wenn nämlich diese import-funktion die nodes auch direkt in einer line addet und dabei auf den construktor zugreift, bin ich am arsch xD
    Hm.... Gibts nicht ne möglichkeit entweder den treenode-constructor auf meinen MyNode-constr zu verweisen oder ihn dahin zu kopieren? Dann wäre das Problem auch gelöst :/
    Ansonsten würde ich noch überlegen, ob ich die Klassen-Erweiterung weglasse und stattdessen nen völlig neues array-objekt baue, das dann die zusätzlichen daten-strings enthält und über ne id oder so mit dem treeview verknüpft wird.
    Allerdings müsste ich das dann auch wieder in der xml speichern und alles und so.... gott, gibts da nicht was von ratiopharm? ._.

    ErfinderDesRades schrieb:

    spYro schrieb:

    ... die ganze import-funktion, die VB defaultmäßig mitbringt,...
    wassn fürne import-funktion, die vb mitbringt?
    xml-import in treeviews?

    Naja, eher "die VB so halb mitbringt" xD
    Meinte den Codeschnippsel hier:

    VB.NET-Quellcode

    1. Try
    2. ' SECTION 1. Create a DOM Document and load the XML data into it.
    3. Dim dom As New XmlDocument()
    4. dom.Load(tx_xml.Text)
    5. ' SECTION 2. Initialize the treeview control.
    6. tree_main.Nodes.Clear()
    7. tree_main.Nodes.Add(New TreeNode(dom.DocumentElement.Name))
    8. Dim tNode As New TreeNode()
    9. tNode = tree_main.Nodes(0)
    10. ' SECTION 3. Populate the TreeView with the DOM nodes.
    11. AddNode(dom.DocumentElement, tNode)
    12. tree_main.ExpandAll()
    13. Catch xmlEx As XmlException
    14. MessageBox.Show(xmlEx.Message)
    15. Catch ex As Exception
    16. MessageBox.Show(ex.Message)
    17. End Try


    Aber ich werds jetzt vermutlich echt mal so probieren, dass ich nen Array mache und als Index nehm ich dann den absoluten Pfad der jeweiligen Node. Dann noch ne Dimension dranhängen für die verschiedenen werte und zack, sollte das klappen :)
    Öh.... muss die dann nurnoch seperat zur XML speichern oder nen weg finden, wie ich die Daten in der Struktur verstecke und wieder auslesen kann, ohne dass die attribute als nodes im treeview angezeigt werden :)