是否有一种简单的方法可以在C#中向所有表单对象添加事件

时间:2013-06-21 03:30:34

标签: c# .net forms

我有一个包含许多标签和文本框的表单。如果修改了任何字段,我想将标题突出显示为红色。有没有一种简单的方法可以执行此操作,还是需要将事件回调单独添加到每个表单对象?谢谢!

4 个答案:

答案 0 :(得分:1)

在我的头顶,您可以在表单加载事件中执行类似的操作以添加事件...

foreach (var control in this.Controls)
{
    if (control is Label)
    {
        ((Label)control).TextChanged += Controls_TextChanged;
    }
    else if (control is TextBox)
    {
        ((TextBox)control).TextChanged += Controls_TextChanged;
    }
}

答案 1 :(得分:0)

当您查看与每个控件关联的事件时,您会注意到您可以“下拉”表单中编码的所有事件的列表。例如,如果您双击“文本已更改”事件,它将为controlname_textchanged(...)。但是,如果您拥有所有的通用处理程序,那么您可以将其称为textchangedevent(...)。通用事件处理程序需要在参数中将该事件与发送者和事件对象相关联。

如果您在用户控件中执行此操作并且必须更新主窗体,那么您将通过public event eventobject youreventname将其冒泡,并将该事件绑定在主窗体上。

答案 2 :(得分:0)

这样的事情应该有效:

foreach (System.Windows.Forms.Control cont in this.Controls)
            cont.Validating += new System.Windows.Forms.ValidationEventHandler(this.Control_Validating_Method)

然后,您可以在事件代码中测试控件类型,并将该值与原始值进行比较。

答案 3 :(得分:0)

是的,您可以轻松地将控件添加到同一事件中。此示例将“标签”和“文本框”放在同一事件中。

private void Form1_Load(object sender, EventArgs e)
    {
 foreach (Control x in this.Controls)
            {
                if(x is Label)
                    ((Label)x).MouseHover+=new EventHandler(AllLabels_HoverEvent);
                    else if(x is TextBox)
                    ((TextBox)x).MouseHover+=new EventHandler(AllTextboxes_HoverEvent);
            }
}

void AllLabels_HoverEvent(object sender, EventArgs e)
        {
              Label label = (Label)sender;
           // label.dowhateveryouwant...
        }
        void AllTextboxes_HoverEvent(object sender, EventArgs e)
        {
            Textbox textbox = (Textbox)sender;
           // textbox.dowhateveryouwant...
        }

如果您需要更多说明,请在下面发表评论,我会添加我的答案或修改它以满足您的任何特殊需求。但要小心,如果你有嵌套在其他容器中的控件,它们将不在this.Controls