Лекция № 3

Тема: "Параметры проекта в C#"

 

План

1. Работа с параметрами

2. Программирование работы с параметрами

3. Управление параметрами с помощью свойств

 

1. Работа с параметрами

В среде C# существует встроенный механизм работы с параметрами приложения, который не требует написания большого объема кода. Параметры приложения в Windows Forms позволяют легко создавать, хранить и поддерживать настраиваемые приложения и параметры пользователей в клиенте. С помощью параметров приложения можно хранить не только данные приложения, например строки подключений к базам данных, но и пользовательские данные, такие как положение и размер формы, состояние компонентов на форме и т.п.

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

Данные приложения - это параметры общие для всех пользователей(аналог раздела HKEY_LOCAL_MACHINE в реестре Windows). Если один пользователь задаст их значение, то остальные пользователи также увидят эти настройки при запуске программы. Они хранятся в самом исполняемом файле. Данные параметры имеют аттрибут "только чтение" и не могут изменяться. Хотя есть механизм их изменения. Он будет рассмотрен ниже.

Данные пользователя - задают параметры, которые будут применены только к текущему пользователю программы (аналог HKEY_CURENT_USER реестра Windows). Каждый пользователь может настроить внешний вид и поведение приложение "под себя". Эти настройки не будут отображаться для других пользователей. Они хранятся в файле user.config, который находится в папке C:\Пользователь\Имя_пользователя\Local Settings\Папка_приложения

В структуре проекта данные параметров хранятся в файле app.config в виде XML-файла. Приведем его пример:

 

 

Удобнее работать с параметрами с помощью файла проекта Properties\Setting.settings

 

 

При открытии файла Setting.settings Вы откроете окно работы с параметрами проекта. Это же окно можно открыть с помощью команды меню "Проект - Свойства:...", а затем в открывшемся окне перейти на элемент "Параметры" или в контекстном меню проекта выбрать команду "Свойства" и в окне перейти на элемент "Параметры". Окно параметров имеет вид:

 

 

На рисунке видно, что проект имеет один параметр с именем "BazaConnectionString", который имеет тип "Строка подключение" и равен параметрам настройки подключения к БД. В колонке "Область" отображается значение "Приложение". Это означает, что данный тип относится в параметрам приложения, является общим для всех.

В этом окне Вы можете добавить свои параметры. При этом нужно указать произвольное имя параметра без пробелов латинскими буквами, указать подходящий тип данных (int, double, string и т.п.), указать область действия параметра (Приложение или Пользователь), задать для параметра значение по умолчанию (не обязательно).

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

Удаление параметра выполняется выделением сс помощью щелчка на сером поле слева от строки и нажатием клавиши Delete.

Необходимо учитывать, что некоторые типы параметров могут быть только параметрами приложения. Например нельзя указать тип "Строка подключения" и область "Пользователь".

После задания списка параметров не забудьте сохранить изменения с помощью кнопки на панели задач.

 

Например, пусть имеется форма вида:

 

 

Необходимо сохранить следующие параметры:

- форма: длина, ширина, положение X и Y;

- содержимое текстовых полей;

- состояние переключателей radioButton;

- состояние флажка checkBox;

- цвет фона формы.

Результат создания нужных параметров представлен на рисунке:

 

 

Замечание. Использование Параметров приложения имеет одну существенную особенность. Для каждой копии программы автоматически создается отдельная сборка, под которую создается отдельная папка, а в ней файл user.config. Созданная сборка "помнит" путь, откуда запускалась программа.

Если файл программы переместить, то при его запуске будет создана новая сборка, а все параметры будут утеряны, так как создается новая папка сборки и новый файл user.config. Если файл программы вернуть на прежнее мето, то параметры восстановятся.

Запомните, при переносе программы ее параметры не переносятся. Если нужно хранить параметры в независимости от расположения исполняемого файла, используйте INI файлы или реестр Windows.

 

2. Программирование работы с параметрами

 

Для обращения к нужному параметру используется запись вида:

 

Settings.Properties.Default.Имя_параметра

 

или

 

Settings.Properties.Default["Имя_параметра"]

 

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

Например, для нашего примера:

 

Settings.Properties.Default.ConnectionString="111"; //не сработает, только для чтения

Settings.Properties.Default["ConnectionString"]="111"; //сработает

 

После задания всех параметров их нужно сохранить с помощью метода вида:

 

Properties.Settings.Default.Save();

 

Пример. При закрытии формы будем сохранять в наши параметры состояние формы и ее компонентов. В событии FormClosed формы напишем код:

 

 private void Form1_FormClosed(object sender, FormClosedEventArgs e)

