我的程序旨在更改和保存用户设置。该程序由许多用户控件组成。当应用程序产生至少一个未保存的更改时,我需要在关闭应用程序之前向用户显示消息以保存设置。控件太多,为每个控件定义一个事件将是低效的。我不确定这是否只是解决我问题的一种方法。有什么建议吗。。
实际上没有任何选项可以满足您的要求。如果控件绑定到对象,则可以使用该对象查看它是否有任何更改,假设该对象实现INotifyPropertyChanged。
另一种方法是通过程序向映射到设置标志的单个子控件的每个控件添加一个处理程序(用于"更改"事件,如TextBox的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);
}
}
}