如何在C#中检测表单控件中的更改?
因为我在一个表单上有很多控件,如果表单中的任何控件值发生变化,我需要禁用一个按钮.我正在寻找一些内置的函数/事件处理程序/属性,并且不想为此创建自定义函数.
Jus*_*tin 14
不,我不知道任何对表单的任何控制发生变化时都会触发的事件.
我的建议是单独订阅每个事件(如果你的表单有很多控件,这实际上很难做,那么你可能想重新考虑你的UI).
如果您绝对必须订阅所有控件的更改,那么您可能需要考虑类似于以下内容:
foreach (Control c in this.Controls)
{
c.TextChanged += new EventHandler(c_ControlChanged);
}
void c_ControlChanged(object sender, EventArgs e)
{
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果您在运行时动态添加和删除窗体的控件,这将无法正常工作.
此外,TextChanged
对于某些控件类型(例如TextBoxes),事件可能不是合适的事件 - 在这种情况下,您需要转换和测试控件类型,以便能够订阅正确的事件,例如:
foreach (Control c in this.Controls)
{
if (c is CheckBox)
{
((CheckBox)c).CheckedChanged += c_ControlChanged;
}
else
{
c.TextChanged += new EventHandler(c_ControlChanged);
}
}
Run Code Online (Sandbox Code Playgroud)
您可以直接将数据绑定到实现INotifyPropertyChanged的模型对象,而不是直接访问控件.
每当用户执行某些操作导致模型中的数据发生更改时,您将收到通知,并可采取相应的操作.
它可能还会减少在表单控件中输入和输出值所需的代码量.
归档时间: |
|
查看次数: |
21056 次 |
最近记录: |