引言

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

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

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

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

基本使用方法

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

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

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

这样就设置好了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();

}

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

运行抓图:

复杂数据类型支持情况

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

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

读写复杂数据类型

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

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

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

高亮部分为新增的代码。

多次运行以测试:

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

“用户”和“应用程序”

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

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

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

用户=可读写

应用程序=只读

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

数据被存在哪里?

你可能会发现编译后在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),这是其描述的配置信息:

结语

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

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

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

注意:此博客已停止更新,并迁移至blog.SkyDev.cc,后续都将在新地址更新。 
 
 
转载:http://www.cnblogs.com/SkyD/archive/2009/09/14/1566048.html
 

C# Setting.settings . 用法 2 使用配置文件(.settings、.config)存储应用程序配置的更多相关文章

  1. 使用配置文件(.settings、.config)存储应用程序配置

    原文:使用配置文件(.settings..config)存储应用程序配置 引言 我不知大家早先是如何保存应用程序配置,以备下次打开时使用的,反正我开始学.Net的时候就去研究序列化,以二进制或XML格 ...

  2. C# XML配置文件读写类(用于程序配置保存)

    调用方式 //初始化并指定文件路径 XmlConfigUtil util = new XmlConfigUtil("C:\\1.xml"); //写入要保存的值以及路径(Syste ...

  3. 微信小游戏 项目配置文件 project.config.json

    一.项目配置文件project.config.json 小程序开发者工具在每个项目的根目录都会生成一个 project.config.json,在工具上做的任何配置都会写入到这个文件,当重新安装工具或 ...

  4. C# Setting.settings . 用法

    1.定义 在Settings.settings文件中定义配置字段.把作用范围定义为:User则运行时可更改,Applicatiion则运行时不可更改.可以使用数据网格视图,很方便: 2.读取配置值 t ...

  5. c#配置文件app.config 与 Settings.settings

    本篇博客将介绍C#中Settings的使用.参考:https://docs.microsoft.com/zh-cn/visualstudio/ide/managing-application-sett ...

  6. Maven2的配置文件settings.xml(转)

    当Maven运行过程中的各种配置,例如pom.xml,不想绑定到一个固定的project或者要分配给用户时,我们使用settings.xml中的settings元素来确定这些配置.这包含了本地仓库位置 ...

  7. Maven2的配置文件settings.xml(转)

    http://maven.apache.org/settings.html简介: 概览当Maven运行过程中的各种配置,例如pom.xml,不想绑定到一个固定的project或者要分配给用户时,我们使 ...

  8. Maven2的配置文件settings.xml

    简介: 概览 当Maven运行过程中的各种配置,例如pom.xml,不想绑定到一个固定的project或者要分配给用户时,我们使用settings.xml中的settings元素来确定这些配置.这包含 ...

  9. Django 配置文件settings注解(含静态文件和上传文件配置)

    基于Django1.11配置文件settings.py import os import sys # Build paths inside the project like this: os.path ...

随机推荐

  1. element-ui 中 switch 开关绑定number 的解决方法

    虽然element-ui 的文档中说明 v-model的值可以是 boolean / string / number 三种类型 , (文档在此)https://element.eleme.cn/#/z ...

  2. js的小练习

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  3. vue学习【番外篇】vue-cli脚手架的安装

    大家好,我是一叶,今天和大家分享的是vue-cli脚手架的安装,关于vue-cli的优点,我就不赘述了. 一.检查安装node 安装vue-cli之前,先检查node是否安装.win+R,输入cmd打 ...

  4. window常见事件onload

    1, window.onload 是窗口(页面)加载事件,当文档内容完全加载完成会触发该事件(包括图像,脚本文件,css文件等),就调用的处理函数 下面的代码,当点击按钮,并不会弹出对话框,因为页面还 ...

  5. SAP发布wbservice,如果有权限管控的话,需要给这个webservice加权限

    1. PFCG床架角色 2.在角色菜单上,添加其他,选中Authorization Default Values for Services 如下图 3.选中发布的webservice 后保存,如下图: ...

  6. initdb - 创建一个新的 PostgreSQL数据库集群

    SYNOPSIS initdb [ option...] --pgdata | -D directory DESCRIPTION 描述 initdb 创建一个新的 PostgreSQL 数据库集群. ...

  7. [转载](转)ISE中ROM初始化文件(.coe)的建立

    原文地址:(转)ISE中ROM初始化文件(.coe)的建立作者:老徐 UltraEdit 对于ROM模块,主要是生成相应的.coe文件. 1.在Matlab中生成正余弦波形的浮点值,并量化为16bit ...

  8. Django学习系列8:django测试客户端

    """向浏览器返回真正的HTML响应,添加一个新的测试方法""" from django.test import TestCase from ...

  9. Java并发编程实战 第6章 任务并行 第7章 取消与关闭

    ExecutorCompletionService CompletionService用来接收一个Executor的执行结果,将已经完成任务,放置在可使用 take 访问的队列上. 大概用法: Exe ...

  10. Keras class_weight和sample_weight用法

    搬运: https://stackoverflow.com/questions/57610804/when-is-the-timing-to-use-sample-weights-in-keras i ...