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:

  1. Tengo un ajuste de usuario con nombre CellBackgroundColor en Properties.Settings.
  2. En tiempo de diseño, establezca el valor de la CellBackgroundColor a Color.White el uso de la IDE.
  3. Conjuntos de usuarios CellBackgroundColor a Color.Black en mi programa.
  4. Puedo guardar la configuración con Properties.Settings.Default.Save().
  5. 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?

¿Fue útil?

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

ApplicationSettingsBase.Reset

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);
            }
        }
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top