Загрузка страницы..
C#, сохранение настроек в XML
Как сохранить настройки программы в C# при помощи XML
2014-05-14T02:05 14 мая 2014 02:05
Просмотров: 7698

Иногда возникает ситуация когда нужно чтоб настройки вашей программы били сохранены (сохранение смены интерфейса, локализации программы, автозагрузка и т.д.) и многие начинающие программисты не знают как это сделать.

Сегодня я Вам расскажу как сохранять настройки в XML файл, а не через стандартные средства C#. Почему через XML? Чтобы программа была переносимой без различного "геморроя".

И так приступим.

1. Для начала нам потребуется создать проект WinForms.

2. Добавим в проект новый класс под именем Props и напишем следующий код:

using System;
//надо добавить для работы класса
using System.Xml.Serialization;
using System.IO;

namespace XMLFileSettings
{
    //Класс определяющий какие настройки есть в программе
    public class PropsFields
    {
        public String XMLFileName = Environment.CurrentDirectory +"\\settings.xml";
        //Чтобы добавить настройку в программу просто добавьте туда строку вида -
        //public ТИП ИМЯ_ПЕРЕМЕННОЙ = значение_переменной_по_умолчанию;
        public String TextValue = @"File Settings";
        public DateTime DateValue = new DateTime(2011, 1, 1);
        public Decimal DecimalValue = 555;
        public Boolean BoolValue = true;
    }
    //Класс работы с настройками
    public class Props
    {
        public PropsFields Fields;

        public Props()
        {
            Fields = new PropsFields();
        }
        //Запись настроек в файл
        public void WriteXml()
        {
            XmlSerializer ser = new XmlSerializer(typeof(PropsFields));

            TextWriter writer = new StreamWriter(Fields.XMLFileName);
            ser.Serialize(writer, Fields);
            writer.Close();
        }
        //Чтение насроек из файла
        public void ReadXml()
        {
            if (File.Exists(Fields.XMLFileName)){
                XmlSerializer ser = newXmlSerializer(typeof(PropsFields));
                TextReader reader = new StreamReader(Fields.XMLFileName);
                Fields = ser.Deserialize(reader) as PropsFields;
                reader.Close();
            }
            else{
                //можно написать вывод сообщения если файла не существует
                }
        }
    }
}

Теперь чтоб использовать класс для сохранения настроек сделаем следующие: 1. Расположим на форме две кнопки (Button) одна для записи настроек, а другая для чтения, один checkBox - автозагрузка приложения и comboBox - так просто:)

2. Пишем код для записи настроек и компонентов

using System;
using System.Windows.Forms;
 
namespace XMLFileSettings
{
    public partial class Form1 : Form
    {
        #region Settings action
        Props props = new Props(); //экземпляр класса с настройками 
        //Запись настроек
        private void writeSetting()
        {
            //Запись значения в ComboBox1
            props.Fields.TextValue = ComboBox1.Text;
            //Запись значения в checkBox1
            props.Fields.BoolValue = checkBox1.Checked;
            props.WriteXml();
        }
        //Чтение настроек
        private void readSetting()
        {
            props.ReadXml();
            ComboBox1.Text = props.Fields.TextValue;
            checkBox1.Checked = props.Fields.BoolValue;
        }
        #endregion
         
        #region Form Action
        public Form1()
        {
            InitializeComponent();
        }
                 
        private void button1_Click(object sender, EventArgs e)
        {
            readSetting();
        }

        private void button2_Click(object sender, EventArgs e) 
        {
            writeSetting(); 
        }
        #endregion
    }
}

Если что то непонятно пишите в комментариях!



Комментарии: 3

комментарий Ольга
Ольга
2018-05-31T19:5331 мая 2018 19:53
Спасибо за Ваш код! Подскажите пожалуйста, можно ли в свойство типа props.Fields... записать (а затем прочитать) объект DataTable (у меня есть datagridview с привязкой к DataTable и хотелось бы вместе с настройками props.Fields.TextValue, props.Fields.BoolValue, аналогично запоминать данные datagridview?
комментарий Модератор
Модератор
2016-11-20T18:0020 нояб. 2016 18:00
Игорь, спасибо, что заметили ошибку. Текст поправлен. Но вот ссылка на проект утеряна.
комментарий Игорь
Игорь
2016-11-20T17:1020 нояб. 2016 17:10
в примере код для записи настроек и компонентов комментарии отображены не правильно ссылка на скаченную готовую сборку не работает

Добавить комментарий

Яндекс.Метрика Яндекс.Метрик