Zdravím, můj dotaz se pořád motá okolo mého customTreeView. Teď mi jde o to jak z customTreeNode dám vědět do customtreeView že došlo ke změně hodnoty isEnabled nebo isReadOnly. Chtěl bych vytvořit události k těmto změnám. Mám tedy customTreeNode kde jsou vlastnosti isEnabled a IsReadOnly:
Public Class CustomTreeNode
Inherits TreeNode
Private _foreColor As Color
Private _isEnabled As Boolean
Private _isReadOnly As Boolean
Public Sub New()
MyBase.New()
_foreColor = Me.ForeColor
_isEnabled = True
_isReadOnly = False
End Sub
Public Property IsEnabled() As Boolean
Get
Return _isEnabled
End Get
Set(ByVal value As Boolean)
_isEnabled = value
If Not _isEnabled Then
_foreColor = Me.ForeColor
Me.ForeColor = SystemColors.GrayText
Me.Collapse()
Else
Me.ForeColor = _foreColor
End If
End Set
End Property
Public Property IsReadOnly() As Boolean
Get
Return _isReadOnly
End Get
Set(ByVal value As Boolean)
_isReadOnly = value
End Set
End Property
End Class
a pak mám customTreeView kde bych potřeboval odchytávat změny těchto vlastností:
Public Class customTreeView
Inherits TreeView
Public Event nodeIsEnabledChanged As EventHandler
Public Event nodeIsReadOnlyChanged As EventHandler
Protected Overrides Sub OnBeforeSelect(ByVal e As TreeViewCancelEventArgs)
If TypeOf e.Node Is CustomTreeNode Then
If Not DirectCast(e.Node, CustomTreeNode).IsEnabled Then
e.Cancel = True
End If
End If
MyBase.OnBeforeSelect(e)
End Sub
Protected Overrides Sub OnBeforeExpand(ByVal e As TreeViewCancelEventArgs)
If TypeOf e.Node Is CustomTreeNode Then
If Not DirectCast(e.Node, CustomTreeNode).IsEnabled Then
e.Cancel = True
End If
End If
MyBase.OnBeforeExpand(e)
End Sub
představoval jsem si to tak, že v customTreeView bych si vytvořil procedury s parametry:
Public Sub IsEnabledChanged(ByVal value As Boolean, ByVal index As Integer)
End Sub
Public Sub IsReadOnlyChanged(ByVal value As Boolean, ByVal index As Integer)
End Sub
které bych zavolal při změně hodnoty isReadOnly nebo isEnabled v customTreeNoed. Do procedury bych parametrem předal value a index node ze kterého byla událost zavolána. A zde bych z těchto procedur něják zavolal eventy.
Public Event nodeIsEnabledChanged As EventHandler
Public Event nodeIsReadOnlyChanged As EventHandler
Ale něják se mi to nepodaří převst do praxe a hlavně nevim jestli jsem to nevzal uplně za špatný konec. Zda to takto vůbec jde udělat. Nebo jak se v praxi řeší odkaz na událost z jednoho objektu na druhý?
|