zoukankan      html  css  js  c++  java
  • 使用配置文件(.settings、.config)存储应用程序配置

    image 引言

    我不知大家早先是如何保存应用程序配置,以备下次打开时使用的,反正我开始学.Net的时候就去研究序列化,以二进制或XML格式的序列化来保存应用程序配置。这样每次都要建立单独的配置类,并书写读写配置代码,相当麻烦。

    期间也看了看.config文件的读写方式,感觉还是很麻烦,不如自己序列化来的踏实。

    后来才猛然发现微软早提供好了settings,用以定义.config文件内容,并生成相应的强类型类,使用起来极其方便~,感觉就像在火星居住了半辈子突然发现还有地球这好地方*_*~

    鉴于网上settings方面的资料不多、不详,我就以此文来介绍一下基本的用法,让小鸟们少走我那条破路,老鸟请直接从上空滑翔而过即可。

    基本使用方法

    首先建立一个WinForm项目,设计这样一个窗体:

    image

    通过“添加新项”功能添加一个MyApp.settings:

     image

    在打开的数据表格中做如下设置:

    image

    这样就设置好了a、b、c三个不同类型的配置变量,现在就可以在程序中使用它们了:

    private void Form1_Load(object sender, EventArgs e)

    {

        numericUpDown1.Value = MyApp.Default.a;

        textBox1.Text = MyApp.Default.b;

        checkBox1.Checked = MyApp.Default.c;

    }

     

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)

    {

        MyApp.Default.a = numericUpDown1.Value;

        MyApp.Default.b = textBox1.Text;

        MyApp.Default.c = checkBox1.Checked;

        MyApp.Default.Save();

    }

    通过上面的代码就可以在窗体开闭时分别加载、保存配置了。

    运行抓图:

    image

    复杂数据类型支持情况

    settings支持存储一些较为复杂的数据,比如Color、Size等类型,可以自行选择:

    image

    但并不是所有类型都可以支持,比如FileInfo类型就没有,泛型也没有,自定义类型更是不受支持的,如果需要存储这些特殊类型,就得用其他配置方案了。

    读写复杂数据类型

    我们以ArrayList类型为例,通过它在原程序的基础上实现记录每次关闭程序时间的功能。

    首先添加一个配置变量d,其类型为System.Collections.ArrayList:

    image

    在窗体中增加一个ListBoxt,然后修改后台代码为:

    image

    高亮部分为新增的代码。

    多次运行以测试:

    image

     可以看到每次的程序关闭时间都被记录并显示。

    “用户”和“应用程序”

    你可能注意到数据表格中“范围”这里全是“用户”:

    image

    如果改成另外一个选项,即“应用程序”会怎样呢?

    image

    报错了,我们的配置变量变成只读的了,所以这里可以简单地把它们理解为:

    用户=可读写

    应用程序=只读

    “应用程序”选项应当是用于设定一些程序运行所必须的重要变量,比如导航网址、数学运算参数等,这些配置项如果让用户篡改就会出问题了,所以要只读。

    数据被存在哪里?

    你可能会发现编译后在Debug目录中有个“SettingTest.exe.config”,但无论如何操作程序,这个配置文件里始终都是描述的默认配置。

    其实数据是被存在了“C:\Users\SkyD\AppData\Local\”目录中(我这是Windows7,XP或以下版本可能不是这里)

    我在“C:\Users\SkyD\AppData\Local\SettingTest\SettingTest.vshost.exe_Url_ffofch2tvz5bil2xbhdayqbnqwppy2ce\1.0.0.0”这个目录中找到了配置文件(user.config),这是其描述的配置信息:

    image

    结语

    虽然settings无法实现对一些复杂类型及自定义类型的支持,但是在多数情况下,用它来存储程序配置已是绰绰有余了,在够用的前提下,不要重复造轮子啦。


    下载示例项目:http://www.uushare.com/user/icesee/file/2017630

    下载本文的XPS版本:http://www.uushare.com/user/icesee/file/2017629

  • 相关阅读:
    无法将类型为“xxxx”的对象强制转换为类型“Microsoft.SharePoint.WebPartPages.WebPart”。
    [win32 api] FindWindow FindWindowEx EnumChildWindows
    WPF线程中被修改后DataGrid数据不能及时更新的问题
    Android Adapter 与 Listview
    LINQ 查询操作及进行数据转换
    匿名方法lambda表达式
    WPF知识4 依赖属性
    LINQ 入门
    WPF绑定.NET对象(二)Visifire的数据绑定
    LINQ 查询操作中的类型关系
  • 原文地址:https://www.cnblogs.com/SkyD/p/1566048.html
Copyright © 2011-2022 走看看