Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有一种简单的方法可以将事件添加到C中的所有表单对象中#_C#_.net_Forms - Fatal编程技术网

C# 有没有一种简单的方法可以将事件添加到C中的所有表单对象中#

C# 有没有一种简单的方法可以将事件添加到C中的所有表单对象中#,c#,.net,forms,C#,.net,Forms,我有一个有很多标签和文本框的表单。如果修改了任何字段,我希望标题以红色突出显示。有没有一种简单的方法可以做到这一点,或者您是否需要将事件回调单独添加到每个表单对象?谢谢 当您查看与每个控件关联的事件时,您注意到可以“下拉”表单中编码的所有事件的列表。例如,如果双击“文本更改”事件,它将是controlname\u textchanged(…)。但是,如果您有一个通用的处理程序,那么您可以将其称为textchangedevent(…)。通用事件处理程序需要在参数中包含与该事件关联的发送方和事件对象

我有一个有很多标签和文本框的表单。如果修改了任何字段,我希望标题以红色突出显示。有没有一种简单的方法可以做到这一点,或者您是否需要将事件回调单独添加到每个表单对象?谢谢

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


如果您在用户控件中执行此操作,并且必须更新主窗体,那么您将通过
公共事件对象youreventname
将其冒泡出来,并将该事件绑定到主窗体上。

类似的操作应该可以:

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

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

在我的脑海中,您可以在表单加载事件中执行类似的操作来添加事件

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;
    }
}

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

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
中,请小心