引言

我不知大家早先是如何保存应用程序配置,以备下次打开时使用的,反正我开始学.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无法实现对一些复杂类型及自定义类型的支持,但是在多数情况下,用它来存储程序配置已是绰绰有余了,在够用的前提下,不要重复造轮子啦。

C# 如何使用配置文件保存应用程序里的配置数据的更多相关文章

  1. .NET Core配置文件加载与DI注入配置数据

    .NET Core配置文件 在以前.NET中配置文件都是以App.config / Web.config等XML格式的配置文件,而.NET Core中建议使用以JSON为格式的配置文件,因为使用起来更 ...

  2. [转].NET Core配置文件加载与DI注入配置数据

    本文转自:http://www.cnblogs.com/skig/p/6079187.html .NET Core配置文件 在以前.NET中配置文件都是以App.config / Web.config ...

  3. ASP.NET Core应用程序的参数配置及使用(转载)

    本文结构 提前准备 参数配置方式 appsettings.json 环境变量 命令行参数 在控制器中使用配置参数 注入IConfiguration对象 注入IOptions对象 总结 应用程序的开发不 ...

  4. Java程序运行时,数据都保存到什么地方?

    程序运行时,我们最好对数据保存到什么地方做到心中有数.特别要注意的是内存的分配.有六个地方都可以保存数据: 寄存器 这是最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内部.然而,寄存器 ...

  5. 程序启动读取和关闭时保存应用程序设置(QSettings)

    保存应用程序设置(QSettings)1. QSettings 类 QSettings 提供保存应用程序当前设置的接口,可以方便地保存程序的状态,例如窗口大小和位置,选项的选中状态等等.在 Windo ...

  6. net core 小坑杂记之配置文件读取 02 (控制器里读)

    上次更新博客的时候提到了如何在EF的上下文里读取配置,这次介绍一下在控制器里如何读取. 先说一种简单易懂的: 首先以键值对的形式在appsettings里添加一条配置信息,接着Startup里注入配置 ...

  7. 在微信小程序里使用 watch 和 computed

    在开发 vue 的时候,我们可以使用 watch 和 computed 很方便的检测数据的变化,从而做出相应的改变,但是在小程序里,只能在数据改变时手动触发 this.setData(),那么如何给小 ...

  8. 保存画面为图片 当前MFC保存该程序为图片 c++ vc

    将屏幕保存为图片.使用vs2008编译通过. [cpp] view plaincopy #include "stdafx.h" #include <windows.h> ...

  9. 小程序里实现 watch 和 computed

    小程序里的自定义组件里是有数据监听器的,可以监听对应数据的变化来执行callBack,但是页面Page里没有对应的api就显的很生硬,比如某个数据变了(如切换城市)需要重新刷页面,如果不做监听,每次都 ...

随机推荐

  1. Python基础(数字,字符串方法)

    数字: #二进制转十进制 a=' v=int(a,base=2) print(v) 进制转换 #当前数字的二进制至少有多少位 b=2 v2=b.bit_length() print(v2) 数值二进制 ...

  2. 支持向量机(SVM)之数学公式详细推导

    一.概述 1.含义: 支持向量机(support vector machine,SVM)是一种二类分类器,它的基本模型是定义在特征空间上的间隔最大化的线性分类器,通过引入核函数,也可以作为非线性分类器 ...

  3. ZZCMS v8.2 前台Insert注入+任意文件删除

    前几天看了水泡泡老哥的zzcms的审计,在论坛上一搜发现这个cms有不少洞.听说很适合小白练手,所以来瞅一瞅.不知道我发现的这个洞是不是已经被爆过了,如果雷同,纯属巧合. 一.Insert注入,直接返 ...

  4. 深度链接(DeepLinking)怎样免费实现

    深度链接技术(DeepLinking),一般是通过Web页面调用原生App,并把需要的参数通过Uri的形式传递给App,主要使用方式有:两个App之间的广告.App的社交分享.页面跳转App.DSP广 ...

  5. Mybatis+mysql批量插入性能分析测试

    前言 今天在网上看到一篇文章(后文中的文章指的就是它) https://www.jianshu.com/p/cce617be9f9e 发现了一种有关于mybatis批量插入的新方法,而且看了文章发现我 ...

  6. 【设计模式+原型理解】第三章:javascript五种继承父类方式

    [前言] 我们都知道,面向对象(类)的三大特征:封装.继承.多态 继承:子类继承父类的私有属性和公有方法 封装:把相同的代码写在一个函数中 多态: ->重载:JS严格意义上是没有重载,但可以通过 ...

  7. DS控件库 DS开放式下拉列表

    在一些场合中,需要使用组合式下拉列表控件,比如带treeivew的combobox,但是代码较多,使用不便.为此,本人制作了一个超级易用的DS开放式下拉列表. 以下演示使用过程. Private Su ...

  8. void类型和void* 的用法

    C语言中的void  和 void * 总结 1.void的作用 c语言中,void为“不确定类型”,不可以用void来声明变量.如:void a = 10:如果出现这样语句编译器会报错:variab ...

  9. 基于.net EF6 MVC5+WEB Api 的Web系统框架总结(1)-Web前端页面

    本 Web 系统框架基于C# EF6+MVC+WebApi的快速应用开发平台.本节主要介绍Web前端页面设计与实现.Web前端页面主要分为普通列表页面.树状导航列表页面.普通编辑页面.数据导入页面.向 ...

  10. Easyui datagrid combobox输入框下拉(取消)选值和编辑已选值处理

    datagrid combobox输入框下拉(取消)选值和编辑已选值处理 by:授客 QQ:1033553122 测试环境 jquery-easyui-1.5.3   需求场景 如下,在datagri ...