保存用户范围设置(ApplicationSettingsBase)(Saving user scop

2019-10-23 11:10发布

我试图让我的应用程序设置,当用户退出的配置形式(不是我的MainForm)保存。 它会在内存中保存设置,因为当我再次打开表单,这将有我的数据,我配置仍然存在,但不会将其保存到磁盘。 这是它是XML文件保存到文件路径

C:\ Users \用户david_000 \应用程序数据\本地[公司名称] [项目名称] \ 1.0.0.0。

我使用[UserScopedSetting()]在我的类,它实现了ApplicationSettingsBase文件,因此它应该保存,当我打电话,

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>

在这个任何意见,将不胜感激。

Answer 1:

如果没有一个良好的, 最小的完整的代码,可靠地再现问题例子,这是不可能肯定地说是什么问题。

然而,根据你贴什么,看来你可能误解设置设计和定制之间的关系ApplicationSettingsBase类。

特别是, Properties.Settings.Default通常会返回一个设计师创建的类命名的实例Settings 。 调用Properties.Settings.Default.Save(); 将仅保存在该对象的值,而不是那些在其它的类。

如果你有一个单独的类DeviceConfiguration要保存(如你似乎在您发布的代码),你需要处理明确。 只要有一个子类的实例ApplicationSettingsBase不会去做。 你需要调用Save()上的自定义子类自己的方法。

另请参阅如何创建应用程序设置上MSDN。



文章来源: Saving user scoped settings (ApplicationSettingsBase)