在项目中经常遇到在代码运行时动态 增加 / 删除 控件的事件.
C#:
-
控件代码部分
Button btnSave = new Button();
btnSave.Name = “btnSave”;
btnSave.Text = “Save”;
// 增加 Click事件
btnSave.Click += new EventHandler(btnSave_Click);
//删除事件
//btnSave.Click -= new EventHandler(btnSave_Click); -
事件代码部分
private void btnSave_Click(object sender, EventArgs e)
{
//…要执行的代码
}
//如果是简单的事件代码,例如只有几行,也可以用lamb更加简洁
例如:
private void InitWiList(string[] arrWiNo)
{
foreach (var item in arrWiNo)
{
RadioButton rd = new RadioButton();
rd.Text = item;
// rd.Click += new EventHandler(btnRefresh_Click);
//以下事件使用lamb
rd.Click += (obj, e) =>
{
MessageBox.Show((obj as RadioButton).Text);
};
this.Controls.Add(rd);
}
}
VB:
.增加事件
AddHandler CType(btnSave, Button).Click, AddressOf Me.btnSave_Click
.删除事件
RemoveHandler CType(btnSave, Button).Click, AddressOf Me.btnSave_Click
'关联一个function
AddHandler btnUpload.Click, Function()
'关联一个sub
AddHandler btnUpload.Click, AddressOf btnUpload_Click
'Function
Private Function Upload_Date(ByVal cmd As String)
Return “Uploaded.”
End Function
'Sub
Private Async Sub btnUpload_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpload.Click
MsgBox(“Upload_Date!”)
End Sub
微软DOCS 上的例子
Sub TestEvents()
Dim Obj As New Class1
’ Associate an event handler with an event.
AddHandler Obj.Ev_Event, AddressOf EventHandler
’ Call the method to raise the event.
Obj.CauseSomeEvent()
’ Stop handling events.
RemoveHandler Obj.Ev_Event, AddressOf EventHandler
’ This event will not be handled.
Obj.CauseSomeEvent()
End Sub
Sub EventHandler()
’ Handle the event.
MsgBox(“EventHandler caught event.”)
End Sub
Public Class Class1
’ Declare an event.
Public Event Ev_Event()
Sub CauseSomeEvent()
’ Raise an event.
RaiseEvent Ev_Event()
End Sub
End Class