2011-05-03 10 views
16

Tengo el siguiente código:C# Cómo recorrer Properties.Settings.Default.Properties que cambian los valores

foreach (SettingsProperty currentProperty in Properties.Settings.Default.Properties) 
{ 
    if (Double.TryParse(GenerateValue()), out result)) 
    { 
     currentProperty.DefaultValue = result.ToString(); 

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

Se pone el nuevo valor a partir de una base de datos MySQL. Si agrego un MessageBox.Show para mostrar el nuevo valor, parece que funciona bien, pero en realidad no lo guarda. Supongo que es porque estoy asignando el valor a una variable ... ¿hay alguna forma de hacer esto?

Properties.Settings.Default.IndexOf(currentProperty.name).DefaultValue = result 

Respuesta

21

Esto podría funcionar:

foreach (SettingsProperty currentProperty in Properties.Settings.Default.Properties) 
{ 
    Properties.Settings.Default[currentProperty.Name] = result.ToString(); 
    Properties.Settings.Default.Save(); 
} 

Tenga en cuenta que las propiedades deben tener un alcance 'Usuario' con el fin de ser salvados.

+0

Sabía que tenía que haber una forma de hacerlo. Muchas gracias por tu ayuda. Ya tenía todo configurado para Usuario también. – Brandon

+0

[Alex Azabut] ¿cómo puedo encontrar el alcance de la configuración? – gg89

+0

Sospecho que puedo usar! Setting.ReadOnly como ámbito de usuario, ¿verdad? – gg89

2

Estoy de acuerdo con su conclusión. Lo que tiene que hacer es obtener la propiedad por el valor de la cadena.

Properties.Settings.Default[string value] = 

    foreach (SettingsProperty currentProperty in Properties.Settings.Default.Properties) 
    {  
    if (Double.TryParse(GenerateValue()), out result)) 
     {   

Properties.Settings.Default[ currentProperty.Name ] = result.ToString(); 
      Properties.Settings.Default.Save(); 
     } 
    } 

Lo anterior es lo que realmente desea.

+0

Gracias también. – Brandon

+0

Mi respuesta se compilaría realmente. * Pista ** Pista ** Sugerencia * –

Cuestiones relacionadas