Comparteix a través de


ApplicationSettingsBase Clase

Definición

Actúa como clase base para derivar clases contenedoras concretas con el fin de implementar la característica de configuración de la aplicación en las aplicaciones de formularios Windows Forms.

public ref class ApplicationSettingsBase abstract : System::Configuration::SettingsBase, System::ComponentModel::INotifyPropertyChanged
public abstract class ApplicationSettingsBase : System.Configuration.SettingsBase, System.ComponentModel.INotifyPropertyChanged
type ApplicationSettingsBase = class
    inherit SettingsBase
    interface INotifyPropertyChanged
Public MustInherit Class ApplicationSettingsBase
Inherits SettingsBase
Implements INotifyPropertyChanged
Herencia
ApplicationSettingsBase
Implementaciones

Ejemplos

En el ejemplo de código siguiente se muestra el uso de la configuración de la aplicación para conservar los siguientes atributos del formulario principal: ubicación, tamaño, color de fondo y texto de la barra de título. Todos estos atributos se conservan como propiedades de configuración de aplicación únicas en la FormSettings clase , denominada FormLocation, FormSizeFormBackColor y FormText, respectivamente. FormText Todos excepto y Size están enlazados a sus propiedades de formulario asociadas y tienen un valor de configuración predeterminado aplicado mediante DefaultSettingValueAttribute.

El formulario contiene cuatro controles secundarios que tienen los siguientes nombres y funciones:

  • Un botón denominado btnBackColor usado para mostrar el cuadro de diálogo Común de color .

  • Un botón denominado btnReload usado para Reload la configuración de la aplicación.

  • Un botón denominado btnReset usado para Reset la configuración de la aplicación.

  • Cuadro de texto denominado tbStatus usado para mostrar información de estado sobre el programa.

Observe que después de cada ejecución de la aplicación, se anexa un carácter de punto adicional al texto del título del formulario.

Este ejemplo de código requiere un formulario con una ColorDialog clase denominada colorDialog1y un StatusStrip control con un ToolStripStatusLabel denominado tbStatus. Además, requiere tres Button objetos denominados btnReload, btnResety btnBackColor.


#using <System.dll>
#using <System.Drawing.dll>
#using <System.Windows.Forms.dll>

using namespace System;
using namespace System::ComponentModel;
using namespace System::Drawing;
using namespace System::Configuration;
using namespace System::Windows::Forms;

namespace AppSettingsSample
{
    //Application settings wrapper class
    ref class FormSettings sealed: public ApplicationSettingsBase
    {
    public:
        [UserScopedSettingAttribute()]
        property String^ FormText
        {
            String^ get()
            {
                return (String^)this["FormText"];
            }
            void set( String^ value )
            {
                this["FormText"] = value;
            }
        }

    public:
        [UserScopedSettingAttribute()]
        [DefaultSettingValueAttribute("0, 0")]
        property Point FormLocation
        {
            Point get()
            {
                return (Point)(this["FormLocation"]);
            }
            void set( Point value )
            {
                this["FormLocation"] = value;
            }
        }

    public:
        [UserScopedSettingAttribute()]
        [DefaultSettingValueAttribute("225, 200")]
        property Size FormSize
        {
            Size get()
            {
                return (Size)this["FormSize"];
            }
            void set( Size value )
            {
                this["FormSize"] = value;
            }
        }

    public:
        [UserScopedSettingAttribute()]
        [DefaultSettingValueAttribute("LightGray")]
        property Color FormBackColor
        {
            Color get()
            {
                return (Color)this["FormBackColor"];
            }
            void set(Color value)
            {
                this["FormBackColor"] = value;
            }
        }

    };

    ref class AppSettingsForm : Form
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
    private:
        System::ComponentModel::IContainer^ components;

