Treeview nodes extra infos zuordnen
- VB.NET
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 37 Antworten in diesem Thema. Der letzte Beitrag () ist von big-d.
-
-
Hi
Einfach eine Klasse von der TreeNode-Klasse erben lassen, die Eigenschaften hinzufügen und statt den TreeNode-Instanzen halt Instanzen der eigenen Klasse hinzufügen. Mit DirectCast(value, MyTreeNode) kannst du dann auf die Nodes zugreifen, wie du auch auf die TreeNode-Instanzen zugreifen kannst.
Gruß
~blaze~ -
Du kannst auf MyTreeNodes direkt zugreifen, ohne sie zu casten. Das ist nicht erforderlich.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! -
-
-
-
Du musst es schon Public deklarieren und es ist üblich, mit Properties zu arbeiten.
Gruß
~blaze~Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „~blaze~“ ()
-
-
~blaze~ schrieb:
Public Property Lool() As String
Das ist eine Property, die kannst Du nach außen verwenden wie eine Variable:
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! -
-
Hmm....
Sorry, ich komm da nicht weiter....
Ich hab' folgenden Code von blog.bigbasti.com :
und ich möchte(evtl in der xml Datei das als Property mitpeichern lassen(also nicht als String, der gesplittet werden muss...
Klasse aus einem Blogpost auf blog.bigbasti.com VB.NET-Quellcode
- 'Author: Sebastian Gross
- 'Web: www.bigbasti.com
- 'Blog: blog.bigbasti.com
- 'E-mail: kontakt@bigbasti.com
- 'XMLParser Version 1.1
- 'LIZENZ: Sie können diesen Code gerne in Ihren eigenen Projekten verwenden
- 'sowie modifizieren und weiterentwickeln. Gerne können Sie mir auch Wünsche,
- 'Änderungen üder Fehler mailen.
- 'Ich würde mich freuen wenn Sie mir eine Kurze mail schreiben, und Ihr Projekt
- 'beschreiben in dem Sie diesen Code verwenden. Ich würde dann einen Back-Link
- 'auf meiner Homepage zu ihrem Projekt erstellen!
- 'Für weitere Tipps & Tricks sowie Beispiele besuchen Sie meine o.g. Homepage.
- #Region "Changelog"
- 'Changelog:
- '------------------------------------------------------------------------------
- 'v. 1.1 01.09.2009
- '------------------------------------------------------------------------------
- '* Funktionen zum exportieren & importieren von TreeViews hinzugefügt
- '* Funktions-beschreibungen hinzugefügt
- '* Regionen hinzugefügt
- '* FIX: Die XMLNode Namen werden nun richtig gespeichert und gelesen
- '* Funktionsbeschreibungen hinzugefügt
- '------------------------------------------------------------------------------
- 'v. 1.0 21.08.2009
- '------------------------------------------------------------------------------
- #End Region
- Imports System.IO
- Imports System.Xml
- Public Class XMLParser
- 'Klassenvariablen
- '---
- Dim writer As XmlWriter
- Dim retNode As TreeNode
- Dim retTree As TreeView
- Dim xmlDoc As New XmlDocument
- '---
- Public Sub New()
- 'Konstruktor wird nicht benötigt
- End Sub
- ''' <summary>
- ''' Speichert eine TreeNode im XML-Format unter dem angegebenen Pfad ab.
- ''' </summary>
- ''' <param name="trn">Der TreeNode, der abgespeichert werden soll</param>
- ''' <param name="path">Der Pfad, unter dem der TreeNode abgespeichert werden soll</param>
- Public Sub exportTreeNodeXML(ByVal trn As TreeNode, ByVal path As String)
- 'Prüfen, ob Zieldatei bereits exestiert, wenn ja Löschen
- If File.Exists(path) Then File.Delete(path)
- Dim settings As New XmlWriterSettings()
- settings.Indent = True
- settings.OmitXmlDeclaration = False
- 'Die gewünschte Datei neu erstellen
- writer = XmlWriter.Create(path, settings)
- With writer
- .WriteStartDocument()
- .WriteStartElement(XmlConvert.EncodeName(trn.Text))
- writeNewTreeNode(trn)
- .WriteEndElement()
- .WriteEndDocument()
- .Close()
- End With
- End Sub
- ''' <summary>
- ''' Diese Funktion geht rekursiv durch alle Einträge der TreeNode
- ''' </summary>
- ''' <param name="startNode">Der TreeNode, in dem nach Weiteren Nodes gescht werden soll</param>
- Private Sub writeNewTreeNode(ByVal startNode As TreeNode)
- For Each tn As TreeNode In startNode.Nodes
- If tn.Nodes.Count < 1 Then
- 'Wenn tn ein End-element ist, also keine Unterelemente hat
- 'Neues Element erstellen
- writer.WriteStartElement(XmlConvert.EncodeName(tn.Text))
- 'Weitere Attribute anhängen
- '---
- 'writer.WriteAttributeString("MeinAttribut", "Wert")
- 'Die bezeichnung der node einfügen
- 'writer.WriteString(tn.Text)
- '---
- 'Element schließen
- writer.WriteEndElement()
- Else
- 'Wenn tn ein Node mit unternodes ist
- 'Neues Element erstellen
- writer.WriteStartElement(XmlConvert.EncodeName(tn.Text))
- writeNewTreeNode(tn)
- 'Element schließen
- writer.WriteEndElement()
- End If
- Next
- End Sub
- ''' <summary>
- ''' Diese Funktion Liest eine XML-Datei ein und wandelt diese in ein TreeNode um
- ''' </summary>
- ''' <param name="path">Der Pfad zu der XML-Datei, die in eine TreeNode eingelesen werden soll.</param>
- Public Function importTreeNodeXML(ByVal path As String) As TreeNode
- 'Try
- If File.Exists(path) Then
- xmlDoc.Load(path)
- Try
- 'Lädt man ein altes Default.xml wird es einen Fehler geben
- retNode = New TreeNode(XmlConvert.DecodeName(xmlDoc.ChildNodes(1).Name))
- Catch ex As Exception
- 'Wegen abwärtskompabilität:
- retNode = New TreeNode(XmlConvert.DecodeName(xmlDoc.FirstChild.Name))
- End Try
- readNewTreeNode(retNode.Nodes, xmlDoc.DocumentElement)
- End If
- 'Catch ex As Exception
- 'MessageBox.Show(ex.Message, "XMLParser Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
- 'End Try
- Return retNode
- End Function
- ''' <summary>
- ''' Diese Funktion geht rekursiv durch alle Einträge der XML-Datei
- ''' </summary>
- ''' <param name="node">Der Treenode an den die Ausgelesenenen XML-Nodes gehängst werden sollen</param>
- ''' <param name="xmln">Die XML-Node aus der die Unterbereiche ausgelesen werden sollen</param>
- Private Function readNewTreeNode(ByVal node As TreeNodeCollection, ByVal xmln As XmlNode) As TreeNode
- Dim nn As TreeNode
- For Each xn As XmlNode In xmln.ChildNodes
- If xn.Name.Equals("#text") Then
- nn = node.Add(XmlConvert.DecodeName(xn.Value))
- Else
- nn = node.Add(XmlConvert.DecodeName(xn.Name))
- End If
- readNewTreeNode(nn.Nodes, xn)
- Next
- Return nn
- End Function
- #Region "exportTreeView"
- ''' <summary>
- ''' Diese Funktion speichert die Angegebene TreeView im XML Format ab
- ''' </summary>
- ''' <param name="trv">Die TreeView, die als XML Datei exportiert werden soll</param>
- ''' <param name="path">Der Pfad, unter dem die XML-Datei gespeichert werden soll</param>
- Public Sub exportTreeViewXML(ByVal trv As TreeView, ByVal path As String)
- 'Prüfen, ob Zieldatei bereits exestiert, wenn ja Löschen
- If File.Exists(path) Then
- File.Delete(path)
- End If
- Dim settings As New XmlWriterSettings()
- settings.Indent = True
- settings.CheckCharacters = False
- settings.ConformanceLevel = ConformanceLevel.Auto
- 'Die gewünschte Datei neu erstellen
- writer = XmlWriter.Create(path, settings)
- 'Da man in einem XML Dokument nicht mehrere Root-Elemente haben kann,
- 'eine Treeview aber mehrere enthalten kann müssen wir eine neue Node
- 'um die anderen packen, die man beim einlesen wieder entfernen muss
- Dim myNode As TreeNode = New TreeNode("rootNode")
- For Each n As TreeNode In trv.Nodes
- myNode.Nodes.Add(n.Clone)
- Next
- writer.WriteStartDocument()
- With writer
- .WriteStartElement(XmlConvert.EncodeName(myNode.Text))
- writeNewTreeNode(myNode)
- .WriteEndElement()
- End With
- writer.WriteEndDocument()
- writer.Close()
- End Sub
- ''' <summary>
- ''' Diese Funktion lädt eine TreeView aus einer XML-Datei.
- ''' </summary>
- ''' <param name="trv">Die TreeView, in die die XML-Datei importiert werden soll</param>
- ''' <param name="path">Der Pfad, unter dem die XML-Datei gespeichert ist</param>
- Public Sub importTreeViewXML(ByVal trv As TreeView, ByVal path As String)
- 'Try
- If File.Exists(path) Then
- xmlDoc.Load(path)
- Try
- 'Lädt man ein altes Default.xml wird es einen Fehler geben
- retNode = New TreeNode(XmlConvert.DecodeName(xmlDoc.ChildNodes(1).Name))
- Catch ex As Exception
- 'Wegen abwärtskompabilität:
- retNode = New TreeNode(XmlConvert.DecodeName(xmlDoc.FirstChild.Name))
- End Try
- readNewTreeNode(retNode.Nodes, xmlDoc.DocumentElement)
- For Each n As TreeNode In retNode.Nodes
- trv.Nodes.Add(n)
- Next
- End If
- 'Catch ex As Exception
- 'MessageBox.Show(ex.Message, "XMLParser Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
- 'End Try
- End Sub
- #End Region
- End Class
Ich hoffe, ihr könnt mir nochmal helfen, weil ich im Moment echt aufm Schlauch stehe...
Mfg, big-d -
*[PUSH]*
Zu oberem Post:
Ich dachte an eine Art HTML-Syntax...
Also, dass es im Save-File etwa so aussieht:
aber dass man auch noch die Eigenschaft Lool (aus den oberen Posts) abspeichern und auslesen kann.
Schonmal danke für eure Hilfe! -
Ich würde es mal mit XML-Serialisierung versuchen. Wenn du nur deine eigenen Eigenschaften speichern willst, machs halt rekursiv: Importiere System.Xml, erstelle ein XmlDocument, rufe für jeden Knoten des TreeViews eine Methode auf, die die Daten des Knotens speichert und die Methode für jeden Unterknoten aufruft. Schon hast dus gespeichert. Beim Auslesen gehst du halt genau andersrum vor.
Gruß
~blaze~ -
-
-
naja, alle Möglichkeiten sind recht aufwändig und mindestens so schwer zu erläutern, wie sie zu kapieren sind.
ZB kannste IMO nicht erwarten, dass wir uns in Blogbastis 200 Zeilen Code einarbeiten, und dein Problem lösen, was du so überaus präzise umschreibst mit: "... komme iwie nicht weiter".
Ein Teil-Ansatz ist dir gegeben, nämlich eine Treenode-Erweiterung zu verwenden.
Ich hätte hier noch ein Gerät, mit dem man ungefähr alles, was man will in einen String schieben kann, und auch daraus restaurieren: flexible Settings
Aber weils eine sehr allgemeingültige Lösung ist, ist das auch nicht einfach zu kapieren. -
Ich hatte ja auch schon eine Idee, weiss aber nicht, wie ich dise umsetzen sollte!
Habe mich auch oben verschrieben -_-
DIe Ausgabe ist wie folgt:
und ich stelle mir es so vor:
-
-
mittels Dictionary(Of TKey, TValue) wäre das möglich.
Mit einer WeakReference hätte man sogar das Problem gelöst, die Einträge auch wieder zu entfernen, wenn ein Treenode entfernt wird. -
Jeder Node hat bereits eine Eigenschaft für Zusatzinfos.
Diese nennt sich TAG und ist vom Typ Object..
Kleines Beispiel:
VB.NET-Quellcode
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- TreeView1.Nodes(0).Tag = New MyInfo With {.DasUndDas = "Root Node oder so"}
- End Sub
- Private Class MyInfo
- Private _dasUnddAs As String
- Public Property DasUndDas() As String
- Get
- Return _dasUnddAs
- End Get
- Set(ByVal value As String)
- _dasUnddAs = value
- End Set
- End Property
- End Class
Welches Objekt du dem Tag zuweist bleibt dir Überlassen.
Gruss MonoDas ist meine Signatur und sie wird wunderbar sein!
-
Ähnliche Themen
-
FreShmaKer - - Sonstige Problemstellungen
-
lambr67 - - Sonstige Problemstellungen
-
5 Benutzer haben hier geschrieben
- Gast (28)
- ~blaze~ (4)
- RodFromGermany (2)
- Mono (2)
- ErfinderDesRades (2)