Лекция № 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. Какие привязать к параметрам размер и положение формы на экране?