.NET
2.0中,WinForm应用程序的配置已经非常方便。默认情况下,我们可以利用Properties文件夹里默认的Settings.setting文件进行Application和User两个层级配置信息的设置。在Settings.setting里进行的修改保存后,均自动在后部cs文件里自动生成相关代码,同时在应用程序配置文件(app.config)里存储相关信息。比如,我们在TestWinForm项目里对Settings.setting进行如下修改:
保存后,Settings.Designer.cs文件自动增加如下代码:
1
namespace TestWinForm.Properties {2
3
4
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]5
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")]6
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {7
8
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));9
10
public static Settings Default {11
get {12
return defaultInstance;13
}14
}15
16
[global::System.Configuration.ApplicationScopedSettingAttribute()]17
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]18
[global::System.Configuration.DefaultSettingValueAttribute("localhost")]19
public string Server {20
get {21
return ((string)(this["Server"]));22
}23
}24
25
[global::System.Configuration.ApplicationScopedSettingAttribute()]26
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]27
[global::System.Configuration.DefaultSettingValueAttribute("2121")]28
public int Port {29
get {30
return ((int)(this["Port"]));31
}32
}33
34
[global::System.Configuration.UserScopedSettingAttribute()]35
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]36
[global::System.Configuration.DefaultSettingValueAttribute("brooks")]37
public string UserName {38
get {39
return ((string)(this["UserName"]));40
}41
set {42
this["UserName"] = value;43
}44
}45
46
[global::System.Configuration.UserScopedSettingAttribute()]47
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]48
[global::System.Configuration.DefaultSettingValueAttribute("2006-05-01")]49
public global::System.DateTime CreateDate {50
get {51
return ((global::System.DateTime)(this["CreateDate"]));52
}53
set {54
this["CreateDate"] = value;55
}56
}57
}58
}同时,app.config也发生了变化:
1
<?xml version="1.0" encoding="utf-8" ?>
2
<configuration>
3
<configSections>
4
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
5
<section name="TestWinForm.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
6
</sectionGroup>
7
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
8
<section name="TestWinForm.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
9
</sectionGroup>
10
</configSections>
11
<applicationSettings>
12
<TestWinForm.Properties.Settings>
13
<setting name="Server" serializeAs="String">
14
<value>localhost</value>
15
</setting>
16
<setting name="Port" serializeAs="String">
17
<value>2121</value>
18
</setting>
19
</TestWinForm.Properties.Settings>
20
</applicationSettings>
21
<userSettings>
22
<TestWinForm.Properties.Settings>
23
<setting name="UserName" serializeAs="String">
24
<value>brooks</value>
25
</setting>
26
<setting name="CreateDate" serializeAs="String">
27
<value>2006-05-01</value>
28
</setting>
29
</TestWinForm.Properties.Settings>
30
</userSettings>
31
</configuration>
<?xml version="1.0" encoding="utf-8" ?>2
<configuration>3
<configSections>4
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >5
<section name="TestWinForm.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />6
</sectionGroup>7
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >8
<section name="TestWinForm.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />9
</sectionGroup>10
</configSections>11
<applicationSettings>12
<TestWinForm.Properties.Settings>13
<setting name="Server" serializeAs="String">14
<value>localhost</value>15
</setting>16
<setting name="Port" serializeAs="String">17
<value>2121</value>18
</setting>19
</TestWinForm.Properties.Settings>20
</applicationSettings>21
<userSettings>22
<TestWinForm.Properties.Settings>23
<setting name="UserName" serializeAs="String">24
<value>brooks</value>25
</setting>26
<setting name="CreateDate" serializeAs="String">27
<value>2006-05-01</value>28
</setting>29
</TestWinForm.Properties.Settings>30
</userSettings>31
</configuration>要在具体代码中使用配置信息就非常非常的方便了。
1
private void button1_Click(object sender, EventArgs e)
2
{
3
string msg = TestWinForm.Properties.Settings.Default.Server + ":" + TestWinForm.Properties.Settings.Default.Port.ToString();
4
MessageBox.Show(msg);
5
}
private void button1_Click(object sender, EventArgs e)2
{3
string msg = TestWinForm.Properties.Settings.Default.Server + ":" + TestWinForm.Properties.Settings.Default.Port.ToString();4
MessageBox.Show(msg);5
}OK,鬼扯了这么多,用意在于让我们再熟悉下.NET2.0的配置。现在,我们不满足他所提供的默认配置,于是我们创建了自己的一个Demo用的配置类 FtpSetting。在WinForm应用程序里,一切配置类都得继承自 ApplicationSettingsBase 类。
1
sealed class FtpSettings : ApplicationSettingsBase
2
{
3
[UserScopedSetting]
4
[DefaultSettingValue("127.0.0.1")]
5
public string Server
6
{
7
get { return (string)this["Server"]; }
8
set { this["Server"] = value; }
9
}
10
11
[UserScopedSetting]
12
[DefaultSettingValue("21")]
13
public int Port
14
{
15
get { return (int)this["Port"]; }
16
set { this["Port"] = value; }
17
}
18
}
sealed class FtpSettings : ApplicationSettingsBase2
{3
[UserScopedSetting]4
[DefaultSettingValue("127.0.0.1")]5
public string Server6
{7
get { return (string)this["Server"]; }8
set { this["Server"] = value; }9
}10

11
[UserScopedSetting]12
[DefaultSettingValue("21")]13
public int Port14
{15
get { return (int)this["Port"]; }16
set { this["Port"] = value; }17
}18
}如果要使用上述配置类,可以用:
1
private void button2_Click(object sender, EventArgs e)
2
{
3
FtpSettings ftp = new FtpSettings();
4
5
string msg = ftp.Server + ":" + ftp.Port.ToString();
6
MessageBox.Show(msg);
7
}
private void button2_Click(object sender, EventArgs e)2
{3
FtpSettings ftp = new FtpSettings();4

5
string msg = ftp.Server + ":" + ftp.Port.ToString();6
MessageBox.Show(msg);7
}好,似乎还在鬼扯。这个Tip已经进入尾声了,主题正式登场。:) 我们在使用上述 FtpSetting 配置时,当然要先进行赋值保存,然后再使用,后面再修改,再保存,再使用。
1
private void button2_Click(object sender, EventArgs e)
2
{
3
FtpSettings ftp = new FtpSettings();
4
ftp.Server = "ftp.test.com";
5
ftp.Port = 8021;
6
7
ftp.Save();
8
ftp.Reload();
9
10
string msg = ftp.Server + ":" + ftp.Port.ToString();
11
MessageBox.Show(msg);
12
}
private void button2_Click(object sender, EventArgs e)2
{3
FtpSettings ftp = new FtpSettings();4
ftp.Server = "ftp.test.com";5
ftp.Port = 8021;6

7
ftp.Save();8
ftp.Reload();9

10
string msg = ftp.Server + ":" + ftp.Port.ToString();11
MessageBox.Show(msg);12
}嗯。已经Save了,你可能会在应用程序文件夹里找不到它到底保存到哪里去了。由于我们是用UserScope的,所以其实该配置信息是保存到了你的Windows的个人文件夹里去了。比如我的就是 C:\Documents and Settings\brooks\Local Settings\Application Data\TestWinForm目录了。哈~当作Tip吧,免得大伙一时找不到Save后的配置文件。


浙公网安备 33010602011771号