Как сохранить настройки приложения C#

Приветствую всех! Когда наши приложения начинают превращаться в большие проекты, обрастая все большим функционалом. Нам как разработчикам приходится производить сохранения настроек программы, к примеру, цвет, размер, расположения, заполнения форм итд. Для этих целей существует несколько вариантов.

1. База данных, либо текстовые файлы и их аналоги.

2. Реестр.

3. Конфигурационный фаил.

4. Внутри самого приложения.

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

С реестром по сложнее, так как для работы с ним, приложение должно быть запущенно от имени администратора, это не удобно, и не все пользователи обладают такими правами. Однако можно приобрести лицензию в районе 500$ в год, и ваше приложение сможет вносить изменения в реестр без запуска от имени администратора.

А вот последних два варианта мы сейчас и рассмотрим как этом можно сделать.

После компиляции приложения в папки с *.exe у нас находятся не сколько файлов, один из них конфигурационный.

Обычно к имени исполняемого файла с расширением добавляется .config , он и является вашим конфигурационным файлом.

Именно с ним мы можем распространять свое приложения и производить сохранения в него.

Основан он на XML формате и первоначально имеет следующее содержимое:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>
</configuration>

Для этого нам надо будет подключить сборки и добавить ссылки:

using System.Collections.Specialized;
using System.Configuration;

Далее нам нужно в файле конфигурации создать ключи и значения, у меня вот что получилось:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
      
    </startup>
  
  <appSettings>
    <add key="sizeW" value="30"/>
    <add key="sizeH" value="30"/>
  </appSettings>
  
  
</configuration>

Теперь нам нужно написать логику программы, я решил восстанавливать размер консоли тот что находится в конфигурационном файле:

 static void Main(string[] args)
        {
            NameValueCollection allAppSettings = ConfigurationManager.AppSettings;

            int w = int.Parse(allAppSettings["sizeW"]);
            int h = int.Parse(allAppSettings["sizeH"]);
            Console.SetWindowSize(w,h);
            Console.ReadKey();
        }

По сути это лишь удобство которое разработало Microsoft, на самом деле обычная работа с Xml файлом, который хранит в себе соответствующие настройки приложения.

Еще одним интересным способом является сохранения настроек внутри самого приложения:

Для этого создайте приложения и выберите его свойство, в открытом окне перейдите во вкладу параметры и установите как на рисунке:

Здесь мы задали имя переменно, а точнее два имени w и h которые будут означать ширину и высоту консольного окна, далее мы выбрали тип переменно, область и значения в 30 пикселей.

Далее нам необходимо подключить сборку, она состоит из названия приложения и .Properties;

using MyApp.Properties;

Теперь рассмотрим сам код программы:

using System;
using MyApp.Properties;

namespace MyApp
{
    class Program
    {
        static void Main(string[] args)
        {
            int w = (int)Settings.Default["w"]; //считываем значения
            int h =(int)Settings.Default["h"];

            Console.SetWindowSize(w,h);
            Console.WriteLine("w={0} h={1}",w,h);

            Settings.Default["w"]=w+1;
            Settings.Default["h"]=h+1;
            Settings.Default.Save(); //сохраняем новые значения

            Console.ReadKey();
        }
    }
}

Как видно из кода программы работа с настройками совсем не сложная, мы в начале считываем данные с переменных и сохраняем их, после изменяем окно консоли и выводим их значения, далее увеличиваем значения на 1 и производим сохранения настроек.

Теперь попробуйте несколько раз запустить приложения и вы увидите как окно и значения изменяются каждый раз.

 

Обновлено: 22.10.2018 — 11:46

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.