如何:创建应用程序设置

使用托管代码时,你可以创建新的应用程序设置并将其绑定窗体或窗体控件的属性上,以便在运行时自动加载和保存这些设置。

在以下过程中,手动创建从 ApplicationSettingsBase 派生的包装类。 对于此类,你可以为每个想要公开的应用程序设置添加可公开访问的属性。

你还可以使用 Visual Studio 设计器中的最小代码执行该过程。 另请参阅如何:使用设计器创建应用程序设置

以编程的方式创建新的应用程序设置

  1. 向你的项目添加新类,并对其重命名。 对于此过程中,我们将调用此类 MyUserSettings。 更改类定义,以使类从 ApplicationSettingsBase 派生。

  2. 为你需要的每个应用程序设置定义此包装类的属性,并将该属性应用到 ApplicationScopedSettingAttributeUserScopedSettingAttribute,具体取决于设置的作用域。 若要了解如何设置范围,请参阅应用程序设置概述。 现在,代码应如下所示:

    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
    
  3. 在你的应用程序中创建此包装类的实例。 该实例通常为主窗体的私有成员。 对类进行定义后,你需要将其绑定到属性;在这种情况下,是指绑定到你窗体的 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
    
  4. 如果你在运行时提供了一种更改设置的方法,则关闭窗体时需要将用户的当前设置保存到磁盘,否则将丢失这些更改。

    //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

另请参阅