代码之家  ›  专栏  ›  技术社区  ›  brovar

VB.NET-成员的事件处理问题

  •  0
  • brovar  · 技术社区  · 16 年前

    我发现在构造函数中引发的事件(直接间接地)不能在类外处理。为了证明这是否是实际问题,我编写了一个简单的示例应用程序。

    Namespace Utils
        Public Class A
            Public Event Test()
    
            Public Sub New()
                CallTest()
            End Sub
    
            Public Sub MakeACall()
                CallTest()
            End Sub
    
            Private Sub CallTest()
                RaiseEvent Test()
            End Sub
        End Class
    End Namespace
    

    Public Class Form1
        Private Sub Button1_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles Button1.Click
    
            m_A.MakeACall()
        End Sub
    
        Private Sub HandleTest() Handles m_A.Test
            MsgBox("ta-dah!")
        End Sub
    
        Protected WithEvents m_A As New Utils.A()
    End Class
    

    主要形式(未正确处理事件):

    Public Class Form1
        Private Sub Button1_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles Button1.Click
    
            m_A = New Utils.A()
        End Sub
    
        Private Sub HandleTest() Handles m_A.Test
            MsgBox("ta-dah!")
        End Sub
    
        Protected WithEvents m_A As Utils.A
    End Class
    

    写下这些文章后,这种行为的原因变得相当明显,但也许有一种方法可以省略它?

    2 回复  |  直到 16 年前
        1
  •  4
  •   user1228 user1228    16 年前

    这是处理此类情况的可接受模式:

    1. 实施 ISupportInitialize
    2. 在EndInit方法中触发事件

        2
  •  1
  •   Mike Hofer    16 年前

    如果这是一个仅限于Visual Basic的“问题”,我会感到惊讶;事实上,事件不能从尚未创建的对象中引发。只要你还在

    不同的编译器可能不一致。

    推荐文章