关于C#winform端Settings.settings的见解

本文详细介绍了C#中Settings.settings的使用方法,包括设置属性、用户和应用程序范围的区别以及如何保存和读取配置。同时,探讨了ConfigurationManager在修改app.config中的配置节点的应用,提供了一个实用的AppConfigUtil类来读写配置文件。
摘要由CSDN通过智能技术生成

1.说明

由于最近工作比较忙很长时间没有写文章了,最近在项目中使用Settings.settings时遇见了一些问题,故作记录,希望各位大神指点。

2.Settings.settings说明

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Settings.settings结构如上图,在Settings.settings中添加节点时Settings.Designer.cs自动生成该节点的属性,App.config自动生成节点信息。

3.使用方式介绍

private void button1_Click(object sender, EventArgs e)
{
    RefreshLabel();
}


private void RefreshLabel()
{
    label1.Text = "UserSave:" + Settings.Default.UserSave;
    label2.Text = "User:" + Settings.Default.User;
    label3.Text = "Application:" + Settings.Default.Application;
    Settings.Default.UserSave = "2";
    Settings.Default.User = "2";
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    Settings.Default.Save();
}

4.属性介绍

名称:自定义节点名称,使用 Settings.Default.名称 获取或修改该节点的值

类型:设置节点的类型,获取或修改该节点的值必须使用相同的数据类型;

范围:包含用户和应用程序(后续单独说明);

值:可设置初始值;

5.属性-范围

范围包含了用户和应用程序

(1)用户节点

1.允许修改节点值;
2.修改节点的值仅在程序本次运行时生效,下次运行需要使用程序的默认值则不能调用
	Settings.Default.Save();

3.修改节点的值需要在程序下次运行使用必须调用
	Settings.Default.Save();

Settings.Default.Save(); 介绍

1.如果节点设置为用户,并且调用了Save()方法,会在C:\Users\Administrator\AppData\Local\项目名称\对应版本\1.0.0.0\user.config的文件中存储修改后的节点的值;
项目名称:当前运行的项目的名称
对应版本:共四种,包含:开发环境中启动的Debug、Release以及在Debug或Release中直接执行程序的.exe(可执行文件);

2.若未调用Save()方法,user.config不会生成或修改;

3.调用Save()方法时,仅保存调用前修改过所有节点的值,调用后修改的值不会改变,修改后节点在exe.config、vshost.exe.config不会显示修改后的值

4.建议在程序退出时,调用Save()方法;若仅需要节点在本次调用修改有效,则不能调用Save(),防止程序出现不可估计的错误;

5.若不仅包含了启动本次修改有效节点,还包含了修改后下次启动仍有效节点,建议在Settings.settings中添加用户节点,但是不能在程序调用Save方法,再配合使用Configuration使用。

(2)应用程序节点

1.节点的值不允许在程序中修改;
2.不会在C:\Users\Administrator\AppData\Local\项目名称\对应版本\1.0.0.0\user.config生成节点;
3.在app.config、exe.config、vshost.exe.config中生成节点

6.Configuration说明

在app.config添加节点,会在exe.config、vshost.exe.config中生成节点;

#region ConfigurationManager使用说明
// 想调用ConfigurationManager必须要先在工程里添加system.configuration程序集的引用
// 在引用点击右键选择添加引用,搜索Config就会找到
#endregion

using System;
using System.Configuration;
using System.Xml;

/******************************************************
* 模块作者: zheng
* 创建时间: 2021/6/27 20:18:15
* 功能描述: 1.用于对Winform端对EXE.config或操作vshost.exe.config文件的读写;
*           2.修改构造函数中初始化对象改变操作对象。
* 使用说明: 1.右击引用,添加System.Configuration;
*           2.使用该类时需要修改命名空间;
*           3.使用前建议向app.config添加节点,节点示例:
*           <appSettings file="">
*             <add key="光源连接端口" value="com1" />
*             <add key="COM1" value="COM1,9600,8,None,1,已启用" />
*           </appSettings>           
*******************************************************/
namespace MicroscaleMeasure.Utils
{
    class AppConfigUtil
    {
        /// <summary>
        /// 管理配置文件对象
        /// </summary>
        private static readonly Configuration MConfig;

        static AppConfigUtil()
        {
            //1.操作vshost.exe.config
            //MConfig = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

            //2.操作exe.config
            var file = System.Windows.Forms.Application.ExecutablePath;
            MConfig = ConfigurationManager.OpenExeConfiguration(file);
        }

        /// <summary>
        /// 获取AppSettings中某一节点值
        /// </summary>
        /// <param name="key">节点名称</param>
        public static string GetConfigValue(string key)
        {
            if (MConfig.AppSettings.Settings[key] != null)
                return MConfig.AppSettings.Settings[key].Value;
            else
                return string.Empty;
        }

        /// <summary>
        /// 修改配置文件,若节点不存在则添加节点
        /// </summary>
        /// <param name="aKey">需要修改的节点名称</param>
        /// <param name="aValue">需要修改的节点的值</param>
        public static void UpdateAppSettings(string aKey, string aValue)
        {
            if (MConfig.AppSettings.Settings[aKey] != null)
                MConfig.AppSettings.Settings[aKey].Value = aValue;// 修改
            else
            {
                var ass = (AppSettingsSection)MConfig.GetSection("appSettings");
                ass.Settings.Add(aKey, aValue);// 添加
            }
            MConfig.Save(ConfigurationSaveMode.Modified);// 保存修改
            ConfigurationManager.RefreshSection("appSettings");// 强制重新载入配置文件的连接配置
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值