c# - 如何检测窗体任何控件的变化?

标签 c# winforms

如何在 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/

相关文章:

c# - 如何在 ASP.NET MVC Controller 中访问 Request.cookies?

c# - 自定义 DataAnnotationsModelMetadataProvider 不起作用

c# - 如何以不同的形式将文本框数据传递到datagridview

c# - 我如何计算百分比进度,我一直得到负数?

c# - 如何在 C# Windows 窗体中动态填充 Datagridview(运行时)

Windows 窗体项目中的 WPF 窗体

c# - 加载 Zumero 模块依赖项时遇到问题

c# - 如何在迭代器中使用 Html.DisplayFor?

c# - 使 C++ 软件包和 C# 包访问相同枚举/常量整数的最佳方法

c# - 通过部分匹配名称来查找多个控件