#c# #winforms #checkbox #state #application-settings
#c# #winforms #флажок #состояние #приложение-настройки
Вопрос:
В моей программе на C #, созданной с Visual Studio 2010 и использующей WinForms, я бы хотел, чтобы программа сохраняла состояние некоторых флажков и текстовых полей, чтобы при следующей загрузке программы они были отмечены или сняты как состояние их последнего запуска. Также то же самое со строками внутри текстовых полей и т.д…
Каков будет правильный способ добиться этого? Есть ли встроенный материал в .NET? Любые советы и фрагменты кода будут оценены!
Спасибо
Ответ №1:
Вы, вероятно, захотите посмотреть на чтение соответствующих значений из вашего пользовательского интерфейса во время события FormClosing, а затем сохранить их в пользовательских настройках.
Взгляните на: http://codehill.com/2009/01/saving-user-and-application-settings-in-winforms /
Ответ №2:
Я бы привязал значение к пользовательским настройкам и сохранил конфигурацию при событии Close.
Ответ №3:
Один из способов сделать это — использовать файл конфигурации XML и сериализовать его:
ConfigManager.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
namespace MyApplication
{ [ Serializable() ]
public class ConfigManager
{
private int removeDays = 7;
public ConfigManager() { }
public int RemoveDays
{
get
{
return removeDays;
}
set
{
removeDays = value;
}
}
}
где-нибудь в вашем приложении
private ConfigManager cm;
private XmlSerializer ser;
…
Затем вам нужно загрузить конфигурацию:
private void LoadConfig()
{
try
{
cm = new ConfigManager();
ser = new XmlSerializer(typeof(ConfigManager));
filepath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) cm.filepath;
if (File.Exists(filepath))
{
FileStream fs = new FileStream(filepath, FileMode.Open);
cm = (ConfigManager)ser.Deserialize(fs);
// do something
}
} catch (Exception ex) { }
}
Чтобы сохранить его:
XmlSerializer ser;
ConfigManager cm;
...
private void saveConfig()
{
try {
cm.RemoveDays = 6;
TextWriter tw = new StreamWriter(filepath, false);
ser.Serialize(tw, cm);
tw.Close();
} catch (Exception ex)
}
Ответ №4:
Вы задали очень широкий вопрос. есть два способа взглянуть на это.
1) Если вам необходимо сохранить конфигурацию на уровне приложения, лучше всего использовать Настройки приложения. Можно сериализовать настройки программы, выполненные пользователем с помощью вашего приложения, и восстановить их после перезапуска программы. Это работает с WinForms и WPF:
2) Если вам нужна сохраняемость на уровне пользователя, вам нужны пользовательские настройки.
Кроме того, вы можете создать пользовательский класс, который реализует, который хранит все необходимые вам свойства конфигурации.
Реализуйте ISerializable и отметьте его [Serializable]. Вы могли бы просто пометить его [Serializable], но если вы добавите новые свойства в будущем, вы столкнетесь с проблемами десериализации.
Добавьте свойство Version.
Добавьте два статических метода: загрузить и сохранить. Эти методы используют IsolatedStorage для десериализации / сериализации вашего класса конфигурации на диск. Вы можете использовать любой вид сериализации, который вы хотите — я использую двоичный. Почему не XML? Потому что двоичный файл быстрее, и пользователям никогда не нужно обращаться к этим файлам. Раньше я делал это для .net 2.0.
Комментарии:
1. Я постоянно добавляю новые свойства в свой класс конфигурации и не испытываю никаких проблем с десериализацией.
2. Спасибо, используются ли эти настройки, выполненные с помощью настроек приложения, которые будут сохраняться на компьютере, на котором программа установлена каждый раз?
3. @Sean87: Asp.net делает это с помощью класса SettingBase и другой терминологии ASP.NET Профилировщик. msdn.microsoft.com/en-us/library/2y3fs9xs.aspx . Он сохраняет то, где находится приложение, а также в базе данных с пользовательским поставщиком, таким как SqlProfileProvider: msdn.microsoft.com/en-us/library/0580x1f5.aspx
4. Ну, то, что я делаю, это просто настольная программа, а не ASP, так как бы это было в моем случае?
5. тот же компьютер, на котором находится исполняемый файл, и SqlProfileProvider является общим для Windows или веб-приложения. в вашем случае это просто.