Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在运行时添加用户设置属性(Winforms)_C#_Winforms_.net 2.0_Settings.settings - Fatal编程技术网

C# 在运行时添加用户设置属性(Winforms)

C# 在运行时添加用户设置属性(Winforms),c#,winforms,.net-2.0,settings.settings,C#,Winforms,.net 2.0,Settings.settings,我正在使用C#、win forms和.NET2.0 我试图在运行时在用户设置文件中添加属性,但无法在某些位置的settings.settings文件中查看添加的属性,即文件存在但未添加属性 当我调用此属性时,不会出现错误,因为它可以正常工作 使用下面的代码 MessageBox.Show(***********.Properties.Settings.Default.Properties["NewProperty"].DefaultValue); 我已经编写了以下代码 调用函数 clCommo

我正在使用C#、win forms和.NET2.0

我试图在运行时在用户设置文件中添加属性,但无法在某些位置的settings.settings文件中查看添加的属性,即文件存在但未添加属性

当我调用此属性时,不会出现错误,因为它可以正常工作 使用下面的代码

MessageBox.Show(***********.Properties.Settings.Default.Properties["NewProperty"].DefaultValue);
我已经编写了以下代码 调用函数

clCommonFuncation cl = new clCommonFuncation();
        if (***********.Properties.Settings.Default.Properties["NewProperty"] == null)
        {
            cl.addPropertyinSettingsFile("NewProperty",
            ***********.Properties.Settings.Default.Providers,
            ***********.Properties.Settings.Default.Providers["LocalFileSettingsProvider"],
            ***********.Properties.Settings.Default.Properties,
            typeof(string),"ASD",null);
            ***********.Properties.Settings.Default.Save();
            ***********.Properties.Settings.Default.Reload();
        }
这就是所谓的行动

 public void addPropertyinSettingsFile(string settingName,
        SettingsProviderCollection settingsProviderCollection,
        SettingsProvider settingsProvider,
        SettingsPropertyCollection settingPrpertyCollection,
        Type dataType,
        object defaultValue,
        object settingDefault)
    {
        SettingsProperty lvSettingProperty = new SettingsProperty(settingName);
        lvSettingProperty.DefaultValue = defaultValue;
        lvSettingProperty.IsReadOnly = false;
        lvSettingProperty.PropertyType = dataType;
        lvSettingProperty.Provider = settingsProvider;
        lvSettingProperty.SerializeAs = SettingsSerializeAs.String;
        lvSettingProperty.Name = settingName;
        lvSettingProperty.Attributes.Add(typeof(System.Configuration.UserScopedSettingAttribute),
            new System.Configuration.UserScopedSettingAttribute());
        settingPrpertyCollection.Add(lvSettingProperty);            
    }
我做错了什么? 如有任何建议,将不胜感激
谢谢你

我认为你最好用你的应用程序设置编写一个自定义的
结构
,并使用序列化来加载和保存它-这在你的情况下更加清晰和相关。

你不能在运行时在.Net设置文件中添加或删除属性。网络上有一些技巧,但没有一个是适用的,也没有一个是你想要的解决方案

设置文件并非为此目的而设计的。这些文件被设计为在设计时填充,并且在运行时只能“读取”或“修改”

原因是,当您在designer中创建和编辑设置文件时(通过双击解决方案资源管理器中的设置文件或选择“项目属性”菜单项中的“设置”选项卡),Visual studio将创建一个ApplicationSettings类(派生自ApplicationSettings基类)其中包含您创建的任何设置字段的数据成员以及一些附加属性(如[ApplicationScopedSetting]或[UserScopedSettings])。在运行时,.Net运行时使用此类与seetings文件交互。因此,当您尝试在运行时添加属性时,ApplicationSettings类中没有支持文件和属性,CLR不知道如何处理它们

结论:设置文件具有特定用途,不适合应用程序中的任何任意配置持久化。尝试使用完全支持您所需内容的XML文件,从读取、写入、添加、删除、更新基本类型属性(string、char、int等),到使用XML.serilization支持复杂对象