这是我的情况,我有一个具有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
触发的第一个事件是用户控件上的事件,然后是表单上的事件。
现在我的问题是,正如上面的代码所示,我需要在用户控制事件之前首先触发表单事件。
有没有解决这个问题?
答案 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继承的 OverridableOnLeave
方法, 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