针对表单控件事件的用户控件事件

时间:2016-05-01 15:47:26

标签: vb.net events user-controls

这是我的情况,我有一个具有Leave事件的用户控件:

Private Sub MyControl_Leave(sender As Object, e As EventArgs) Handles Me.Leave
    If Me.Enabled Then
        MsgBox(Property1)
    End If
End Sub

我这样做是为了防止在控件被禁用时触发保持事件。

然后在我的表单上,控件也有自己的Leave事件,因为我需要设置一些属性,以便用户控件上的保留事件需要。

Private Sub myControlOnForm_Leave(sender As Object, e As EventArgs) Handles MyControlOnForm.Leave
    MyControlOnForm.Property1 = "value1"
End Sub

触发的第一个事件是用户控件上的事件,然后是表单上的事件。

现在我的问题是,正如上面的代码所示,我需要在用户控制事件之前首先触发表单事件。

有没有解决这个问题?

2 个答案:

答案 0 :(得分:0)

表单需要在完成处理事件后调用用户控件中的过程。只需删除Handles Me.leave语句和私有语句即可。使用表单中的sub来调用用于处理事件的控件sub。

请注意,我已将发件人As对象更改为发件人为Mycontrol。

Private Sub myControlOnForm_Leave(sender As Mycontrol, e As EventArgs) Handles MyControlOnForm.Leave
    MyControlOnForm.Property1 = "value1"
    sender.MyControl_Leave(sender, e)
End Sub

表格上的代码

openssl ecparam -genkey -name secp160k1 -noout -out myprivatekey.pem

答案 1 :(得分:0)

  

触发的第一个事件是用户控件上的事件,然后是表单上的事件。

     

现在我的问题是,正如上面的代码所述,我需要表单事件   在用户控制事件之前先触发。

首先,您在该问题陈述中使用了错误的术语。它不是触发订单问题的事件,而是按照为UserControl的Leave事件注册的事件处理程序执行的顺序的问题。

.Net事件是一种用于调用多播委托的语法糖。引发事件时,将调用委托,并且执行处理程序的顺序是它们添加到委托的顺序。您可以通过各种"演练"来了解这一点。位于Events (Visual Basic)下的教程。

通过调用从继承树中的Control Class继承的 Overridable OnLeave方法, Leave 事件是 Raised UserControl类。对于类来说,处理自己生成的事件被认为是不好的形式;首选方法是覆盖引发事件的方法。

在您的情况下,您希望首先通知订阅该事件的表单,以便它可以修改UserControl上的属性,然后再执行某些操作以响应离开UserControl。

Public Class UserControl1
    Protected Overrides Sub OnLeave(e As EventArgs)
        MyBase.OnLeave(e)   ' this calls the base method that Raises the event
                            ' all event handlers will run before the subsequent code
                            ' executes
        If Me.Enabled Then
            'do something
        End If
    End Sub
End Class