C# 如何从一组控件跟踪任何控件中的编辑

C# 如何从一组控件跟踪任何控件中的编辑,c#,user-controls,event-handling,C#,User Controls,Event Handling,我的程序旨在更改和保存用户设置。该程序由许多用户控件组成。我需要向用户显示一条消息,以便在关闭应用程序之前保存设置,因为它至少生成了一个未保存的更改。 有太多的控件,为每个控件定义一个事件将是低效的。我不确定这是否只是解决问题的一种方法。请给我任何建议。实际上没有任何选项可以满足您的要求。如果控件绑定到对象,则可以使用该对象查看是否有任何更改,前提是该对象实现了INotifyPropertyChanged 另一种方法是通过编程向映射到设置标志的单个子控件的每个控件添加一个处理程序(用于“更改”事

我的程序旨在更改和保存用户设置。该程序由许多用户控件组成。我需要向用户显示一条消息,以便在关闭应用程序之前保存设置,因为它至少生成了一个未保存的更改。
有太多的控件,为每个控件定义一个事件将是低效的。我不确定这是否只是解决问题的一种方法。请给我任何建议。

实际上没有任何选项可以满足您的要求。如果控件绑定到对象,则可以使用该对象查看是否有任何更改,前提是该对象实现了INotifyPropertyChanged


另一种方法是通过编程向映射到设置标志的单个子控件的每个控件添加一个处理程序(用于“更改”事件,如文本框的
TextChanged
)。

可能对某些人有用:

public partial class Form1 : Form
{
    public bool EditedFlag=false;

    private void Changed(object sender, EventArgs e)
    {
        EditedFlag=true;
    }

    public Form1()
    {
        InitializeComponent();            
        foreach (Control ctrl in this.Controls)
        {
            ControlEvents(ctrl);
        }
    }

    public void ControlEvents<T>(T sender)
    {            
        if (sender is TextBox) 
        {
            var obj = sender as TextBox;
            obj.TextChanged+= new EventHandler(Changed);
        }
        if (sender is CheckBox)
        {
            var obj = sender as CheckBox;
            obj.CheckedChanged += new EventHandler(Changed);
        }
        if (sender is ComboBox)
        {
            var obj = sender as ComboBox;
            obj.SelectedIndexChanged += new EventHandler(Changed);
        }

    }
}
公共部分类表单1:表单
{
public bool EditedFlag=false;
私有无效已更改(对象发送方、事件参数e)
{
EditedFlag=true;
}
公共表格1()
{
初始化组件();
foreach(此.Controls中的控件ctrl)
{
控制事件(ctrl);
}
}
公共无效控制事件(T发送方)
{            
如果(发件人是文本框)
{
var obj=发送方作为文本框;
objectj.TextChanged+=新事件处理程序(已更改);
}
如果(发件人为复选框)
{
var obj=发送方为复选框;
obj.CheckedChanged+=新事件处理程序(已更改);
}
如果(发件人是组合框)
{
var obj=发送方作为组合框;
obj.SelectedIndexChanged+=新事件处理程序(已更改);
}
}
}

是的,我刚想出来。我将使用第二种方法。谢谢