Сохранение пользовательских настроек (ApplicationSettingsBase)
Я пытаюсь сохранить настройки приложения, когда пользователь выходит из формы конфигурации (а не из моей основной формы). Он сохранит настройки в памяти, потому что когда я снова открою форму, мои данные, которые я настроил, будут там еще сохранены, но не сохранятся на диск. Это путь к файлу, в который он сохраняет файл XML
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>
Любой совет по этому вопросу будет принята с благодарностью.
1 ответ
Без хорошего, минимального, полного примера кода, который надежно воспроизводит проблему, невозможно точно сказать, в чем проблема.
Однако, исходя из того, что вы опубликовали, кажется, что вы можете неправильно понять отношения между Дизайнером настроек и вашим пользовательским ApplicationSettingsBase
учебный класс.
Особенно, Properties.Settings.Default
обычно возвращает экземпляр созданного в Designer класса с именем Settings
, призвание Properties.Settings.Default.Save();
сохранит только значения в этом объекте, а не в каком-либо другом классе.
Если у вас есть отдельный класс DeviceConfiguration
что вы хотите сохранить (как вы, кажется, в коде, который вы опубликовали), вы должны обрабатывать это явно. Просто наличие экземпляра подкласса ApplicationSettingsBase
не буду этого делать Вам нужно позвонить Save()
Метод этого пользовательского подкласса самостоятельно.
См. Также Как создать настройки приложения в MSDN.