        /// <summary>
        /// Clean up any resources being used. The Dispose(true) 
        /// pattern for embedded objects is implemented with this
        /// code that just contains a destructor 
        /// </summary>
    public:
        ~AppSettingsForm()
        {
            if (components != nullptr)
            {
                delete components;
            }
        }

#pragma region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
    private:
        void InitializeComponent()
        {
            this->components = nullptr;
            this->colorDialog = gcnew System::Windows::Forms::ColorDialog();
            this->backColorButton = gcnew System::Windows::Forms::Button();
            this->resetButton = gcnew System::Windows::Forms::Button();
            this->statusDisplay = gcnew System::Windows::Forms::TextBox();
            this->reloadButton = gcnew System::Windows::Forms::Button();
            this->SuspendLayout();
            //
            // backColorButton
            //
            this->backColorButton->Location = System::Drawing::Point(26, 24);
            this->backColorButton->Name = "backColorButton";
            this->backColorButton->Size = System::Drawing::Size(159, 23);
            this->backColorButton->TabIndex = 0;
            this->backColorButton->Text = "Change Background Color";
            this->backColorButton->Click += gcnew System::EventHandler
                (this,&AppSettingsForm::BackColorButton_Click);
            //
            // resetButton
            //
            this->resetButton->Location = System::Drawing::Point(26, 90);
            this->resetButton->Name = "resetButton";
            this->resetButton->Size = System::Drawing::Size(159, 23);
            this->resetButton->TabIndex = 1;
            this->resetButton->Text = "Reset to Defaults";
            this->resetButton->Click += gcnew System::EventHandler
                (this,&AppSettingsForm::ResetButton_Click);
            //
            // statusDisplay
            //
            this->statusDisplay->Location = System::Drawing::Point(26, 123);
            this->statusDisplay->Name = "statusDisplay";
            this->statusDisplay->Size = System::Drawing::Size(159, 20);
            this->statusDisplay->TabIndex = 2;
            //
            // reloadButton
            //
            this->reloadButton->Location = System::Drawing::Point(26, 57);
            this->reloadButton->Name = "reloadButton";
            this->reloadButton->Size = System::Drawing::Size(159, 23);
            this->reloadButton->TabIndex = 3;
            this->reloadButton->Text = "Reload from Storage";
            this->reloadButton->Click += gcnew System::EventHandler
                (this,&AppSettingsForm::ReloadButton_Click);
            //
            // AppSettingsForm
            //
            this->ClientSize = System::Drawing::Size(217, 166);
            this->Controls->Add(this->reloadButton);
            this->Controls->Add(this->statusDisplay);
            this->Controls->Add(this->resetButton);
            this->Controls->Add(this->backColorButton);
            this->Name = "AppSettingsForm";
            this->Text = "App Settings";
            this->FormClosing += gcnew
                System::Windows::Forms::FormClosingEventHandler
                (this,&AppSettingsForm::AppSettingsForm_FormClosing);
            this->Load += gcnew System::EventHandler(this,
                &AppSettingsForm::AppSettingsForm_Load);
            this->ResumeLayout(false);
            this->PerformLayout();

        }

#pragma endregion

    private:
        System::Windows::Forms::ColorDialog^ colorDialog;

        System::Windows::Forms::Button^ backColorButton;

        System::Windows::Forms::Button^ resetButton;

        System::Windows::Forms::TextBox^ statusDisplay;

        System::Windows::Forms::Button^ reloadButton;



        FormSettings ^ formSettings;

    public:
        AppSettingsForm()
        {
            formSettings = gcnew FormSettings;
            InitializeComponent();
        }

    private:
        void AppSettingsForm_Load(Object^ sender, EventArgs^ e)
        {
            //Associate settings property event handlers.
            formSettings->SettingChanging += gcnew SettingChangingEventHandler(
                this, &AppSettingsForm::FormSettings_SettingChanging);
            formSettings->SettingsSaving += gcnew SettingsSavingEventHandler(
                this,&AppSettingsForm::FormSettings_SettingsSaving);

            //Data bind settings properties with straightforward associations.
            Binding^ backColorBinding = gcnew Binding("BackColor", 
                formSettings, "FormBackColor", true, 
                DataSourceUpdateMode::OnPropertyChanged);
            this->DataBindings->Add(backColorBinding);
            Binding^ sizeBinding = gcnew Binding("Size", formSettings,
                "FormSize", true, DataSourceUpdateMode::OnPropertyChanged);
            this->DataBindings->Add(sizeBinding);
            Binding^ locationBinding = gcnew Binding("Location", formSettings,
                "FormLocation", true, DataSourceUpdateMode::OnPropertyChanged);
            this->DataBindings->Add(locationBinding);

            //For more complex associations, manually assign associations.
            String^ savedText = formSettings->FormText;
            //Since there is no default value for FormText.
            if (savedText != nullptr)
            {
                this->Text = savedText;
            }
        }

    private:
        void AppSettingsForm_FormClosing(Object^ sender,
            FormClosingEventArgs^ e)
        {
            //Synchronize manual associations first.
            formSettings->FormText = this->Text + '.';
            formSettings->Save();
        }

    private:
        void BackColorButton_Click(Object^ sender, EventArgs^ e)
        {
            if (::DialogResult::OK == colorDialog->ShowDialog())
            {
                Color color = colorDialog->Color;
                this->BackColor = color;
            }
        }

    private:
        void ResetButton_Click(Object^ sender, EventArgs^ e)
        {
            formSettings->Reset();
            this->BackColor = SystemColors::Control;
        }

    private:
        void ReloadButton_Click(Object^ sender, EventArgs^ e)
        {
            formSettings->Reload();
        }

    private:
        void FormSettings_SettingChanging(Object^ sender,
            SettingChangingEventArgs^ e)
        {
            statusDisplay->Text = e->SettingName + ": " + e->NewValue;
        }

    private:
        void FormSettings_SettingsSaving(Object^ sender,
            CancelEventArgs^ e)
        {
            //Should check for settings changes first.
            ::DialogResult^ dialogResult = MessageBox::Show(
                "Save current values for application settings?",
                "Save Settings", MessageBoxButtons::YesNo);
            if (::DialogResult::No == dialogResult)
            {
                e->Cancel = true;
            }
        }
    };
partial class Form1 : Form
{
    private FormSettings frmSettings1 = new FormSettings();

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);

        //Associate settings property event handlers.
        frmSettings1.SettingChanging += new SettingChangingEventHandler(
                                            frmSettings1_SettingChanging);
        frmSettings1.SettingsSaving += new SettingsSavingEventHandler(
                                            frmSettings1_SettingsSaving);

        //Data bind settings properties with straightforward associations.
        Binding bndBackColor = new Binding("BackColor", frmSettings1,
            "FormBackColor", true, DataSourceUpdateMode.OnPropertyChanged);
        this.DataBindings.Add(bndBackColor);
        Binding bndLocation = new Binding("Location", frmSettings1,
            "FormLocation", true, DataSourceUpdateMode.OnPropertyChanged);
        this.DataBindings.Add(bndLocation);

        // Assign Size property, since databinding to Size doesn't work well.
         this.Size = frmSettings1.FormSize;

        //For more complex associations, manually assign associations.
        String savedText = frmSettings1.FormText;
        //Since there is no default value for FormText.
        if (savedText != null)
            this.Text = savedText;
    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        //Synchronize manual associations first.
        frmSettings1.FormText = this.Text + '.';
        frmSettings1.FormSize = this.Size;
        frmSettings1.Save();
    }

    private void btnBackColor_Click(object sender, EventArgs e)
    {
        if (DialogResult.OK == colorDialog1.ShowDialog())
        {
            Color c = colorDialog1.Color;
            this.BackColor = c;
        }
    }

    private void btnReset_Click(object sender, EventArgs e)
    {
        frmSettings1.Reset();
        this.BackColor = SystemColors.Control;
    }

    private void btnReload_Click(object sender, EventArgs e)
    {
        frmSettings1.Reload();
    }

    void frmSettings1_SettingChanging(object sender, SettingChangingEventArgs e)
    {
        tbStatus.Text = e.SettingName + ": " + e.NewValue;
    }

    void frmSettings1_SettingsSaving(object sender, CancelEventArgs e)
    {
        //Should check for settings changes first.
        DialogResult dr = MessageBox.Show(
                        "Save current values for application settings?",
                        "Save Settings", MessageBoxButtons.YesNo);
        if (DialogResult.No == dr)
        {
            e.Cancel = true;
        }
    }
}

//Application settings wrapper class
sealed class FormSettings : ApplicationSettingsBase
{
    [UserScopedSettingAttribute()]
    public String FormText
    {
        get { return (String)this["FormText"]; }
        set { this["FormText"] = value; }
    }

    [UserScopedSettingAttribute()]
    [DefaultSettingValueAttribute("0, 0")]
    public Point FormLocation
    {
        get { return (Point)(this["FormLocation"]); }
        set { this["FormLocation"] = value; }
    }

    [UserScopedSettingAttribute()]
    [DefaultSettingValueAttribute("225, 200")]
    public Size FormSize
    {
        get { return (Size)this["FormSize"]; }
        set { this["FormSize"] = value; }
    }

    [UserScopedSettingAttribute()]
    [DefaultSettingValueAttribute("LightGray")]
    public Color FormBackColor
    {
        get { return (Color)this["FormBackColor"]; }
        set { this["FormBackColor"] = value; }
    }
}
Imports System.Configuration
Imports System.ComponentModel

