1

Я пытаюсь получить настройки моего приложения, чтобы сохранить, когда пользователь выходит из формы конфигурации (а не моей основной формы). Он сохранит настройки в памяти, потому что, когда я снова открою форму, у меня будут данные, которые я все еще настроил, но она не сохранит их на диск. Это путь к файлу, который сохраняет файл 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; 
     } 
    } 
} 

My 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() в этом пользовательском подклассе самостоятельно.

См. Также How to: Create Application Settings на MSDN.

+0

Итак, я назвал метод save(), как вы предлагали на моем подклассе DeviceConfig, и сохранил мои настройки в моем пользовательском файле конфигурации. Но вместо того, чтобы сохранять его в пределах значения DeviceConfig, он создал две новые настройки с именем MasterDevices и SlaveDevices. Мне интересно, как сохранить настройки MasterDevices и SlaveDevices в настройках DeviceConfig. – Jondkess

+0

Я не совсем уверен, что вы ожидали. XML, который вы показываете в своем вопросе, показывает элемент «DeviceConfig» в объекте «Настройки». Для сохранения данных этот способ потребует фактического свойства «DeviceConfig» в объекте «Настройки», потому что именно так появляются эти элементы. Зачем нужен отдельный подкласс ApplicationSettingsBase, если вы хотите, чтобы ваши конфигурации сохранялись в элементе «Настройки»? Почему бы просто не добавить их в основной объект «Настройки» в качестве новых свойств? –

+0

Ну, это то, что я хотел бы сделать, но объект установки запрашивает значение, и я не знаю, как указать экземпляр класса как значения. Можно ли указать экземпляр класса как значение в настройках settings.settings? – Jondkess

Смежные вопросы