ApplicationSettingsBase Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Действует, как базовый класс для извлечения конкретных классов-оболочек, чтобы реализовать функцию параметров приложения в приложениях 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
- Наследование
- Реализации
Примеры
В следующем примере кода показано использование параметров приложения для сохранения следующих атрибутов формы main: расположение, размер, цвет фона и текст строки заголовка. Все эти атрибуты сохраняются в виде отдельных свойств параметров приложения в FormSettings
классе с именами FormLocation
, FormSize
FormBackColor
и FormText
соответственно. Все, кроме FormText
и Size
, являются данными, привязанными к связанным свойствам формы и имеют значение по умолчанию, применяемое с помощью DefaultSettingValueAttribute.
Форма содержит четыре дочерних элемента управления со следующими именами и функциями:
Кнопка с именем
btnBackColor
, используемая для отображения диалогового окна "Общий цвет ".Кнопка с именем
btnReload
, используемая для Reload параметров приложения.Кнопка с именем
btnReset
, используемая для Reset параметров приложения.Текстовое поле с именем
tbStatus
, используемое для отображения сведений о состоянии программы.
Обратите внимание, что после каждого выполнения приложения к тексту заголовка формы добавляется дополнительный символ точки.
В этом примере кода требуется form с классом 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
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
Комментарии
ApplicationSettingsBase добавляет следующие функциональные возможности в SettingsBase класс , который используется веб-приложениями:
Возможность обнаружения атрибутов в производном классе-оболочке settings. ApplicationSettingsBase поддерживает декларативную модель, используемую для свойств класса-оболочки, как описано далее.
Дополнительные события проверки, которые можно обрабатывать для обеспечения правильности отдельных параметров.
В архитектуре параметров приложения для доступа к группе свойств параметров необходимо создать конкретный класс-оболочку из ApplicationSettingsBase. Класс-оболочка настраивается ApplicationSettingsBase следующим образом:
Для каждого свойства settings, доступ к который требуется получить, в класс-оболочку добавляется соответствующее строго типизированное открытое свойство. Это свойство имеет
get
методы доступа иset
для параметров приложения для чтения и записи, но толькоget
метод доступа для параметров только для чтения.Соответствующие атрибуты должны применяться к открытым свойствам класса-оболочки, чтобы указать характеристики свойства параметров, такие как область параметра (приложение или пользователь), должен ли параметр поддерживать перемещение, значение по умолчанию для параметра, используемый поставщик параметров и т. д. Каждое свойство требуется для указания область с помощью ApplicationScopedSettingAttribute или UserScopedSettingAttribute. Параметры области приложения доступны только для чтения, если используется значение по умолчанию LocalFileSettingsProvider .
Класс ApplicationSettingsBase использует отражение для обнаружения этих атрибутов во время выполнения. Большая часть этих сведений передается на уровень поставщика параметров, который отвечает за хранение, формат сохраняемости и т. д.
Если приложение имеет несколько классов-оболочек параметров, каждый класс определяет группу параметров. Каждая группа имеет следующие характеристики:
Группа может содержать любое количество или тип параметров свойства.
Если имя группы не задано явным образом, декорируя класс-оболочку с помощью SettingsGroupNameAttribute, то имя создается автоматически.
По умолчанию все клиентские приложения используют для предоставления LocalFileSettingsProvider хранилища. Если требуется альтернативный поставщик параметров, класс-оболочка или свойство должны быть дополнены соответствующим SettingsProviderAttribute.
Дополнительные сведения об использовании параметров приложения см. в разделе Параметры приложения для Windows Forms.
Конструкторы
ApplicationSettingsBase() |
Инициализирует экземпляр класса ApplicationSettingsBase в его состояние по умолчанию. |
ApplicationSettingsBase(IComponent) |
Инициализирует новый экземпляр класса ApplicationSettingsBase, используя предоставленный компонент владельца. |
ApplicationSettingsBase(IComponent, String) |
Инициализирует новый экземпляр класса 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 |
Возникает перед сохранением значений в хранилище данных. |