Hi Christian,
zur Lösung des Problems kannst Du eine eigene TreeNode-Klasse ableiten und diese mit einer Eigenscjaft binden, die denInhalt der Text-Eigenschaft des ausgewählten Knotens nach außen reicht bzw. von außen übernimmt. Hier mal eine kleine Demo:
Imports System.ComponentModel
Imports System.Runtime.CompilerServices
Public Class Form24
Private WithEvents tv As New MyTreeView With {.Dock = DockStyle.Fill}
Private tb As New TextBox With {.Dock = DockStyle.Bottom}
Private rnd As New Random
Private Sub Form24_Load(sender As Object, e As EventArgs) Handles Me.Load
Me.Controls.AddRange(New Control() {tb, tv})
tb.DataBindings.Add(NameOf(TextBox.Text), Me, NameOf(Info))
tv.DataBindings.Add(NameOf(MyTreeView.SelectedNodeText), Me, NameOf(Info), False, DataSourceUpdateMode.OnPropertyChanged)
LoadTreenodes(tv.Nodes, 1)
tv.ExpandAll()
End Sub
Private Sub LoadTreenodes(tn As TreeNodeCollection, level As Integer)
For i = 1 To rnd.Next(3, 8)
Dim n As New TreeNode With {.Text = $"Node {level} {i}"}
If 1 / level > rnd.NextDouble() Then LoadTreenodes(n.Nodes, level + 1)
tn.Add(n)
Next
End Sub
Public Property Info As String
Public Class MyTreeView
Inherits TreeView
Implements INotifyPropertyChanged
Sub New()
MyBase.New
AddHandler Me.AfterSelect, Sub()
OnPropertyChanged(NameOf(SelectedNodeText))
End Sub
End Sub
Public Property SelectedNodeText As String
Get
Return Me.SelectedNode.Text
End Get
Set(value As String)
If Me.SelectedNode IsNot Nothing Then Me.SelectedNode.Text = value
End Set
End Property
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Friend Sub OnPropertyChanged(<CallerMemberName> Optional propname As String = "")
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propname))
End Sub
End Class
End Class
--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks