2009-10-28 64 views
0

我以爲Reset()方法再次使用默認值重新設置設置,但它似乎不是。我如何使用默認值重新加載它們?爲什麼ApplicationSettingsBase.Reset()會清空PropertyValues?

private void buttonLoadDefaultSettings_Click(object sender, EventArgs e) 
    { 
    FooSettings.Default.Reset(); 

    // Data grid will show an empty grid after call to reset. 
    DataGridFoo.Rows.Clear(); 
    foreach (SettingsPropertyValue spv in FooSettings.Default.PropertyValues) 
    { 
    DataGridFoo.Rows.Add(spv.Name, spv.PropertyValue); 
    } 
    } 

更新

private void buttonLoadDefaultSettings_Click(object sender, EventArgs e) 
    { 
    foreach (SettingsProperty sp in FooSettings.Default.Properties) 
    { 
    FooSettings.Default[sp.Name.ToString()] = sp.DefaultValue; 
    } 

    DataGridFoo.Rows.Clear(); 
    foreach (SettingsPropertyValue spv in FooSettings.Default.PropertyValues) 
    { 
    DataGridFoo.Rows.Add(spv.Name, spv.PropertyValue); 
    } 
    } 

刪除調用復位()和手動設置的屬性值的默認存儲的。我仍然渴望聽到它是否應該被使用,或者我錯過了什麼?

回答

1

我碰到這個線程,因爲我遇到了同樣的問題。我想我會報告任何未來可能以這種方式出現的旅客的調查結果。我不能保證這是100%準確或完整的,因爲我一直在擺弄它一個小時,這足夠擺弄一天,儘管我覺得還有更多需要知道的東西。但至少他們會在這裏提供一些提示。 :)

儘管Reset()的文檔似乎表明保存的設置在user.config文件中被app.config文件中的默認值覆蓋,但似乎不是這種情況。它只是從user.config文件中刪除設置,使用上面的示例,結果爲FooSettings.Default.PropertyValues的計數爲0,因爲在使用Reset()後沒有任何設置。但是有一些方法可以處理這個結果,而不需要像OP那樣重新設置設置。一種方式是顯式地檢索各個設置值是這樣的:

// This always returns the value for TestSetting, first checking if an 
// appropriate value exists in a user.config file, and if not, it uses 
// the default value in the app.config file. 
FormsApp.Properties.Settings.Default.TestSetting; 

其他方式涉及使用SettingsPropertyValueCollection和/或SettingsPropertyCollection

// Each SettingsProperty in props has a corresponding DefaultValue property 
// which returns (surprise!) the default value from the app.config file. 
SettingsPropertyCollection props = FormsApp.Properties.Settings.Default.Properties; 

// Each SettingsPropertyValue in propVals has a corresponding PropertyValue 
// property which returns the value in the user.config file, if one exists. 
SettingsPropertyValueCollection propVals = FormsApp.Properties.Settings.Default.PropertyValues; 

所以,回到原來的問題,你可以做的是這個:

private void buttonLoadDefaultSettings_Click(object sender, EventArgs e) 
{ 
    FooSettings.Default.Reset(); 
    DataGridFoo.Rows.Clear(); 

    // Use the default values since we know that the user settings 
    // were just reset. 
    foreach (SettingsProperty sp in FooSettings.Default.Properties) 
    { 
     DataGridFoo.Rows.Add(sp.Name, sp.DefaultValue); 
    } 
} 
相關問題