如何在 C# 中检测窗体的任何控件的变化?
因为我在一个表单上有很多控件,如果表单中的任何控件值发生变化,我需要禁用一个按钮。我正在寻找一些内置函数/事件处理程序/属性,并且不想为此创建自定义函数。
最佳答案
不,我不知道每当表单上的任何控件更改时都会触发任何事件。
我的建议是单独订阅每个事件(如果您的表单有太多控件以至于这实际上很难做到,那么您可能需要重新考虑您的 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);
}
}
关于c# - 如何检测窗体任何控件的变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3571722/