繁体   English   中英

保存用户范围的设置(ApplicationSettingsBase)

[英]Saving user scoped settings (ApplicationSettingsBase)

我试图让我的应用程序设置在用户退出配置表单(而不是我的主表单)时保存。 它将设置保留在内存中,因为当我再次打开该窗体时,它将保留我配置的数据,但是不会将其保存到磁盘。 这是将xml文件保存到的文件路径

C:\\ Users \\ david_000 \\ AppData \\ Local [公司名称] [项目名称] \\ 1.0.0.0。

我在实现ApplicationSettingsBase文件的类中使用[UserScopedSetting()],因此在调用时应保存该文件,

Properties.Settings.Default.Save(); 

这是我使用ApplicationSettingsBase的课程

public class DeviceConfiguration : ApplicationSettingsBase
{
    /// <summary>
    /// Initializes a new instance of the <see cref="DeviceConfiguration"/> class.
    /// </summary>
    public DeviceConfiguration()
        : base()
    {
        this.MasterDevices = new BindingList<Device>();
        this.SlaveDevices = new BindingList<Device>();
    }

    [UserScopedSetting()]
    [SettingsSerializeAs(System.Configuration.SettingsSerializeAs.Xml)]
    public BindingList<Device> MasterDevices
    {
        get
        {
            return this["MasterDevices"] as BindingList<Device>;
        }

        set
        {
            this["MasterDevices"] = value;
        }
    }

    [UserScopedSetting()]
    [SettingsSerializeAs(System.Configuration.SettingsSerializeAs.Xml)]
    public BindingList<Device> SlaveDevices
    {
        get
        {
            return this["SlaveDevices"] as BindingList<Device>;
        }

        set
        {
            this["SlaveDevices"] = value;
        }
    }
}

我的BindingList包含多个属性,并且该类正在使用[Serializable]属性。 但是,当我保存xml文件时,它保存的只是:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <userSettings>
        <[company.project].Properties.Settings>
            <setting name="IpAddressBESS" serializeAs="String">
                <value>192.168.3.254</value>
            </setting>
            <setting name="PortBESS" serializeAs="String">
                <value>504</value>
            </setting>
            <setting name="IpAddressInverter" serializeAs="String">
                <value>192.168.3.200</value>
            </setting>
            <setting name="PortInverter" serializeAs="String">
                <value>502</value>
            </setting>
            <setting name="StartDate" serializeAs="String">
                <value>04/08/2015 08:00:00</value>
            </setting>
            <setting name="EndDate" serializeAs="String">
                <value>04/08/2015 16:00:00</value>
            </setting>
            <setting name="DeviceConfig" serializeAs="Xml">
                <value />
            </setting>
        </[company.project].Properties.Settings>
    </userSettings>
</configuration>

任何对此的建议将不胜感激。

没有可靠,可靠地重现问题的良好, 简短完整的代码示例,就不可能确定问题出在哪里。

但是,根据您发布的内容,似乎您可能会误解了设置设计器和自定义ApplicationSettingsBase类之间的关系。

特别是, Properties.Settings.Default通常将返回由Designer创建的名为Settings类的实例。 调用Properties.Settings.Default.Save(); 将仅保存该对象中的值,而不保存其他类中的值。

如果您有要保存的单独的类DeviceConfiguration (如发布的代码中所示),则需要显式处理。 仅拥有ApplicationSettingsBase子类的实例将无法实现。 您需要自己在该自定义子类上调用Save()方法。

另请参见如何:在MSDN上创建应用程序设置

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM