Как сохранить состояние флажка, текстового поля и ... после закрытия программы на c#

в моей программе C#, которая сделана с Visual Studio 2010 и использует WinForms, я хотел бы, чтобы программа сохраняла состояние некоторых флажков и текстовых полей, чтобы в следующий раз программа была загружена, они проверяются или отключаются как состояние последнего запуска. Тоже самое со строками внутри текстовых полей и т. д...

каким будет правильный способ достичь этого? Есть ли встроенный материал в .NET? Любые советы и фрагменты кода будут appriciated!

спасибо

4 ответов


вы, вероятно, захотите посмотреть на чтение соответствующих значений из вашего пользовательского интерфейса во время события FormClosing, а затем сохранить их в настройках пользователя.

посмотрите на: http://codehill.com/2009/01/saving-user-and-application-settings-in-winforms/


Я бы привязал значение к настройкам пользователя и сохранил событие конфигурации OnClose.


один из способов сделать это-использовать файл конфигурации 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.