如何检测表单的任何控件的变化?

时间:2010-08-26 02:49:07

标签: c# winforms

如何在C#中检测表单控件中的更改?

因为我在一个表单上有很多控件,如果表单中的任何控件值发生变化,我需要禁用一个按钮。我正在寻找一些内置的函数/事件处理程序/属性,并且不想为此创建自定义函数。

3 个答案:

答案 0 :(得分:14)

不,我不知道在表单上的任何控件发生更改时会触发任何事件。

我的建议是单独订阅每个事件(如果你的表单有很多控件,这实际上很难做,那么你可能想重新考虑你的UI)。

如果您绝对必须订阅所有控件的更改,那么您可能需要考虑类似于以下内容:

foreach (Control c in this.Controls)
{
    c.TextChanged += new EventHandler(c_ControlChanged);
}

void c_ControlChanged(object sender, EventArgs e)
{

}

请注意,如果您在运行时动态添加和删除对窗体的控件,这将无法正常工作。

此外,TextChanged事件可能不适合某些控件类型(例如TextBoxes) - 在这种情况下,您需要转换并测试控件类型才能订阅正确的事件,例如:

foreach (Control c in this.Controls)
{
    if (c is CheckBox)
    {
        ((CheckBox)c).CheckedChanged += c_ControlChanged;
    }
    else
    {
        c.TextChanged += new EventHandler(c_ControlChanged);
    }
}

答案 1 :(得分:5)

不是直接访问控件,而是可以数据绑定到实现INotifyPropertyChanged的模型对象。

每当用户做某些事情导致模型中的数据发生变化时,您都会收到通知并采取相应的措施。

它可能还会减少在表单控件中输入和输出值所需的代码量。

答案 2 :(得分:0)

只需选择将具有通用处理程序的组件,然后在事件属性栏中双击您要发生的事件。此通用方法将自动添加到所有控件的处理程序中。