C# 应用程序设置
官方参考:http://msdn.microsoft.com/zh-cn/library/k4s6c3a0(v=VS.80).aspx
使用VS自带的应用程序设置功能
- 创建项目
- 选择菜单 [项目] > [属性]
- 选择 [设置]
![[转]C# 应用程序设置 [转]C# 应用程序设置](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9YUhSMGNEb3ZMMlZrZFM1aFpHMXBialV1WTI5dEwzVndhVzFuTDJGc2JHbHRaeTh4TVRBeE1qUXZNVFkxTmpVM01DNXdibWM9)
就可手动添加应用程序设置了。
添加成功后,系统会自动生成App.config文件。
01 |
<?xml version="1.0" encoding="utf-8"?>
|
04 |
<WindowsApplication5.Properties.Settings>
|
05 |
<setting name="mySet" serializeAs="String">
|
06 |
<value>testSet_828</value>
|
08 |
<setting name="FormTitle" serializeAs="String">
|
09 |
<value>FormTestdddd</value>
|
11 |
</WindowsApplication5.Properties.Settings>
|
关于User和Application的区别
- Application 不允许在程序中更新设置。只能手动更改App.config或到项目属性的设置中更改。
- User 允许在程序中更改设置。
VS也提供了一种直接在窗体控件属性的ApplicationSettings 里设置关联应用程序的快捷方法。
以下列举了使用VS自带应用程序应注意的地方
- 如果范围是Application时,在程序此值时只读的。只能通过修改App.config的对应项来更改。
- 如果范围是User,并且在程序未对此值做修改时,修改App.config对应项,在程序访问时当前值为App.config中设置的值。
- 如果范围是User,并且在程序中对此值进行了修改,App.config中记录的还会是老值,并且以后的App.config此项设置将无效。
那到底User修改后的值系统在什么地方存这呢?
经过测试是在C:\Documents and Settings\Administrator\Local Settings\Application Data\Phook\WindowsApplication5.exe_Url_nlwmvagksxwiigfpn5ymssyrjtyn22ph\1.0.0.0\user.config
下存着,如果更改以上App.config则程序将取到新值。很奇怪,微软为什么要弄的怎么复杂。
在程序中使用
2 |
label1.Text = Properties.Settings.Default.mySet; |
3 |
label2.Text = Properties.Settings.Default.myApp; |
5 |
Properties.Settings.Default.mySet = "test1111";
|
6 |
Properties.Settings.Default.Save(); |
总结
- 应该是如果选择范围是User时,此设置是用户级别的。使用不同用户登录后运行程序取的值是不一样的。
- 并且如果程序修改了名称,各自会拥有另一套App.config。
- 而Application是应用程序级的,任何打开相同程序的Application都会一样。
自定义App.config
可能你想要一个Config可以功能和Application范围一样,但有同时支持程序修改。以下是实现方法
创建工程
手动添加App.config
![[转]C# 应用程序设置 [转]C# 应用程序设置](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9YUhSMGNEb3ZMMlZrZFM1aFpHMXBialV1WTI5dEwzVndhVzFuTDJGc2JHbHRaeTh4TVRBeE1qUXZNVFkxTmpVM01TNXdibWM9)
格式如下:
1 |
<?xml version="1.0" encoding="utf-8" ?>
|
4 |
<add key="y" value="this is Y"/>
|
引用 System.Configuration
![[转]C# 应用程序设置 [转]C# 应用程序设置](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9YUhSMGNEb3ZMMlZrZFM1aFpHMXBialV1WTI5dEwzVndhVzFuTDJGc2JHbHRaeTh4TVRBeE1qUXZNVFkxTmpVM01pNXdibWM9)
把对App.config的操作合并成了一个类方便调用。
02 |
using System.Collections.Generic;
|
04 |
using System.Configuration;
|
08 |
public class AppConfig
|
10 |
private static Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
|
15 |
/// <param name="key"></param>
|
16 |
/// <returns></returns>
|
17 |
public static string GetValue(string key)
|
19 |
string strReturn = null;
|
20 |
if (config.AppSettings.Settings[key] != null)
|
22 |
strReturn = config.AppSettings.Settings[key].Value;
|
30 |
/// <param name="key"></param>
|
31 |
/// <param name="value"></param>
|
32 |
public static void SetValue(string key, string value)
|
34 |
if (config.AppSettings.Settings[key] != null)
|
36 |
config.AppSettings.Settings[key].Value = value;
|
40 |
config.AppSettings.Settings.Add(key, value);
|
42 |
config.Save(ConfigurationSaveMode.Modified);
|
48 |
/// <param name="key"></param>
|
49 |
public static void DelValue(string key)
|
51 |
config.AppSettings.Settings.Remove(key);
|
使用方法
2 |
AppConfig.SetValue("dtNow", DateTime.Now.Millisecond.ToString());
|
4 |
label1.Text = AppConfig.GetValue("dtNow");
|
示例代码下载:https://files.cnblogs.com/zjfree/AppConfig.rar