.net 自定义事件处理程序visualbasic
我的工作需要一些VisualBasic编程,而我只使用C语言编程 所以我有这个代码:.net 自定义事件处理程序visualbasic,.net,vb.net,event-handling,.net,Vb.net,Event Handling,我的工作需要一些VisualBasic编程,而我只使用C语言编程 所以我有这个代码: Public Custom Event Command As JQDialogEventHandler AddHandler(ByVal value As JQDialogEventHandler) commandHandler += value End AddHandler RemoveHandler(ByVal value As JQD
Public Custom Event Command As JQDialogEventHandler
AddHandler(ByVal value As JQDialogEventHandler)
commandHandler += value
End AddHandler
RemoveHandler(ByVal value As JQDialogEventHandler)
If commandHandler IsNot Nothing Then
commandHandler -= value
End If
End RemoveHandler
RaiseEvent()
End RaiseEvent
End Event
我得到一个错误:没有为类型“ControlsModificados.ControlsModificados.JQDialogEventHandler”和“ControlsModificados.ControlsModificados.JQDialogEventHandler”定义运算符“+”
如何以其他方式编写代码“commandHandler-=value”,以消除错误!或者如何为eventhandler定义这些运算符。多谢各位 已编辑 更多代码:
Namespace ControlesModificados
Public Class JQDialogButton
Inherits Button
Private commandHandler As JQDialogEventHandler
Public Custom Event DialogCommand As JQDialogEventHandler
AddHandler(ByVal value As JQDialogEventHandler)
commandHandler += value
End AddHandler
RemoveHandler(ByVal value As JQDialogEventHandler)
If commandHandler IsNot Nothing Then
commandHandler -= value
End If
End RemoveHandler
End Event
...
Protected Overrides Sub OnClick(ByVal e As EventArgs)
If commandHandler IsNot Nothing Then
commandHandler(Me, New JQDialogEventArgs() With { _
.CommandArgument = Me.CommandArgument, _
.CommandName = Me.CommandName _
})
Else
MyBase.OnClick(e)
End If
End Sub
如您所见,DialogCommand正在使用另一个JQDialogHandler,因此我不能仅使用
Public Custom Event DialogCommand As JQDialogEventHandler
您是否需要特定的自定义实现? 您可以在VB.net中执行此操作:
Public Event Command(sender as object, e as JQEventDialog) ''//to define events
Public Event Command as JQDialogEventHandler ''//to define events
RaiseEvent Command(me, e) ''//to raise an event
Addhandler object.Event, addressof method ''//to add a subscriber
Removehandler object.Event, addressof method ''//to remove as subscriber
更新您的代码 理想情况下,您可以这样做: 公共类JQDialogButton 继承按钮
public event DialogCommand as JQDialogEventHandler
Overrides Sub OnClick(ByVal e As EventArgs)
RaiseEvent DialogCommand(Me, _
New JQDialogEventArgs() With { _
.CommandArgument = Me.CommandArgument, _
.CommandName = Me.CommandName _
})
End Sub
End Class
但是,由于您需要检查事件的订阅者,您可以这样做(您需要向AddHandler和RemoveHandler部分添加一些空检查):
像在c#中那样编写它,然后使用这个奇妙的工具将其转换为vb
我想我会的,因为我正在尝试迁移这个控件:我从这个问题中得到了:@euther:第二个方法(
公共事件命令,如JQDialogEventHandler
)与您发布的代码片段相同,所以应该可以。@Pondidum谢谢,我会测试它,我会告诉您它是如何运行的@尤瑟:我实际上最终打开了VisualStudio来修复它:D@Pondidum我想你是对的,但我必须检查一下,我以后再告诉你!这正是我所做的,我以我在这里发布的代码结束。
Public Class JQDialogButton
Inherits Button
Private commandHandler As Eventhandler
Public Custom Event DialogCommand As Eventhandler
AddHandler(ByVal value As Eventhandler)
commandHandler = [Delegate].Combine(commandHandler, value)
End AddHandler
RemoveHandler(ByVal value As Eventhandler)
commandHandler = [Delegate].Remove(commandHandler, value)
End RemoveHandler
RaiseEvent()
commandHandler.Invoke(Me, New JQDialogEventArgs() With {.CommandArgument = Me.CommandArgument, .CommandName = Me.CommandName})
End RaiseEvent
End Event
Protected Overrides Sub OnClick(ByVal e As EventArgs)
If commandHandler IsNot Nothing Then
RaiseEvent DialogCommand()
Else
MyBase.OnClick(e)
End If
End Sub
End Class
' this is the same as obj.Ev_Event += EventHandler
AddHandler Obj.Ev_Event, AddressOf EventHandler
Obj.CauseSomeEvent()
' this is the same as obj.Ev_Event -= EventHandler
RemoveHandler Obj.Ev_Event, AddressOf EventHandler