2014-07-04 19 views
0

我有一個代碼段用於保存用戶關閉表單時將運行的複選框的狀態。一切運行良好,但沒有生成保存文件(user.config文件不會生成)。這是我第一次使用保存設置,所以我不確定是否我做錯了或錯過了一些東西。保存用戶設置[winforms] 2.0不起作用

private void Form2_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     int i = 0; 
     foreach (Control ctr in panel1.Controls) 
     { 
      if (ctr is CheckBox) 
      { 
       var cb = (CheckBox)ctr; 

       SettingsProperty property = new SettingsProperty("ChkState" + i); 
       property.PropertyType = typeof(System.Windows.Forms.CheckState); 
       SettingsPropertyValue propertyValue = new SettingsPropertyValue(property); 
       propertyValue.PropertyValue = cb.CheckState; 
       Properties.Settings.Default.PropertyValues.Add(propertyValue); 
       i++; 
      } 
     } 

     Properties.Settings.Default.Save(); 
    } 
+0

你看過http://msdn.microsoft.com/en-us/library/aa730869%28v=vs.80%29.aspx? –

+0

簡要說明........ – Ejun

+0

這是通過設計,存儲在.config文件中的屬性在app.exe.config文件中聲明。你當然不在那裏。將設置添加到可以存儲這些值的項目。像ArrayList這樣的集合類型。 –

回答

1

如上所述,您不要在運行時創建設置並保存它們。設置必須已經存在,您只需保存它們的值。在項目屬性的Settings頁面中添加一個適當類型的設置,然後在啓動時獲取該設置的值並在關機時保存。

是否有一個特定的原因,您使用CheckState而不是Checked?您的CheckBox控件是否處於Indeterminate狀態?如果沒有,那麼你根本不應該使用CheckState。您使用Checked來確定是否選中複選框。

如果您可以使用Checked,那麼您可以使用一個int來存儲多達32個CheckBox控件的狀態。每個32位可以是1來表示true,即被檢查,或者0來表示false,即未被檢查。

當然,您也可以使用bool類型的個別設置,並將它們綁定到您的Checked屬性。這樣,就不需要在設置和控件之間來回移動數據。您只需在關機時撥打Save,其他任何事情都會自動發生。

+0

謝謝,我想我明白了 – Ejun