C# 处理动态(运行时)控件的事件-VB.NET
我有一个WebBrowser控件,它是在运行时创建并添加到表单中的 如何将此控件连接到可以在运行时处理其事件的子例程?使用 e、 g 当你想摆脱它时(当你用完它时,你应该摆脱它) 在你的情况下,你可能会C# 处理动态(运行时)控件的事件-VB.NET,c#,vb.net,dynamic,runtime,controls,C#,Vb.net,Dynamic,Runtime,Controls,我有一个WebBrowser控件,它是在运行时创建并添加到表单中的 如何将此控件连接到可以在运行时处理其事件的子例程?使用 e、 g 当你想摆脱它时(当你用完它时,你应该摆脱它) 在你的情况下,你可能会 Dim web as New WebBrowser() AddHandler web.DocumentCompleted, AddressOf HandleDocumentCompleted 假设您创建了一个名为HandleDocumentCompleted的事件处理程序 根据您的需要,您也可
Dim web as New WebBrowser()
AddHandler web.DocumentCompleted, AddressOf HandleDocumentCompleted
假设您创建了一个名为HandleDocumentCompleted的事件处理程序
根据您的需要,您也可以在声明webbrowser时使用关键字;请参阅。我通过检查表单设计器生成的代码了解了这一点。从这里复制一个示例,如果您环顾四周,您可能会学到一些关于在运行时设置控件的其他有价值的东西 在C#中,它是用+=,在一个类的事件成员上用一个函数作为参数完成的,但是我手头没有VB.net来检查我自己。。。对不起 编辑:丹尼尔L在他的回答中也描述了这一点,详细内容见。
- 您需要使用AddHandler和RemoveHandler李>
- 如果通过AddHandler手动添加事件,请确保使用RemoveHandler将其删除(在适当的位置)李>
- 键入“AddHandler NameOfControl.”将通过intellisense提供可用事件的列表
- Intellisense、documentation(或“错误列表”)也将为您提供事件处理程序的“签名”
在VB中使用声明性事件语法是使用
AddHandler
的一种替代方法。要使用它,可以使用WithEvents
关键字声明控件(作为私有成员)。然后,可以在处理适当事件的方法上使用Handles
关键字:
Private WithEvents m_WebBrowser As WebBrowser
Private Sub WebBrowser_Navigate(ByVal sender As Object, ByVal e As WebBrowserNavigatedEventArgs) Handles m_WebBrowser.Navigate
MsgBox("Hi there")
End Sub
Private Sub SomeActionThatCreatesTheControl()
m_WebBrowser = New WebBrowser()
End Sub
这种方法主要有两个优点:
- 无需
移除处理程序
- 无需手动连接所有事件处理程序:这是自动完成的
AddHandler SharedTimer.Tick,AddressOf SharedTimer\u Tick'我有一个方法,可以在某些情况下发现控件并添加处理程序。
'这是一个简化的示例。
'是否可以在运行时传入处理程序
Private Sub Example(byval ph as Placeholder)
for each ctrl as control in ph.controls
if typeof (ctrl) is textbox then
dim cb as checkbox = ctrl
AddHandler cb.DataBinding, AddressOf MyHandler
end if
next
end sub
“我想做一些更像这样的事情
Private Sub Example(byval ph as Placeholder, **byref method as delagate**)
for each ctrl as control in ph.controls
if typeof (ctrl) is textbox then
dim cb as checkbox = ctrl
AddHandler cb.DataBinding, **method**
end if
next
end sub
我遇到的问题是调用该方法。这不起作用:
Example(myPlaceholder, addressof MyRuntimeHandler)
您可以使用Addhandler语句来执行这些操作。 您可以在运行时向webbrowser添加任何事件处理程序,如下所示 AddHandler WebBrowser1.xEvent, AddressOf WebBrowser1EventHandler AddHandler WebBrowser1.xEvent,WebBrowser1EventHandler的地址 同样,您可以使用RemoveHandler,它将事件与事件处理程序断开连接,如下所示: RemoveHandler WebBrowser1.XEvent, AddressOf WebBrowser1EventHandler RemoveHandler WebBrowser1.XEvent,WebBrowser1EventHandler的地址
Example(myPlaceholder, addressof MyRuntimeHandler)
AddHandler WebBrowser1.xEvent, AddressOf WebBrowser1EventHandler
RemoveHandler WebBrowser1.XEvent, AddressOf WebBrowser1EventHandler