如何在C#中检测表单控件中的更改?
因为我在一个表单上有很多控件,如果表单中的任何控件值发生变化,我需要禁用一个按钮。我正在寻找一些内置的函数/事件处理程序/属性,并且不想为此创建自定义函数。
答案 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)
只需选择将具有通用处理程序的组件,然后在事件属性栏中双击您要发生的事件。此通用方法将自动添加到所有控件的处理程序中。