一、什么是.settings文件

.settings文件是专用于保存程序设置文件。当应用程序启动时,从.settings文件中读入程序设置;退出时,将程序的某些设置保存到.settings文件中,下次启动是可以再次从文件读取这些设置。

二、实例

1. 新建项目

启动VS2012,新建一个“Windows 窗体应用程序”,项目名称“WindowsFormsApplication1”

2. 为项目添加一个“设置文件”

解决方案管理中,在项目“WindowsFormsApplication1”上点鼠标右键-->添加-->新建项

 在“常规”类别中,选择“设置文件”,文件名称为:WinApp.settings。点“添加”,如下图

settings distributionmanagement 位置 settings file_Windows

 在项目会添加两个新的文件app.config和WinApp.settings,如下图所示。

settings distributionmanagement 位置 settings file_Windows_02

3.  编辑WinApp.settings

settings distributionmanagement 位置 settings file_System_03

4. 在程序中使用WinApp.settings 

using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            // 窗口的标题
            this.Text = WinApp.Default.appTilte;
            // 窗口位置
            this.Left = WinApp.Default.x;
            this.Top = WinApp.Default.y;
            // 窗口尺寸
            this.Width = WinApp.Default.width;
            this.Height = WinApp.Default.height;
            // 起始位置设置为手动
            this.StartPosition = FormStartPosition.Manual;
        }

        /// <summary>
        /// 窗口关闭前,保存窗口位置和尺寸
        /// </summary>
        /// <param name="e"></param>
        protected override void OnFormClosed(FormClosedEventArgs e)
        {
            base.OnFormClosed(e);
            // 保存窗口位置
            WinApp.Default.x = this.Left;
            WinApp.Default.y = this.Top;
            // 保存窗口尺寸
            WinApp.Default.width = this.Width;
            WinApp.Default.height = this.Height;
            // 保存
            WinApp.Default.Save();
        }
    }
}

  5.  运行程序,在桌面上移动窗口并改变窗口的大小,然后退出。再次运行程序,窗口会显示在上次退出时的位置,并且大小与上次退出时一样。

 三、结论

1. 在项目中添加 .settings文件后,设计器自动添加存取这个文件的便利类。在上面的例子中,这个类名称为 “WinApp”(在文件WinApp.Designer.cs中)

settings distributionmanagement 位置 settings file_Windows_04

2.  如下图所示的设置文件保存位置。注意:不同Windows用户或者同一个用户以不同身份(以管理员身份或普通用户身份)运行上面的程序后,将会生成不同版本的文件。

如下图所示,同一个用户ROCK分别以“普通用户”和“管理员用户”运行上面程序后,系统自动保存了两个版本的设置文件。

settings distributionmanagement 位置 settings file_sed_05

3.  在app.config中保存着WinApp.settings的“默认值” ——  以app.config文件中<userSettings>……</userSettings>的值用作为第一次生成.settings文件的值。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="WindowsFormsApplication1.WinApp" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="WindowsFormsApplication1.WinApp" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <userSettings>
        <WindowsFormsApplication1.WinApp>
            <setting name="x" serializeAs="String">
                <value>0</value>
            </setting>
            <setting name="y" serializeAs="String">
                <value>0</value>
            </setting>
            <setting name="width" serializeAs="String">
                <value>400</value>
            </setting>
            <setting name="height" serializeAs="String">
                <value>240</value>
            </setting>
        </WindowsFormsApplication1.WinApp>
    </userSettings>
    <applicationSettings>
        <WindowsFormsApplication1.WinApp>
            <setting name="appTilte" serializeAs="String">
                <value>设置文件测试程序</value>
            </setting>
        </WindowsFormsApplication1.WinApp>
    </applicationSettings>
</configuration>

 4.  需要频繁保存程序设置时,使用.settings文件来动态保存程序设置更方便,而且,由于配置文件保存位置的特殊行,写入时不会遇到权限问题。