Lectura de la configuración predeterminada de la aplicación en C#
-
09-06-2019 - |
Pregunta
Tengo un número de la configuración de la aplicación (en el ámbito de usuario) para mi costumbre de control de cuadrícula.La mayoría de ellos son de los ajustes de color.Tengo un formulario en donde el usuario puede personalizar estos colores y quiero agregar un botón para volver a la configuración de color predeterminada.¿Cómo puedo leer la configuración predeterminada?
Por ejemplo:
- Tengo un ajuste de usuario con nombre
CellBackgroundColor
enProperties.Settings
. - En tiempo de diseño, establezca el valor de la
CellBackgroundColor
aColor.White
el uso de la IDE. - Conjuntos de usuarios
CellBackgroundColor
aColor.Black
en mi programa. - Puedo guardar la configuración con
Properties.Settings.Default.Save()
. - El usuario hace clic en el
Restore Default Colors
el botón.
Ahora, Properties.Settings.Default.CellBackgroundColor
devuelve Color.Black
.¿Cómo puedo volver a Color.White
?
Solución
@ozgur,
Settings.Default.Properties["property"].DefaultValue // initial value from config file
Ejemplo:
string foo = Settings.Default.Foo; // Foo = "Foo" by default
Settings.Default.Foo = "Boo";
Settings.Default.Save();
string modifiedValue = Settings.Default.Foo; // modifiedValue = "Boo"
string originalValue = Settings.Default.Properties["Foo"].DefaultValue as string; // originalValue = "Foo"
Otros consejos
La lectura de "Windows 2.0 Formas de Programación", me topé con estos 2 métodos útiles que pueden ser de ayuda en este contexto:
ApplicationSettingsBase.Recarga
De MSDN:
Recarga contrasta con Reset en el que el primero se carga el último conjunto de guarda la configuración de la aplicación de los valores, mientras que la última será la carga de la guarda los valores predeterminados.
Por lo que el uso sería:
Properties.Settings.Default.Reset()
Properties.Settings.Default.Reload()
No estoy realmente seguro de que esto es necesario, debe haber una manera más prolija, de lo contrario espero que alguien encuentra este útil;
public static class SettingsPropertyCollectionExtensions
{
public static T GetDefault<T>(this SettingsPropertyCollection me, string property)
{
string val_string = (string)Settings.Default.Properties[property].DefaultValue;
return (T)Convert.ChangeType(val_string, typeof(T));
}
}
de uso;
var setting = Settings.Default.Properties.GetDefault<double>("MySetting");
Properties.Settings.Default.Reset()
restablece todos los ajustes a sus valores originales.
Tengo alrededor de este problema por tener 2 grupos de ajustes.Yo uso el que Visual Studio agrega por defecto para la configuración actual, es decir, Properties.Settings.Default
.Pero también he de añadir otro archivo de configuración de mi proyecto "Proyecto -> Agregar Nuevo Elemento -> General -> Configuración de Archivo" y el almacenamiento de los valores predeterminados de allí, es decir, Properties.DefaultSettings.Default
.
Yo, a continuación, asegúrese de que nunca escribo a la Properties.DefaultSettings.Default
configuración, acabo de leer de ella.Cambiar todo de nuevo a los valores predeterminados es sólo un caso de ajuste de los valores actuales de la espalda a los valores predeterminados.
¿Cómo puedo regresar a Color.Blanco?
Dos maneras que usted puede hacer:
- Guardar una copia de la configuración antes de que el usuario la cambie.
- Caché del usuario modificado la configuración y guardar en Propiedades.Configuración antes de la aplicación se cierra.
He encontrado que llamar ApplicationSettingsBase.Reset
tendría el efecto de restablecer los ajustes a sus valores predeterminados, sino también para ahorrar al mismo tiempo.
El comportamiento que yo quería era restablecer los valores predeterminados, pero no para salvar a ellos (por lo que si el usuario no como el de por defecto, hasta que se salvaron de que podría volver).
Escribí un método de extensión que fue adecuado para mis propósitos:
using System;
using System.Configuration;
namespace YourApplication.Extensions
{
public static class ExtensionsApplicationSettingsBase
{
public static void LoadDefaults(this ApplicationSettingsBase that)
{
foreach (SettingsProperty settingsProperty in that.Properties)
{
that[settingsProperty.Name] =
Convert.ChangeType(settingsProperty.DefaultValue,
settingsProperty.PropertyType);
}
}
}
}