.NET2.0中WinForm自定义的程序配置[转]

.NET 2.0中,WinForm应用程序的配置已经非常方便。默认情况下,我们可以利用Properties文件夹里默认的Settings.setting文件进行Application和User两个层级配置信息的设置。在Settings.setting里进行的修改保存后,均自动在后部cs文件里自动生成相关代码,同时在应用程序配置文件(app.config)里存储相关信息。比如,我们在TestWinForm项目里对Settings.setting进行如下修改:

保存后,Settings.Designer.cs文件自动增加如下代码:

Settings.Designer.cs

 

Code
 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}
59

 

同时,app.config也发生了变化:

 

 

Code
 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>
32

 

要在具体代码中使用配置信息就非常非常的方便了。

 

Code
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        }

 

OK,鬼扯了这么多,用意在于让我们再熟悉下.NET2.0的配置。现在,我们不满足他所提供的默认配置,于是我们创建了自己的一个Demo用的配置类 FtpSetting。在WinForm应用程序里,一切配置类都得继承自 ApplicationSettingsBase 类。

 

Code
 
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    }

 

如果要使用上述配置类,可以用:

 

Code
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        }

 

好,似乎还在鬼扯。这个Tip已经进入尾声了,主题正式登场。:) 我们在使用上述 FtpSetting 配置时,当然要先进行赋值保存,然后再使用,后面再修改,再保存,再使用。

 

Code
 
1        private void button2_Click(object sender, EventArgs e)
 
2        {
 
3            FtpSettings ftp = new FtpSettings();
 
4            ftp.server = "ftp://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        }
13

 

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

posted @ 2009-07-14 14:46  眼里进了砂  阅读(830)  评论(0编辑  收藏  举报