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

2023-10-31

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用配置文件(.settings、.config)存储应用程序配置 的相关文章

随机推荐

  • C++ string类

    目录 1 为什么要学习string类 1 1 C语言中的字符串 1 2 两个面试题 暂不做讲解 2 标准库中的string类 2 1 string类 了解 2 2 string类的常用接口说明 注意下面我只讲解最常用的接口 1 string
  • webstorm+小程序相配合来开发小程序

    前言 webstorm可以安装的一个小程序插件 wechat miniprogram plugin 来实现小程序语法的高亮 并识别 rpx 这种小程序专有单位 还可以实现跟开发者工具中一些类似的操作功能 注意事项 1 小程序的根目录下的pr
  • 类对象数组初始化(三种方法)

    参考自 More Effective C 中文版 类对象数组初始化参考自 More Effective C 中文版 类对象数组初始化 如有一个如下类 class EquipmentPiece private int IDNumber pub
  • Python中tkinter库的menu的使用(制作菜单栏)

    import tkinter as tk wd tk Tk wd title 11 wd geometry 300x300 l tk Label wd text bg yellow pack 先载入对象 类似父类 嵌套对象 menubar
  • Nginx四层代理和七层代理的区别

    4层是指传输层的TCP UDP协议 7层是指应用层的HTTP协议 代理原理 4层代理 使用NAT Network Address Translation 技术 即网络地址转换 即请求进来的时候 nginx只修改数据包里面的目标IP 源IP
  • 浅谈密码破译

    关于密码破译 今天见到一篇文章 读来心中甚是激动 特记录在案 目录 密码破译 1 两种方式 2 双重验证系统2FA 3 密码登录的常见方式 3 1 基于 存储密码 的密码登录步骤 3 2 基于 密码散列 的密码登录步骤 4 暴力破解散列 密
  • 【NLP傻瓜式教程】手把手带你CNN文本分类(附代码)

    文章来源于NewBeeNLP 作者kaiyuan 写在前面 本文是对经典论文 Convolutional Neural Networks for Sentence Classification 1 的详细复现 应该是 基于TensorFlo
  • 200与mcgs485实例 smart_西门子Smart触摸屏与S7-200Smart无线PPI通讯实例

    在工业现场往往会用触摸屏来控制现场的PLC工作 若是遇到布线不方便或是工期较短的情况 那么可以采用无线数据交换的方式来完成触摸屏对PLC的RS485无线通讯 1 自由串口协议 2 Modbus协议 3 PPI协议 以下为大家介绍一种使用PP
  • 小结:token放在header中好处,HTTP Header详解(OAuth JWT等)

    1 Token机制相对于Cookie机制又有什么好处及基于JWT的Token认证机制实现 支持跨域访问 Cookie是不允许垮域访问的 这一点对Token机制是不存在的 前提是传输的用户认证信息通过HTTP头传输 引自 http www c
  • git status显示修改了大量文件

    diff git a Android mk b Android mk old mode 100644 new mode 100755 原来是filemode的变化 文件chmod后其文件某些位是改变了的 如果严格的比较原文件和chmod后的
  • Scratch编程入门-画图模块1【认识画图模块积木】

    在少儿编程软件Scratch中 拥有许多的拓展模块 在这些拓展模块里面 画笔模块 无疑是使用最多的模块之一 无论是中国电子学会的图形化编程考级题目还是线上线下的少儿编程比赛以及蓝桥杯甚至白名单的比赛题目中 使用该模块的画图类编程题目都是最重
  • C++ map用法总结

    1 map简介 map是STL的一个关联容器 它提供一对一的hash 第一个可以称为关键字 key 每个关键字只能在map中出现一次 第二个可以称为该关键字的值 value map以模板 泛型 方式实现 可以存储任意类型的数据 包括使用者自
  • 【数据结构】线性表的知识点全面总结

    目录 1 线性表的顺序表示 1 1顺序表的基本概念 1 2顺序表的基本操作 1 2 1插入 1 2 2删除 1 2 3查找 2 线性表的链式表示 2 1单链表 单链表的基本概念 2 1 1基本操作 2 1 1 1单链表的建立 2 1 1 2
  • android前端开发

    android前端开发 简单框架 1 Picasso 高性能图片下载库 在发现中使用 根据需求可以配合RevycleView使用 2 动画Animator 暂时不涉及 涉及到属性 差值器和估值器 3 事件分发机制 分发 拦截 响应 4 St
  • Keepalived + Haproxy实现负载均衡以及调度器的高可用

    Keepalived Haproxy Haproxy 提供高可用性 负载均衡以及基于 TCP 和 HTTP 应用的代理 支持虚拟主机 它是免费 快速并且可靠的一种解决方案 HAProxy 特别适用于那些负载特大的 web 站点 这些站点通常
  • torch.nn.init常用函数总结

    torch nn init中常用的函数 torch nn init uniform torch nn init normal torch nn init constant torch nn init ones torch nn init z
  • awk的BEGIN和END

    你可能对Unix比较熟悉 但你可能对Unix awk很陌生 这一点也不奇怪 的确 与其优秀的功能相比 awk还远没达到它应有的知名度 流程控制语句是任何程序设计语言都不能缺少的部分 任何好的语言都有一些执行流程控制的语句 Unix awk提
  • 详解高耦合低内聚,低耦合高内聚

    什么是高耦合低内聚 低耦合高内聚 耦合 不就是耦合系数高与低吗 就是关联性强不强 内聚 内聚是指是不是具有很强的功能性 一个模块或方法是不是只干一件事 越强的内聚或者高内聚模块应当恰好只做一件事 用面向对象举例 一个对象中有很多方法 每个方
  • 智能家居项目(基于HAL库开发附源码)

    文章目录 前言 需求分析 开发板 STM32F103 MIN 实物图 原理图 CubeMX环境搭建 GPIO设置 中断设置 代码分析 系统时钟配置 GPIO引脚初始化 USART1初始化 USART2初始化 NVIC初始化 功能代码编写 按
  • 使用配置文件(.settings、.config)存储应用程序配置

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