关于.net:在C#中读取默认应用程序设置

关于.net:在C#中读取默认应用程序设置

Reading default application settings in C#

我有自定义网格控件的许多应用程序设置(在用户范围内)。 其中大多数是颜色设置。 我有一个表单,用户可以自定义这些颜色,我想添加一个按钮,以恢复默认颜色设置。 如何阅读默认设置?

例如:

  • 我在Properties.Settings中有一个名为CellBackgroundColor的用户设置。
  • 在设计时,我使用IDE将CellBackgroundColor的值设置为Color.White
  • 用户在我的程序中将CellBackgroundColor设置为Color.Black
  • 我用Properties.Settings.Default.Save()保存设置。
  • 用户单击Restore Default Colors按钮。
  • 现在,Properties.Settings.Default.CellBackgroundColor返回Color.Black。 我该如何回到Color.White


    @ozgur,

    1
    Settings.Default.Properties["property"].DefaultValue // initial value from config file

    例:

    1
    2
    3
    4
    5
    string foo = Settings.Default.Foo; // Foo ="Foo" by default
    Settings.Default.Foo ="Boo";
    Settings.Default.Save();
    string modifiedValue = Settings.Default.Foo; // modifiedValue ="Boo"
    string originalValue = Settings.Default.Properties["Foo"].DefaultValue as string; // originalValue ="Foo"

    阅读"Windows 2.0 Forms Programming",我偶然发现了这两种在这种情况下可能有用的有用方法:

    ApplicationSettingsBase.Reload

    ApplicationSettingsBase.Reset

    来自MSDN:

    Reload contrasts with Reset in that
    the former will load the last set of
    saved application settings values,
    whereas the latter will load the saved
    default values.

    所以用法是:

    1
    2
    Properties.Settings.Default.Reset()
    Properties.Settings.Default.Reload()


    我不确定这是否必要,必须有一个更简洁的方式,否则希望有人发现这有用;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    public static class SettingsPropertyCollectionExtensions
    {
        public static T GetDefault< T >(this SettingsPropertyCollection me, string property)
        {
            string val_string = (string)Settings.Default.Properties[property].DefaultValue;

            return (T)Convert.ChangeType(val_string, typeof(T));
        }
    }

    用法;

    1
    var setting = Settings.Default.Properties.GetDefault<double>("MySetting");

    Properties.Settings.Default.Reset()会将所有设置重置为原始值。


    我通过设置2组来解决这个问题。我使用Visual Studio默认为当前设置添加的那个,即Properties.Settings.Default。但我还在项目"项目 - >添加新项目 - >常规 - >设置文件"中添加了另一个设置文件,并将实际的默认值存储在那里,即Properties.DefaultSettings.Default

    然后我确保我从不写Properties.DefaultSettings.Default设置,只是从中读取。将所有内容更改回默认值只是将当前值设置回默认值的情况。


    我发现调用ApplicationSettingsBase.Reset会将设置重置为默认值,但同时也会保存它们。

    我想要的行为是将它们重置为默认值但不保存它们(这样如果用户不喜欢默认值,那么在保存之前它们可以将它们还原)。

    我写了一个适合我的目的的扩展方法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    using System;
    using System.Configuration;

    namespace YourApplication.Extensions
    {
        public static class ExtensionsApplicationSettingsBase
        {
            public static void LoadDefaults(this ApplicationSettingsBase that)
            {
                foreach (SettingsProperty settingsProperty in that.Properties)
                {
                    that[settingsProperty.Name] =
                        Convert.ChangeType(settingsProperty.DefaultValue,
                                           settingsProperty.PropertyType);
                }
            }
        }
    }


    How do I go back to Color.White?

    你可以采取两种方式:

    • 在用户更改之前保存设置的副本。
    • 在应用程序关闭之前,缓存用户修改的设置并将其保存到Properties.Settings。

    推荐阅读

      linux设置路由器命令?

      linux设置路由器命令?,网络,信息,代码,地址,电脑,工作,环境,系统,密码,路由,l

      linux自定义命令行?

      linux自定义命令行?,系统,工作,名称,百度,命令,管理,工具,位置,信息,终端,Lin

      linux命令行设置字体?

      linux命令行设置字体?,系统,工具,终端,软件,电脑,数字,位置,等级,字体,命令,L

      linux配置自定义命令?

      linux配置自定义命令?,服务,系统,状态,策略,周期,地方,标准,新增,环境,工具,L

      linux读取码值命令?

      linux读取码值命令?,系统,工作,地址,证书,命令,工具,档案,文件,设计,信息,基

      linux命令快捷设置?

      linux命令快捷设置?,第一,系统,名称,终端,发行,首页,命令,快捷键,窗口,桌面,l

      linux命令设置扩展屏?

      linux命令设置扩展屏?,工具,系统,电脑,技术,软件,装备,情况,工作,命令,显示

      linux命令设置自启动?

      linux命令设置自启动?,服务,系统,信息,数字,检测,工具,状态,密码,跨行,脚本,l

      自定义命令linux命令?

      自定义命令linux命令?,工具,系统,数据,命令,新增,代理,通信,地方,信息,时间,

      linux设置命令在哪里?

      linux设置命令在哪里?,系统,地址,代码,管理,密码,命令,位置,名字,服务,分行,l

      linux默认命令删除?

      linux默认命令删除?,系统,软件,名称,档案,命令,文件,目录,不了,电脑,文件夹,

      linux自定义简写命令?

      linux自定义简写命令?,系统,工作,命令,标准,地址,基础,信息,软件,目录,文件,

      linux命令简写自定义?

      linux命令简写自定义?,系统,状态,命令,代码,工具,发行,标准,软件,文件,别名,L

      linux命令设置中文?

      linux命令设置中文?,系统,工作,数据,管理,设备,环境,标的,第一,网上,模式,lin

      设置网址命令linux?

      设置网址命令linux?,地址,系统,网络,代码,网址,密码,信息,电脑,管理,基础,lin

      linuxrm命令默认?

      linuxrm命令默认?,系统,命令,档案,工作,文件,目录,名称,文件夹,选项,子目录,l

      linux设置日期命令?

      linux设置日期命令?,时间,系统,标准,命令,信息,大陆,国家,日期,时钟,时区,详

      linux命令默认加后缀?

      linux命令默认加后缀?,系统,文件,密码,通用,设备,命令,目录,后缀,表示,程序,l

      linux设置时钟命令?

      linux设置时钟命令?,时间,系统,服务,图片,命令,网络,信息,风险,国家,大陆,lin