引发 UserControl 的默认 Click 事件
Raising UserControl's default Click event
我创建了一个用户控件。
我在里面放了一个按钮。
现在,当我单击按钮时,我想引发默认的 Click 事件。
为此,我添加了以下代码:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
RaiseEvent Click(sender, e)
End Sub
我做错了什么?
这是用户控件的全部代码:
Imports System.ComponentModel
Public Class ucColorButton
<Browsable(True)>
Public Overrides Property BackColor() As Color
Get
Return Me.Button1.BackColor
End Get
Set(value As Color)
Me.Button1.BackColor = value
End Set
End Property
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
RaiseEvent Click(sender, e)
End Sub
End Class
编译器告诉我:
There's no RaiseEvent definition for the event "Click"
您不使用 RaiseEvent
引发继承事件。这就是为什么所有事件都应该有一个关联的方法。要引发 Click
事件,您可以调用 OnClick
方法,这是唯一使用 RaiseEvent
的地方。如果您想更改 Click
事件的行为,那么您可以覆盖该方法,否则您只需接受基础 class 的默认行为。要查看事件是如何正确实施的 - 以及如何在您继承的基础 classes 中实施 - check this out.
此外,虽然在这种情况下技术上并不重要,但您实际上不应该将 e
参数从内部事件处理程序传递到外部事件。您应该根据活动的要求创建自己的 EventArgs
对象。
最后,如果你能用RaiseEvent
,把sender
参数也传上去就不对了。 sender
始终应该是引发事件的对象。在您的情况下,这是用户控件,而不是内部 Button
。幸运的是,调用 OnClick
将解决这个问题。如果您需要传递有关单击哪个子控件的信息,那么您应该定义自己的事件并通过 e
参数传递该信息。
我创建了一个用户控件。 我在里面放了一个按钮。 现在,当我单击按钮时,我想引发默认的 Click 事件。
为此,我添加了以下代码:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
RaiseEvent Click(sender, e)
End Sub
我做错了什么?
这是用户控件的全部代码:
Imports System.ComponentModel
Public Class ucColorButton
<Browsable(True)>
Public Overrides Property BackColor() As Color
Get
Return Me.Button1.BackColor
End Get
Set(value As Color)
Me.Button1.BackColor = value
End Set
End Property
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
RaiseEvent Click(sender, e)
End Sub
End Class
编译器告诉我:
There's no RaiseEvent definition for the event "Click"
您不使用 RaiseEvent
引发继承事件。这就是为什么所有事件都应该有一个关联的方法。要引发 Click
事件,您可以调用 OnClick
方法,这是唯一使用 RaiseEvent
的地方。如果您想更改 Click
事件的行为,那么您可以覆盖该方法,否则您只需接受基础 class 的默认行为。要查看事件是如何正确实施的 - 以及如何在您继承的基础 classes 中实施 - check this out.
此外,虽然在这种情况下技术上并不重要,但您实际上不应该将 e
参数从内部事件处理程序传递到外部事件。您应该根据活动的要求创建自己的 EventArgs
对象。
最后,如果你能用RaiseEvent
,把sender
参数也传上去就不对了。 sender
始终应该是引发事件的对象。在您的情况下,这是用户控件,而不是内部 Button
。幸运的是,调用 OnClick
将解决这个问题。如果您需要传递有关单击哪个子控件的信息,那么您应该定义自己的事件并通过 e
参数传递该信息。