ApplicationSettingsBase Класс

Определение

Выступает в качестве базового класса для получения конкретных классов оболочки для реализации функции параметров приложения в приложениях Window 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
Наследование
ApplicationSettingsBase
Реализации

Примеры

В следующем примере кода показано использование параметров приложения для сохранения следующих атрибутов основной формы: расположение, размер, цвет фона и текст строки заголовка. Все эти атрибуты сохраняются в виде свойств отдельных параметров приложения в FormSettings классе, именованном FormSizeFormLocationFormBackColor и FormTextсоответственно. Все, кроме FormTextSize данных, привязанных к связанным свойствам формы, и имеют значение по умолчанию, применяемое с помощью DefaultSettingValueAttribute.

Форма содержит четыре дочерних элемента управления с следующими именами и функциями:

  • Кнопка с именем btnBackColor , используемая для отображения общего диалогового окна "Цвет ".

  • Кнопка с именем btnReload , используемая для Reload параметров приложения.

  • Кнопка с именем btnReset , используемая для Reset параметров приложения.

  • Текстовое поле с именем tbStatus , используемое для отображения сведений о состоянии программы.

Обратите внимание, что после каждого выполнения приложения дополнительный символ периода добавляется к тексту заголовка формы.

В этом примере кода требуется форма с ColorDialog именем colorDialog1класса и StatusStrip элемент управления с ToolStripStatusLabel именем tbStatus. Кроме того, для него требуются три Button объекта с именем btnReload, btnResetа также 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
Imports System.Windows.Forms
Imports System.Drawing

Public Class Form1

    Public Shared Sub Main()

    End Sub

    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)
        DataBindings.Add(bndBackColor)
        Dim bndLocation As New Binding("Location", frmSettings1, "FormLocation",
                True, DataSourceUpdateMode.OnPropertyChanged)
        DataBindings.Add(bndLocation)

        ' Assign Size property, since databinding to Size doesn't work well.
        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
            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 = Text + "."c

        ' Save size settings manually.
        frmSettings1.FormSize = Size

        frmSettings1.Save()
    End Sub

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

    Private Sub btnReset_Click(ByVal sender As Object, ByVal e As EventArgs) _
            Handles btnReset.Click
        frmSettings1.Reset()
        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 (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

Комментарии

ApplicationSettingsBase добавляет следующие функции в SettingsBase класс, который используется веб-приложениями:

  • Возможность обнаруживать атрибуты в производном классе оболочки параметров. ApplicationSettingsBase поддерживает декларативную модель, используемую для свойств класса оболочки, как описано далее.

  • Более высокий уровень Save и Reload методы.

  • Дополнительные события проверки, которые можно обрабатывать, чтобы обеспечить правильность отдельных параметров.

В архитектуре параметров приложения для доступа к группе свойств параметров необходимо наследовать конкретный класс оболочки.ApplicationSettingsBase Класс-оболочка настраивается ApplicationSettingsBase следующим образом:

  • Для доступа к каждому свойству параметров в класс оболочки добавляется соответствующее строго типизированное общедоступное свойство. Это свойство имеет get и set методы доступа для параметров приложения чтения и записи, но только get метод доступа для параметров только для чтения.

  • Соответствующие атрибуты должны применяться к общедоступным свойствам класса-оболочки, чтобы указать характеристики свойства параметров, например область действия параметра (приложение или пользователь), следует ли параметр поддерживать роуминг, значение по умолчанию для параметра, используемое поставщиком параметров и т. д. Каждому свойству требуется указать область, используя либо ApplicationScopedSettingAttributeUserScopedSettingAttribute. Параметры области приложения доступны только для чтения, если используется значение по умолчанию LocalFileSettingsProvider .

Класс ApplicationSettingsBase использует отражение для обнаружения этих атрибутов во время выполнения. Большая часть этих сведений передается на уровень поставщика параметров, который отвечает за хранение, формат сохраняемости и т. д.

Если приложение имеет несколько классов оболочки параметров, каждый класс определяет группу параметров. Каждая группа имеет следующие характеристики:

  • Группа может содержать любое число или тип параметров свойства.

  • Если имя группы не задано явным образом путем декорирования класса-оболочки с помощью a SettingsGroupNameAttribute, то имя создается автоматически.

По умолчанию все клиентские приложения используют LocalFileSettingsProvider хранилище. Если требуется альтернативный поставщик параметров, класс или свойство оболочки должно быть украшено соответствующим SettingsProviderAttribute.

Дополнительные сведения об использовании параметров приложения см. в разделе Application Settings for Windows Forms.

Конструкторы

Имя Описание
ApplicationSettingsBase()

Инициализирует экземпляр ApplicationSettingsBase класса по умолчанию.

ApplicationSettingsBase(IComponent, String)

Инициализирует экземпляр класса с помощью предоставленного ApplicationSettingsBase компонента владельца и ключа параметров.

ApplicationSettingsBase(IComponent)

Инициализирует экземпляр класса с помощью предоставленного ApplicationSettingsBase компонента владельца.

ApplicationSettingsBase(String)

Инициализирует экземпляр класса с помощью предоставленного ApplicationSettingsBase ключа параметров.

Свойства

Имя Описание
Context

Возвращает контекст параметров приложения, связанный с группой параметров.

IsSynchronized

Возвращает значение, указывающее, синхронизирован ли доступ к объекту (потокобезопасный).

(Унаследовано от SettingsBase)
Item[String]

Возвращает или задает значение указанного свойства параметров приложения.

Properties

Возвращает коллекцию свойств параметров в оболочке.

PropertyValues

Возвращает коллекцию значений свойств.

Providers

Возвращает коллекцию поставщиков параметров приложения, используемых оболочкой.

SettingsKey

Возвращает или задает ключ параметров для группы параметров приложения.

Методы

Имя Описание
Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetPreviousVersion(String)

Возвращает значение свойства именованных параметров для предыдущей версии того же приложения.

GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
Initialize(SettingsContext, SettingsPropertyCollection, SettingsProviderCollection)

Инициализирует внутренние свойства, используемые SettingsBase объектом.

(Унаследовано от SettingsBase)
MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
OnPropertyChanged(Object, PropertyChangedEventArgs)

Вызывает событие PropertyChanged.

OnSettingChanging(Object, SettingChangingEventArgs)

Вызывает событие SettingChanging.

OnSettingsLoaded(Object, SettingsLoadedEventArgs)

Вызывает событие SettingsLoaded.

OnSettingsSaving(Object, CancelEventArgs)

Вызывает событие SettingsSaving.

Reload()

Обновляет значения свойств параметров приложения из постоянного хранилища.

Reset()

Восстанавливает сохраненные значения параметров приложения в соответствующие свойства по умолчанию.

Save()

Сохраняет текущие значения свойств параметров приложения.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)
Upgrade()

Обновляет параметры приложения, чтобы отразить более новую установку приложения.

События

Имя Описание
PropertyChanged

Происходит после изменения значения свойства параметров приложения.

SettingChanging

Происходит до изменения значения свойства параметров приложения.

SettingsLoaded

Происходит после получения параметров приложения из хранилища.

SettingsSaving

Происходит перед сохранением значений в хранилище данных.

Применяется к

См. также раздел