1

我想让我的应用程序设置保存,当用户退出配置表单(不是我的mainform)。它会将设置保留在内存中,因为当我再次打开表单时,它会将我配置的数据保留在那里,但不会将其保存到磁盘。这是它将xml文件保存到的文件路径保存用户作用域设置(ApplicationSettingsBase)

C:\ Users \ david_000 \ AppData \ Local [公司名称] [项目名称] \ 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> 

任何意见,将不胜感激。

回答

2

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

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

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

如果您想保存一个单独的类DeviceConfiguration(因为您似乎在您发布的代码中),则需要明确处理。只需要一个ApplicationSettingsBase的子类的实例就不会这样做。您需要自己调用该自定义子类上的Save()方法。

另请参阅MSDN上的How to: Create Application Settings

+0

所以我调用save()方法,就像你在我的DeviceConfig子类中所建议的那样,并且将我的设置保存到我的用户配置文件中。但不是将其保存在DeviceConfig值中,而是创建了两个名为MasterDevices和SlaveDevices的新设置。我想知道如何在我的DeviceConfig设置中保存MasterDevices和SlaveDevices设置。 – Jondkess

+0

我不确定你会发生什么。您在问题中显示的XML在“设置”对象中显示“DeviceConfig”元素。以这种方式保存数据将需要Settings对象中的实际“DeviceConfig”属性,因为这就是这些元素的显示方式。为什么要有一个单独的'ApplicationSettingsBase'子类,如果你希望你的配置保存在“Settings”元素下?为什么不把这些添加到主“设置”对象作为新属性? –

+0

那么这是我想要做的,但设置对象要求一个值,我不知道如何给一个类的实例作为一个值。是否可以在settings.settings中将类的实例作为值? – Jondkess