2013-12-22 47 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