如何创建一个组件,为窗体中的每个控件添加一个事件处理程序?

时间:2015-03-18 12:51:46

标签: c# vb.net winforms

我刚刚创建了一个使用ToolTip控件的Windows窗体,我意识到该组件为窗体上的每个其他控件提供了设计时属性。

我知道对于属性,您可以简单地实现IExtender接口,但这可以扩展到事件吗?如果是这样怎么办?

1 个答案:

答案 0 :(得分:0)

我使用递归函数将事件hanlder添加到所有控件,即使它们嵌套在像网格或面板之类的容器中

Normaly我将这个功能用于很多事情 即使我想在焦点/离开时添加自定义backgroundcolor。

private void addEventhandler(Control Parent) {

    if (Parent.Controls.Count > 0) {
        //===>If the curren control is a container!
        foreach(Control iChild in Parent.Controls) {
            addEventhandler(iChild);//Call it self
        }
    } else {//Individual control
        //===>TODO: Add here all your events handler to Parent variable.

        Parent.Click += new EvenHandler(delegate(object sender,object e){
                                            MessageBox.Show("Hello");
                                            });

        //==>If you whant to filter by control type you can do this
        if(Parent is TextBox){
            ((TextBox)Parent).Text = "Hi! XD";
        }
    }
}

像这样实现此代码

addEventhandler(this);//If you want to add the events handler to all controls in your form

addEventhandler(myGridControl);//To specific grid