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 usuario configuración denominada CellBackgroundColor en Properties.Settings.
  2. En tiempo de diseño, establezca el valor de la CellBackgroundColor a Color.White utilizando el IDE.
  3. Conjuntos de usuarios CellBackgroundColor a Color.Black en mi programa.
  4. Puedo guardar la configuración con Properties.Settings.Default.Save().
  5. Usuario hace clic en el Restore Default Colors botón.

Ahora, Properties.Settings.Default.CellBackgroundColor devuelve Color.Black. ¿Cómo puedo volver a Color.White?

7 Comentarios

  1. 37

    @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"
    • Esto sólo funciona para los escalares. Tengo una propiedad que es de tipo de Sistema.Las colecciones.Especializados.StringCollection. Utilizando la anterior devuelve el XML sin procesar, la necesidad de escoger a través de ella y crear la colección manualmente.
    • Hola @BobDenny, podrías explicar cómo lo haces?
  2. 12

    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:

    De recarga que contrasta con la de Restablecer en 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()
    • Me parece «Reload contrasta con Reset en que el primero se carga el último conjunto de guardado en la configuración de la aplicación de los valores, mientras que la última será la carga de la guarda valores predeterminados.» no es siempre cierto. E. g. Después .Guardar, a continuación,.Reset, .Volver a cargar no carga el conjunto de salvos por .Guardar – no tiene ningún efecto.
    • Lo que si desea restablecer sólo una configuración y no todos de ellos?
    • parece aku respuesta anterior permite que (stackoverflow.com/a/49289/67824).
  3. 5

    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");
    • +1 he utilizado tu respuesta como una referencia a la hora de escribir mi propia.
  4. 2

    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 «- > Agregar Nuevo Elemento -> General> Archivo de Settings» 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.

    • Yo también prefiero este enfoque, ya que llamar a {Configuración.Por defecto.Propiedades[«Foo»] como string} puede resultar en una excepción si la configuración se cambia el nombre. También, la fundición puede fallar. Creo que entre la duplicación de datos (valor predeterminado de usuario y de la aplicación por defecto) y el tipo de seguridad, la duplicación es el menor de los males aquí
    • Por CIERTO, asegurándose de que usted nunca escribir a la configuración predeterminada es fácil de hacer todos los ajustes ámbito de la aplicación, en lugar de usuario en el ámbito de
  5. 1

    ¿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.
  6. 1

    He encontrado que llamar a 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);
                }
            }
        }
    }

Dejar respuesta

Please enter your comment!
Please enter your name here