Как сохранить состояние флажка, текстового поля и ... после закрытия программы на c#
в моей программе C#, которая сделана с Visual Studio 2010 и использует WinForms, я хотел бы, чтобы программа сохраняла состояние некоторых флажков и текстовых полей, чтобы в следующий раз программа была загружена, они проверяются или отключаются как состояние последнего запуска. Тоже самое со строками внутри текстовых полей и т. д...
каким будет правильный способ достичь этого? Есть ли встроенный материал в .NET? Любые советы и фрагменты кода будут appriciated!
спасибо
4 ответов
вы, вероятно, захотите посмотреть на чтение соответствующих значений из вашего пользовательского интерфейса во время события FormClosing, а затем сохранить их в настройках пользователя.
посмотрите на: http://codehill.com/2009/01/saving-user-and-application-settings-in-winforms/
один из способов сделать это-использовать файл конфигурации 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)
}
вы задали очень обширный вопрос. есть два способа взглянуть на это.
1) Если вам нужно сохранить конфигурацию уровня приложения, лучше всего использовать Настройки Приложения. Можно сериализовать настройки программы, сделанные пользователем с помощью приложения, и восстановить их после перезапуска программы. Это работает с WinForms и WPF:
2) Если вам нужна настойчивость на уровне пользователя, вам нужно настройки пользователя.
кроме того, вы можно создать пользовательский класс, реализующий, который хранит все необходимые свойства конфигурации.
реализовать ISerializable и отметить его [Serializable]. Вы можете просто отметить его [Serializable], но если вы добавите новые свойства в будущем, вы столкнетесь с проблемами десериализации.
добавить свойство версию.
добавить два статических метода: Load и Save. Эти методы используют IsolatedStorage для десериализации/сериализации класса конфигурации на диск. Вы можете используйте любой вид сериализации, который вы хотите - я использую binary. Почему не XML? Потому что binary быстрее, и пользователям никогда не нужно попасть в эти файлы. Раньше я делал это для .net 2.0.