Vyvolání události jiného objektu   zodpovězená otázka

VB.NET, WinForms

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ý?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

TreeNode má vlastnost TreeView, což je jeho mateřský ovládací prvek (TreeView).

Friend Class CustomTreeView
  Inherits TreeView
  Public Event IsEnabledChanged As EventHandler(Of TreeViewEventArgs)
  Friend Overridable Sub OnIsEnabledChanged(sender As Object, e As TreeViewEventArgs)
    RaiseEvent IsEnabledChanged(sender, e)
  End Sub
End Class

Friend Class CustomTreeNode
  Inherits TreeNode
  Public Property IsEnabled() As Boolean
    Get
    End Get
    Set (value As Boolean)
      If ((Me.TreeView IsNot Nothing) AndAlso (TypeOf Me.TreeView Is CustomTreeView)) Then
        DirectCast(Me.TreeView, CustomTreeView).OnIsEnabledChanged(Me, New TreeViewEventArgs(Me))
      End If
    End Set
  End Property
End Class

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Děkuji, to je přesně ono:)

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback