Udostępnij za pośrednictwem


ApplicationSettingsBase Klasa

Definicja

Działa jako klasa bazowa do wyprowadzania betonowych klas otoki w celu zaimplementowania funkcji ustawień aplikacji w aplikacjach Forms Okna.

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
Dziedziczenie
ApplicationSettingsBase
Implementuje

Przykłady

Poniższy przykład kodu przedstawia użycie ustawień aplikacji do utrwalania następujących atrybutów formularza głównego: lokalizacja, rozmiar, kolor tła i tekst paska tytułu. Wszystkie te atrybuty są utrwalane jako właściwości ustawień pojedynczej FormSettings aplikacji w klasie o nazwie FormLocation, FormSizeFormBackColor i FormText, odpowiednio. Wszystkie z wyjątkiem FormText i Size są danymi powiązanymi z skojarzonymi właściwościami formularza i mają wartość ustawienia domyślnego zastosowaną przy użyciu polecenia DefaultSettingValueAttribute.

Formularz zawiera cztery kontrolki podrzędne, które mają następujące nazwy i funkcje:

  • Przycisk o nazwie btnBackColor używany do wyświetlania okna dialogowego Kolor wspólny.

  • Przycisk o nazwie btnReload używany do Reload ustawień aplikacji.

  • Przycisk o nazwie btnReset używany do Reset ustawień aplikacji.

  • Pole tekstowe o nazwie tbStatus używane do wyświetlania informacji o stanie programu.

Zwróć uwagę, że po każdym wykonaniu aplikacji dodatkowy znak kropki jest dołączany do tekstu tytułu formularza.

Ten przykład kodu wymaga formularza z klasą ColorDialog o nazwie colorDialog1i StatusStrip kontrolką ToolStripStatusLabel o nazwie tbStatus. Ponadto wymaga trzech Button obiektów o nazwie btnReload, btnReseti 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

Uwagi

ApplicationSettingsBase Dodaje następujące funkcje do SettingsBase klasy, która jest używana przez aplikacje internetowe:

  • Możliwość wykrywania atrybutów w klasie otoki ustawień pochodnych. ApplicationSettingsBase obsługuje model deklaratywny używany do właściwości klas otoki, zgodnie z opisem w dalszej części.

  • Wyższego poziomu Save i Reload metody.

  • Dodatkowe zdarzenia weryfikacji, które można obsłużyć, aby zapewnić poprawność poszczególnych ustawień.

W architekturze ustawień aplikacji, aby uzyskać dostęp do grupy właściwości ustawień, należy utworzyć konkretną klasę otoki z ApplicationSettingsBaseklasy . Klasa otoki dostosowuje ApplicationSettingsBase się w następujący sposób:

  • Dla każdej właściwości ustawień, do której ma być uzyskiwany dostęp, do klasy otoki jest dodawana odpowiednia silnie typizowana właściwość publiczna. Ta właściwość ma get i set metody dostępu do ustawień aplikacji odczytu/zapisu, ale tylko get dostęp do ustawień tylko do odczytu.

  • Odpowiednie atrybuty należy zastosować do właściwości publicznych klasy otoki, aby wskazać cechy właściwości ustawień, takie jak zakres ustawienia (aplikacja lub użytkownik), czy ustawienie powinno obsługiwać roaming, wartość domyślna ustawienia, dostawca ustawień do użycia itd. Każda właściwość jest wymagana do określenia jego zakresu przy użyciu polecenia ApplicationScopedSettingAttribute lub UserScopedSettingAttribute. Ustawienia o zakresie aplikacji są tylko do odczytu, jeśli jest używana wartość domyślna LocalFileSettingsProvider .

Klasa ApplicationSettingsBase używa odbicia do wykrywania tych atrybutów w czasie wykonywania. Większość tych informacji jest przekazywana do warstwy dostawcy ustawień, która jest odpowiedzialna za magazyn, format trwałości itd.

Gdy aplikacja ma wiele klas otoki ustawień, każda klasa definiuje grupę ustawień. Każda grupa ma następujące cechy:

  • Grupa może zawierać dowolną liczbę lub typ ustawień właściwości.

  • Jeśli nazwa grupy nie jest jawnie ustawiona przez dekorowanie klasy otoki za pomocą klasy SettingsGroupNameAttribute, nazwa jest generowana automatycznie.

Domyślnie wszystkie aplikacje oparte na klientach używają elementu LocalFileSettingsProvider do udostępniania magazynu. Jeśli wymagany jest dostawca ustawień alternatywnych, klasa lub właściwość otoki musi zostać ozdobiona odpowiednim SettingsProviderAttributeelementem .

Aby uzyskać więcej informacji na temat korzystania z ustawień aplikacji, zobacz Ustawienia aplikacji dla Windows Forms.

Konstruktory

ApplicationSettingsBase()

Inicjuje wystąpienie klasy do stanu domyślnego ApplicationSettingsBase .

ApplicationSettingsBase(IComponent)

Inicjuje ApplicationSettingsBase wystąpienie klasy przy użyciu dostarczonego składnika właściciela.

ApplicationSettingsBase(IComponent, String)

Inicjuje ApplicationSettingsBase wystąpienie klasy przy użyciu podanego składnika właściciela i klucza ustawień.

ApplicationSettingsBase(String)

Inicjuje ApplicationSettingsBase wystąpienie klasy przy użyciu podanego klucza ustawień.

Właściwości

Context

Pobiera kontekst ustawień aplikacji skojarzony z grupą ustawień.

IsSynchronized

Pobiera wartość wskazującą, czy dostęp do obiektu jest synchronizowany (bezpieczny wątek).

(Odziedziczone po SettingsBase)
Item[String]

Pobiera lub ustawia wartość określonej właściwości ustawień aplikacji.

Properties

Pobiera kolekcję właściwości ustawień w otoce.

PropertyValues

Pobiera kolekcję wartości właściwości.

Providers

Pobiera kolekcję dostawców ustawień aplikacji używanych przez otokę.

SettingsKey

Pobiera lub ustawia klucz ustawień dla grupy ustawień aplikacji.

Metody

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetPreviousVersion(String)

Zwraca wartość właściwości nazwanych ustawień dla poprzedniej wersji tej samej aplikacji.

GetType()

Type Pobiera bieżące wystąpienie.

(Odziedziczone po Object)
Initialize(SettingsContext, SettingsPropertyCollection, SettingsProviderCollection)

Inicjuje właściwości wewnętrzne używane przez SettingsBase obiekt.

(Odziedziczone po SettingsBase)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
OnPropertyChanged(Object, PropertyChangedEventArgs)

PropertyChanged Zgłasza zdarzenie.

OnSettingChanging(Object, SettingChangingEventArgs)

SettingChanging Zgłasza zdarzenie.

OnSettingsLoaded(Object, SettingsLoadedEventArgs)

SettingsLoaded Zgłasza zdarzenie.

OnSettingsSaving(Object, CancelEventArgs)

SettingsSaving Zgłasza zdarzenie.

Reload()

Odświeża wartości właściwości ustawień aplikacji z magazynu trwałego.

Reset()

Przywraca utrwalone wartości ustawień aplikacji do odpowiednich właściwości domyślnych.

Save()

Przechowuje bieżące wartości właściwości ustawień aplikacji.

ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)
Upgrade()

Aktualizacje ustawienia aplikacji, aby odzwierciedlić najnowszą instalację aplikacji.

Zdarzenia

PropertyChanged

Występuje po zmianie wartości właściwości ustawień aplikacji.

SettingChanging

Występuje przed zmianą wartości właściwości ustawień aplikacji.

SettingsLoaded

Występuje po pobraniu ustawień aplikacji z magazynu.

SettingsSaving

Występuje przed zapisaniem wartości w magazynie danych.

Dotyczy

Zobacz też