2013-12-22 41 views
1

我试图在设置窗体上实现“Reset Settings”按钮。但我不希望它直到用户确定为止。Application.Settings Save()不保存实例的值(在这种情况下)

因此,我在重置它们之前创建设置的副本,并且如果用户单击取消 - 我保存这些(“旧”)设置。麻烦是 - 它不起作用。

下面是代码:

Settings s1 = Settings.Default; 
s1.Setting1 = "A"; 
s1.Save(); 
Settings s2 = Clone();//A method that clones the settings 
s2.Setting1 = "B"; 
s2.Reset(); 
s1.Save();//Why doesn't this line work? 
s1.Reload();//Without this line - the next line shows "A" . With this line, the next shows - "ABC" (-the origianl). Why? 
Text = s1.Setting1; 

(超:我应该由用户来改变每次改变都设置在设置的副本,以及确认后提交的,或者我应该忽略直到用户单击确定 - 然后遍历所有控件并将每个控件的值分配给正确的属性...或者可能是其他方式?)

+0

嗯,我会选择后者。一旦他/她确认操作,使用户更改设置生效,因此单击“取消”将只重新加载当前设置,从而避免不必要的保存和重新加载操作。 –

回答

1

如果这是WinForms或WPF,请使用应用程序设置绑定机制随VS一起发货。这样你就不必明确地打开/保存你的设置。相反,您可以将前端控件直接绑定到特定设置,并且会自动为您读取/写入设置。如果用户在对话框中按下“取消”,则只需拨打Settings.Reload()即可回滚。

假设您有一个名为UserName(字符串)的设置要保存,以便用户不必每次都输入它。只需点击设计器中的TextBox并转到“属性”窗口。在顶部你会看到(ApplicationSettings)属性。展开它,你应该看到文本属性。点击它,然后从下拉菜单中选择新建(如果您已经定义了它,请从列表中选择您的属性)。输入属性名称和默认值,然后单击确定。它将为您创建一个属性并将TextBox与此属性绑定。你完成了!

+0

我之前的评论并不清楚。我需要的是能够通过选项回滚到用户的当前设置来“重置”为默认选项。我想我可以通过创建两个设置实例来实现这一点。但不知何故 - 虽然2是分开的(在我的例子中 - 他们有'Setting1'单独的值) - 保存()其中一个不工作后,另一个已被重置(虽然一个被保存_does_保留其单独的值)。 – ispiro