.net 自定义事件处理程序visualbasic

.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

我的工作需要一些VisualBasic编程,而我只使用C语言编程

所以我有这个代码:

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