代码之家  ›  专栏  ›  技术社区  ›  Barun

C从其容器捕获控件的更改事件

c#
  •  0
  • Barun  · 技术社区  · 16 年前

    在我的项目中,我有一个设置表单。如果发生任何更改,我必须通知用户如果他想离开该页面而不保存更改。此时,我通过捕获每个控件更改事件来执行此操作。我确信有一种更好的方法——比如从容器中捕获变更事件。有可能吗?

    4 回复  |  直到 16 年前
        1
  •  1
  •   Alex Morris    16 年前

    您有正确的解决方案,但是您可能希望非常通用地捕获变更事件。例如,您可以在 InitializeComponent(); 构造函数中的行:

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

    genericTextBox_TextChanged 将窗体设置为宽 hasChanged 标记为“真”或类似的基本内容。您可能需要将其转换为一个递归函数,该函数循环遍历 c 如果它有子控件。

        2
  •  4
  •   Andrew Kennan    16 年前

    与其直接担心控件,不如创建一个从System.ComponentModel(如InotifyPropertyChanged和IDataErrorInfo)实现接口的设置类,并使用数据绑定来获取控件内外的值。

    然后,您的设置类不仅可以记录是否有任何更改,还可以更轻松地验证用户输入。

    一个好的起点是 MSDN .

        3
  •  1
  •   default locale    16 年前

    我给你提供一种解决办法。
    我的提议是创建一个自定义数据集。然后添加与表单控件相对应的表。之后,可以将每个表单控件绑定到此数据集。
    优点:所有控件数据都是绑定的。所以你不需要关心特定控制的改变。您只需控制数据集更改。
    缺点(可能):之后,您应该重写设置预览机制。您必须更改数据,而不是更改控件。IMO,这并不难,但我不知道你的应用程序中有这种方法
    我认为这种方法至少很容易调试。

        4
  •  0
  •   Fredrik Leijon    16 年前

    如果是Web,请查看javascript的卸载事件