Public Class Form1

    Private WithEvents frmSettings1 As New FormSettings

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _
            Handles MyBase.Load
        'Settings property event handlers are associated through WithEvents 
        '  and Handles combination.

        'Data bind settings properties with straightforward associations.
        Dim bndBackColor As New Binding("BackColor", frmSettings1, "FormBackColor", _
                True, DataSourceUpdateMode.OnPropertyChanged)
        Me.DataBindings.Add(bndBackColor)
        Dim bndLocation As New Binding("Location", frmSettings1, "FormLocation", _
                True, DataSourceUpdateMode.OnPropertyChanged)
        Me.DataBindings.Add(bndLocation)

        ' Assign Size property, since databinding to Size doesn't work well.
        Me.Size = frmSettings1.FormSize

        'For more complex associations, manually assign associations.
        Dim savedText As String = frmSettings1.FormText
        'Since there is no default value for FormText.
        If (savedText IsNot Nothing) Then
            Me.Text = savedText
        End If
    End Sub

    Private Sub Form1_FormClosing_1(ByVal sender As Object, ByVal e As _
            FormClosingEventArgs) Handles MyBase.FormClosing
        'Synchronize manual associations first.
        frmSettings1.FormText = Me.Text + "."c

        ' Save size settings manually.
        frmSettings1.FormSize = Me.Size

        frmSettings1.Save()
    End Sub

    Private Sub btnBackColor_Click(ByVal sender As Object, ByVal e As EventArgs) _
            Handles btnBackColor.Click
        If System.Windows.Forms.DialogResult.OK = colorDialog1.ShowDialog() Then
            Dim c As Color = colorDialog1.Color
            Me.BackColor = c
        End If
    End Sub

    Private Sub btnReset_Click(ByVal sender As Object, ByVal e As EventArgs) _
            Handles btnReset.Click
        frmSettings1.Reset()
        Me.BackColor = SystemColors.Control
    End Sub

    Private Sub btnReload_Click(ByVal sender As Object, ByVal e As EventArgs) _
            Handles btnReload.Click
        frmSettings1.Reload()
    End Sub

    Private Sub frmSettings1_SettingChanging(ByVal sender As Object, ByVal e As _
            SettingChangingEventArgs) Handles frmSettings1.SettingChanging
        tbStatus.Text = e.SettingName & ": " & e.NewValue.ToString
    End Sub

    Private Sub frmSettings1_SettingsSaving(ByVal sender As Object, ByVal e As _
            CancelEventArgs) Handles frmSettings1.SettingsSaving
        'Should check for settings changes first.
        Dim dr As DialogResult = MessageBox.Show( _
            "Save current values for application settings?", "Save Settings", _
            MessageBoxButtons.YesNo)
        If (System.Windows.Forms.DialogResult.No = dr) Then
            e.Cancel = True
        End If
    End Sub
End Class

'Application settings wrapper class. This class defines the settings we intend to use in our application.
NotInheritable Class FormSettings
    Inherits ApplicationSettingsBase

    <UserScopedSettingAttribute()> _
    Public Property FormText() As String
        Get
            Return CStr(Me("FormText"))
        End Get
        Set(ByVal value As String)
            Me("FormText") = value
        End Set
    End Property

    <UserScopedSettingAttribute(), DefaultSettingValueAttribute("0, 0")> _
    Public Property FormLocation() As Point
        Get
            Return CType(Me("FormLocation"), Point)
        End Get
        Set(ByVal value As Point)
            Me("FormLocation") = value
        End Set
    End Property

    <UserScopedSettingAttribute(), DefaultSettingValueAttribute("225, 200")> _
    Public Property FormSize() As Size
        Get
            Return CType(Me("FormSize"), Size)
        End Get
        Set(ByVal value As Size)
            Me("FormSize") = value
        End Set
    End Property

    <UserScopedSettingAttribute(), DefaultSettingValueAttribute("LightGray")> _
    Public Property FormBackColor() As Color
        Get
            Return CType(Me("FormBackColor"), Color)
        End Get
        Set(ByVal value As Color)
            Me("FormBackColor") = value
        End Set
    End Property
End Class

Comentarios

ApplicationSettingsBase agrega la siguiente funcionalidad a la SettingsBase clase , que usan las aplicaciones basadas en Web:

  • La capacidad de detectar atributos en una clase contenedora de configuración derivada. ApplicationSettingsBase admite el modelo declarativo que se usa para las propiedades de la clase contenedora, como se describe más adelante.

  • Métodos y Reload de nivel Save superior.

  • Eventos de validación adicionales que puede controlar para garantizar la corrección de la configuración individual.

