如何在不声明每个对象的情况下保存所有表单设置?

我有一个包含几个文本框,单选按钮,复选框等的表单。现在我分别通过声明每个文件并保存到程序设置来保存它们的值:

Properties.Settings.Default.EmailFrom = txtbxEmailFrom.Text; 

我想找到一种循环遍历所有对象并尽可能保存其设置的方法,因此我不必单独声明每个对象。

有没有办法做到这一点? 或者更好的方法来保存我的文本框的文本,复选框和单选按钮的检查状态等?

您可以使用属性绑定到应用程序设置。

这样您就可以通过调用Properties.Settings.Default.Save();来简单地保存设置Properties.Settings.Default.Save(); 并且您不需要循环控件,因为属性绑定到设置,并且它们的值会在更改时自动进入设置。

您可以使用设计器或使用代码将属性绑定到设置。

使用Designer

在设计时选择您的控件,然后在属性网格中,在(ApplicationSettings)单击... for (PropertyBinding)然后从对话框中将所需的属性绑定到设置。

使用代码

您可以使用与使用代码进行数据绑定时相同的方式将属性绑定到设置:

 this.textBox1.DataBindings.Add( new System.Windows.Forms.Binding("Text", Properties.Settings.Default, "Test", true, DataSourceUpdateMode.OnPropertyChanged)); 

保存设置

要保存设置,只需在设置对象上调用Save() ,就像Closing事件的forms一样:

 Properties.Settings.Default.Save(); 

这样做的一种方法是循环遍历所有控件,并在每次迭代中检查当前控件的类型并相应地保存。 但是我不太清楚你可以对RadioButtons / CheckBoxes做些什么。

 foreach (var c in this.Controls) { var _type = c.GetType(); if (_type == typeof(TextBox)) { // Cast it to a textbox and save it's text property } elseif (_type == typeof(ListBox) { // Cast it to a listbox and save it's items property } // So on... }