捕获用户控件事件

时间:2009-05-28 06:14:09

标签: .net winforms user-controls

我已经创建了一个用户控制键盘...当你点击键盘上的一个按钮时,会抛出button_click事件,当点击按钮C时,字符串会得到一个参数示例

CButton_Click
{
txt="C";
}

我需要在用户控件之外捕获该事件...因此,当单击按钮时,文本框中会填充字符串...给用户在用户点击按钮时填充的印象。

这适用于触摸屏应用程序。

1 个答案:

答案 0 :(得分:3)

您必须在UserControl中声明自己的事件,并在必要时触发事件。使用您的示例:

public event EventHandler ButtonClicked;

protected override OnButtonClicked(EventArgs e)
{
    var hand = ButtonClicked;
    if (hand != null)
        hand(this, e);
}

private void CButton_Click(Object sender, EventArgs e)
{
    txt = "C";
    OnButtonClicked(new EventArgs());
}

然后,您可以从其他代码订阅UserControl的ButtonClicked事件。

然而,更好的方法是创建自己的EventArgs并在事件本身中传递字符串,而不是仅仅将最后一个按键存储在字段中。如下所示:

public KeyboardEventArgs : EventArgs
{
    public KeyboardEventArgs()
        :base()
    {
    }

    public KeyboardEventArgs(char Key)
        :this()
    {
        this.Key = Key;
    }

    char Key {get; set;}
}

public event EventHandler<KeyboardEventArgs> ButtonClicked;

protected override OnButtonClicked(KeyboardEventArgs e)
{
    var hand = ButtonClicked;
    if (hand != null)
        hand(this, e);
}

private void CButton_Click(Object sender, EventArgs e)
{
    OnButtonClicked(new KeyboardEventArgs("C"));
}