【问题标题】:catch a user control event捕捉用户控制事件
【发布时间】:2009-05-28 06:14:09
【问题描述】:

我已经创建了一个用户控制键盘...当您单击键盘上的按钮时,将引发 button_click 事件,并且在单击按钮 C 时获取一个字符串示例

CButton_Click
{
txt="C";
}

我需要在用户控件之外捕获该事件...以便在单击按钮时文本框充满字符串...给人的印象是当用户单击按钮时 texbox 正在填充... .

这是一个触摸屏应用程序。

【问题讨论】:

    标签: .net winforms user-controls


    【解决方案1】:

    您必须在 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"));
    }
    

    【讨论】:

    • 谢谢,我照你说的做了.. 并直接将字符串连接起来.. 节省了一些内存.. 现在它可以工作了
    猜你喜欢
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多