2009-10-28 5 views
0

Je pensais que la méthode Reset() repeuple les paramètres avec des valeurs par défaut, mais il semble ne pas le faire. Comment puis-je les recharger avec les valeurs par défaut?Pourquoi ApplicationSettingsBase.Reset() vide-t-il les 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); 
    } 
    } 

Mise à jour

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); 
    } 
    } 

Suppression de l'appel à une réinitialisation() et définir les valeurs de propriété manuellement à ceux stockés par défaut. Je suis toujours impatient d'entendre si c'est la façon dont il est censé être utilisé ou est-ce que je manque quelque chose?

Répondre

1

Je suis tombé sur ce fil parce que j'ai rencontré le même problème. Je me suis dit que je rapporterais mes découvertes à tous les futurs voyageurs qui pourraient venir par ici. Je ne peux pas vous promettre que c'est 100% précis ou complet parce que je l'ai joué pendant une heure, ce qui est assez dur pour un jour, même si je sens qu'il y a encore plus à savoir. Mais au moins, ils auront quelques conseils ici. :)

Bien que la documentation de Reset() semble indiquer que les paramètres enregistrés sont remplacés dans le fichier user.config avec les valeurs par défaut du fichier app.config, cela ne semble pas être le cas. Il efface simplement les paramètres du fichier user.config, qui, en utilisant l'exemple ci-dessus, donne FooSettings.Default.PropertyValues ayant un compte de 0 car aucun n'existe après avoir utilisé Reset(). Mais il existe des façons de travailler avec ce résultat qui ne nécessitent pas de repeupler les réglages comme l'OP l'a fait. Une façon est de récupérer explicitement les paramètres individuels des valeurs comme ceci:

// 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; 

D'autres moyens impliquent l'utilisation SettingsPropertyValueCollection et/ou 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; 

Donc, revenir à la question initiale, ce que vous auriez pu faire est ce:

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); 
    } 
} 
Questions connexes