En la arquitectura de configuración de la aplicación, para acceder a un grupo de propiedades de configuración, debe derivar una clase contenedora concreta de ApplicationSettingsBase. La clase contenedora personaliza ApplicationSettingsBase de las siguientes maneras:

  • Para cada propiedad de configuración a la que se va a tener acceso, se agrega una propiedad pública fuertemente tipada correspondiente a la clase contenedora. Esta propiedad tiene get descriptores de acceso y set para la configuración de la aplicación de lectura y escritura, pero solo un get descriptor de acceso para la configuración de solo lectura.

  • Los atributos apropiados se deben aplicar a las propiedades públicas de la clase contenedora para indicar características de la propiedad de configuración, como el ámbito de la configuración (aplicación o usuario), si la configuración debe admitir la itinerancia, el valor predeterminado para la configuración, el proveedor de configuración que se va a usar, etc. Cada propiedad es necesaria para especificar su ámbito, mediante ApplicationScopedSettingAttribute o UserScopedSettingAttribute. La configuración con ámbito de aplicación es de solo lectura si se usa el valor predeterminado LocalFileSettingsProvider .

La ApplicationSettingsBase clase usa la reflexión para detectar estos atributos en tiempo de ejecución. La mayoría de esta información se pasa a la capa del proveedor de configuración, que es responsable del almacenamiento, el formato de persistencia, etc.

Cuando una aplicación tiene varias clases contenedoras de configuración, cada clase define un grupo de configuración. Cada grupo tiene las siguientes características:

  • Un grupo puede contener cualquier número o tipo de configuración de propiedad.

  • Si el nombre del grupo no se establece explícitamente mediante la decoración de la clase contenedora con , SettingsGroupNameAttributese genera automáticamente un nombre.

De forma predeterminada, todas las aplicaciones basadas en cliente usan para LocalFileSettingsProvider proporcionar almacenamiento. Si se desea un proveedor de configuración alternativo, la clase contenedora o la propiedad deben estar decoradas con un correspondiente SettingsProviderAttribute.

Para obtener más información sobre el uso de la configuración de la aplicación, consulte Configuración de la aplicación para Windows Forms.

Constructores

ApplicationSettingsBase()

Inicializa una instancia de la clase ApplicationSettingsBase en su estado predeterminado.

ApplicationSettingsBase(IComponent)

Inicializa una instancia de la clase ApplicationSettingsBase utilizando el componente propietario proporcionado.

ApplicationSettingsBase(IComponent, String)

Inicializa una instancia de la clase ApplicationSettingsBase utilizando el componente de propietario y la clave de configuración proporcionados.

ApplicationSettingsBase(String)

Inicializa una instancia de la clase ApplicationSettingsBase utilizando la clave de configuración proporcionada.

Propiedades

Context

Obtiene el contexto de configuración de la aplicación asociado al grupo de configuración.

IsSynchronized

Obtiene un valor que indica si el acceso al objeto está sincronizado (es seguro para la ejecución de subprocesos).

(Heredado de SettingsBase)
Item[String]

Obtiene o establece el valor de la propiedad de configuración de la aplicación especificada.

Properties

Obtiene la colección de propiedades de configuración que hay en el contenedor.

PropertyValues

Obtiene una colección de valores de propiedad.

Providers

Obtiene la colección de proveedores de configuración de la aplicación utilizada por el contenedor.

SettingsKey

Obtiene o establece la clave de configuración para el grupo de configuración de la aplicación.

Métodos

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetPreviousVersion(String)

Devuelve el valor de la propiedad de configuración con nombre para la versión anterior de la misma aplicación.

GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
Initialize(SettingsContext, SettingsPropertyCollection, SettingsProviderCollection)

Inicializa las propiedades internas que utiliza el objeto SettingsBase.

(Heredado de SettingsBase)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
OnPropertyChanged(Object, PropertyChangedEventArgs)

Genera el evento PropertyChanged.

OnSettingChanging(Object, SettingChangingEventArgs)

Genera el evento SettingChanging.

OnSettingsLoaded(Object, SettingsLoadedEventArgs)

Genera el evento SettingsLoaded.

OnSettingsSaving(Object, CancelEventArgs)

Genera el evento SettingsSaving.

Reload()

Actualiza los valores de propiedades de configuración de la aplicación del almacenamiento persistente.

Reset()

Restaura los valores de configuración de la aplicación conservados a sus propiedades predeterminadas correspondientes.

Save()

Almacena los valores actuales de las propiedades de configuración de la aplicación.

ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)
Upgrade()

Actualiza la configuración de la aplicación para reflejar una instalación más reciente de la aplicación.

Eventos

PropertyChanged

Se produce después de cambiar el valor de una propiedad de configuración de la aplicación.

SettingChanging

Se produce antes de cambiar el valor de una propiedad de configuración de la aplicación.

SettingsLoaded

Se produce después de recuperar del almacenamiento la configuración de la aplicación.

SettingsSaving

Se produce antes de guardar los valores en el almacén de datos.

Se aplica a

Consulte también