{

    //записываем параметры формы

    Properties.Settings.Default.formWidth = Width;

    Properties.Settings.Default.formHeight = Height;

    Properties.Settings.Default.formX = Left;

    Properties.Settings.Default.formY = Top;

    Properties.Settings.Default.formBackColor = BackColor;

    //записываем параметры компонентов

    Properties.Settings.Default.textBox1 = textBox1.Text;

    Properties.Settings.Default.textBox2 = textBox2.Text;

    Properties.Settings.Default.textBox3 = textBox3.Text;

    Properties.Settings.Default.checkBox = checkBox1.Checked;

    Properties.Settings.Default.radioButton1 = radioButton1.Checked;

    Properties.Settings.Default.radioButton2 = radioButton2.Checked;

    //сохраняем значения параметров в файл   

    Properties.Settings.Default.Save();

}

 

При открытии формы сохраненные данные нужно восстанавливать. В событии Load формы напишем код:

 

private void Form1_Load(object sender, EventArgs e)

{

    //восстанавливаем параметры формы

    Width = Properties.Settings.Default.formWidth;

    Height = Properties.Settings.Default.formHeight;

    Left=Properties.Settings.Default.formX;

    Top=Properties.Settings.Default.formY;

    BackColor=Properties.Settings.Default.formBackColor;

    //восстанавливаем параметры компонентов

    textBox1.Text=Properties.Settings.Default.textBox1;

    textBox2.Text=Properties.Settings.Default.textBox2;

    textBox3.Text=Properties.Settings.Default.textBox3;

    checkBox1.Checked=Properties.Settings.Default.checkBox;

    radioButton1.Checked=Properties.Settings.Default.radioButton1;

    radioButton2.Checked=Properties.Settings.Default.radioButton2;

}

3. Управление параметрами с помощью свойств

Рассмотренный пример по объему кода немного уступает стандартным способам сохранения параметров: с помощью INI файлов и с помощью реестра Windows. Если параметров будет много, то работа для разработчика будет сложной: вначале создать параметры, затем сохранить их или восстановить. И все нужно писать вручную.

На самом деле пример был приведен для лучшего понимания принципа работы с параметрами приложения, но на практике работа с ними намного проще.

После создания параметров Вы с помощью специальных свойств привязываете их к нужным свойствам компонентов. И все. Вам нужно будет только сохранить параметры командой:

 

Properties.Settings.Default.Save();

 

Привязка параметров к свойствам компонентов

Практически каждый компонент имеет свойство ApplicationSettings. Его наличие говорит о том, что компонент может быть связан с параметром и сохранен/восстановлен.

Если в списке отображается свойство, которое нужно сохранить, то откройте его и выберите имя нужного параметра.

Если в списке не отображается свойство, которое нужно сохранить, то откройте свойство PropertyBinding, в окне найдите нужное свойство и напротив него в списке выберите имя нужного параметра.

 

Пример. Привяжем параметр textBox1 к свойству textBox1.Text.

Выделим текстовое поле textBox1 и откроем его свойство ApplicationSettings.

 

 

Как видно на рисунке, никаких свойств внутри нет. Значит открываем свойство PropertyBinding.

 

 

В новом окне находим свойство Text и справа от него в списке выбираем параметр textBox1.

 

Пример. Привяжем параметр checkBox к свойству checkBox1.Checked.

Выделите флажок и откройте свойство ApplicationSettings.

 

 

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

Остальные параметры привязываются к свойствам нужных компонентов аналогично.

 

Замечание: обратите внимание, что положение формы задается с помощью составного свойства Location (включает в себя Left и Top), а для сохранения положения формы свойство ClientSize (включает в себя Width и Height).

При создании параметров для этих свойств нужно учитывать следующее

- для Location создавайте параметр с типом System.Draw.Point;

- для ClientSize создавайте параметр с типом System.Draw.Size.

 

 

После привязки все параметров в нужном событии просто пишите команду сохранения параметров. В нашем примере в событии FormClosed достаточно написать код:

 

private void Form1_FormClosed(object sender, FormClosedEventArgs e)

{

    //сохраняем значения параметров в файл   

    Properties.Settings.Default.Save();

}

 

В событии формы Load ничего писать не нужно. Привязанные параметры считываются в соответствующие свойства автоматически.

Вот теперь Вы можете полностью оценить преимущества использования параметров приложения в C#.

 

Вопросы для самоконтроля

1. Какие типы параметров приложения в C# существуют? В чем их особенности и где они хранятся?

2. Как создать, изменить или удалить параметры приложения в C#?

3. Как обратиться к параметру приложения и к параметру пользователя для записи? Как сохранить параметры?

4. Как привязать параметры с свойствам компонентов в режиме проектирования формы?

5. Какие привязать к параметрам размер и положение формы на экране?