提升UserControl的默认Click事件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了提升UserControl的默认Click事件相关的知识,希望对你有一定的参考价值。

我创建了一个usercontrol。我已经放了一个按钮。现在,当我单击按钮时,我想提出默认的Click事件。

为此,我添加了以下代码:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    RaiseEvent Click(sender, e)
End Sub

我在这做错了什么?

这是usercontrol的完整代码:

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事件的行为,则覆盖该方法,否则只接受基类的默认行为。要了解事件是如何正确实现的 - 并且是在继承的基类中实现的 - check this out

此外,虽然在这种情况下技术上并不重要,但您不应该将e参数从内部事件处理程序传递到外部事件。您应该根据活动的要求创建自己的EventArgs对象。

最后,如果你能够使用RaiseEvent,那么传递sender参数也是错误的。 sender总是被认为是引发事件的对象。在您的情况下,这是用户控件,而不是内部Button。幸运的是,调用OnClick将解决这个问题。如果您需要传递有关单击哪个子控件的信息,那么您应该定义自己的事件并通过e参数传递该信息。

以上是关于提升UserControl的默认Click事件的主要内容,如果未能解决你的问题,请参考以下文章

复合控件中 公开子控件事件

WPF UserControl响应窗体的PreviewKeyDown事件

WPF怎么样实现这种附加窗口的效果

自定义控件点击事件

WPF DataGrid:指定默认排序

winform 用户控件事件的写法