如何:创建应用程序设置
使用托管代码,可以创建新的应用程序设置并将其绑定到窗体或窗体控件上的属性,以便在运行时自动加载和保存这些设置。
在下面的过程中,您将手动创建一个派生自 ApplicationSettingsBase的包装类。 要向这个类添加一个公开访问的属性,以便公开每个应用程序设置。
还可以在 Visual Studio 设计器中使用最少的代码执行此过程。 另请参阅 如何:使用设计器创建应用程序设置。
以编程方式创建新的应用程序设置
向项目添加新类,并将其重命名。 对于此过程,我们将此类命名为
MyUserSettings
。 更改类定义,使类派生自 ApplicationSettingsBase。为每个所需的应用程序设置定义此包装类的属性,并使用 ApplicationScopedSettingAttribute 或 UserScopedSettingAttribute应用该属性,具体取决于设置的范围。 有关设置范围的详细信息,请参阅 应用程序设置概述。 现在,代码应如下所示:
using System; using System.Configuration; using System.Drawing; public class MyUserSettings : ApplicationSettingsBase { [UserScopedSetting()] [DefaultSettingValue("white")] public Color BackgroundColor { get { return ((Color)this["BackgroundColor"]); } set { this["BackgroundColor"] = (Color)value; } } }
Imports System.Configuration Public Class MyUserSettings Inherits ApplicationSettingsBase <UserScopedSetting()> _ <DefaultSettingValue("white")> _ Public Property BackgroundColor() As Color Get BackgroundColor = Me("BackgroundColor") End Get Set(ByVal value As Color) Me("BackgroundColor") = value End Set End Property End Class
在应用程序中创建此包装类的实例。 它通常是主窗体的私有成员。 现在,定义好你的类之后,需要将其绑定到一个属性;在本例中,绑定到窗体的 BackColor 属性。 可以在表单的
Load
事件处理程序中完成此操作。MyUserSettings mus; private void Form1_Load(object sender, EventArgs e) { mus = new MyUserSettings(); mus.BackgroundColor = Color.AliceBlue; this.DataBindings.Add(new Binding("BackColor", mus, "BackgroundColor")); }
Dim Mus As MyUserSettings Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Mus = New MyUserSettings() Mus.BackgroundColor = Color.AliceBlue Me.DataBindings.Add(New Binding("BackColor", Mus, "BackgroundColor")) End Sub
如果在运行时提供更改设置的方法,则需要在窗体关闭时将用户的当前设置保存到磁盘,否则这些更改将丢失。
//Make sure to hook up this event handler in the constructor! //this.FormClosing += new FormClosingEventHandler(Form1_FormClosing); void Form1_FormClosing(object sender, FormClosingEventArgs e) { mus.Save(); }
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing Mus.Save() End Sub
现已成功创建新的应用程序设置,并将其绑定到指定的属性。
以下示例显示了一个应用程序设置文件,该文件定义两个应用程序范围的设置和两个用户范围的设置。 您需要为在文件顶部的 <configSections> 元素下创建的设置项添加名称。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="WindowsApplication1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</sectionGroup>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="WindowsApplication1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" />
</sectionGroup>
</configSections>
<applicationSettings>
<WindowsApplication1.Properties.Settings>
<setting name="Cursor" serializeAs="String">
<value>Default</value>
</setting>
<setting name="DoubleBuffering" serializeAs="String">
<value>False</value>
</setting>
</WindowsApplication1.Properties.Settings>
</applicationSettings>
<userSettings>
<WindowsApplication1.Properties.Settings>
<setting name="FormTitle" serializeAs="String">
<value>Form1</value>
</setting>
<setting name="FormSize" serializeAs="String">
<value>595, 536</value>
</setting>
</WindowsApplication1.Properties.Settings>
</userSettings>
</configuration>
.NET Framework 安全性
默认设置提供程序 LocalFileSettingsProvider将信息作为纯文本保存到配置文件。 这限制了当前用户操作系统提供的文件访问安全性。 因此,必须注意配置文件中存储的信息。 例如,应用程序设置的一个常见用途是存储指向应用程序的数据存储的连接字符串。 但是,由于安全问题,此类字符串不应包含密码。 有关连接字符串的详细信息,请参阅 SpecialSetting。