5

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

4

4 回答 4

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;
    }
}
于 2013-06-21T03:47:08.060 回答
0

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

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

于 2013-06-21T03:40:28.113 回答
0

像这样的东西应该工作:

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

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

于 2013-06-21T03:41:30.523 回答
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.

于 2013-06-21T03:49:55.633 回答