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

#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 или веб-приложения. в вашем случае это просто.