Начиная с версии 2.0 .NET Framework позволяет очень легко создавать, сохранять и загружать настройеи приложения. Довольно часто возникает необходимость в сохранении фонового цвета программы, размеров окна, размеров шрифта чтобы при следующем запуске программы, она сама восстанавливала эти настройки.
Давайте рассмотрим, каким образом можно добавить настройки к приложению. Вызовите контектсное меню проекта (рис. 1) и выберите пункт Poperties (Свойства)
- Name определяет имя настройки, используя которое можно обратиться к нужной настройке из программы;
- Type – тип настройки, это может быть число, строка (string), цвет (system.Color);
- Scope определяет степень доступа к настройке во время выполнения программы. Данное свойство может принимать два значения: Application и User. Настройка на уровне приложения является более важной и влияет на работу программы в целом, в то время как настройка на уровне пользователя больше подходит для, например, удобного оформления цветовых схем и не влиляет на работу приложения в целом;
- Value определяет значение, возвращаемое при обращении к настройке. Значение может принимать тип, определенный свойством Type
Имейте в виду, что пользовательские настройки можно изменять во время выполнения программы, то есть их можно считывать и записывать. Программные настройки доступны только для чтения и изменять их можно только при разработке приложения или путем изменения файла настроек вручную.
Давайте создадим настройки, которые будут отвечать за размер окна приложения, фоновый цвет и настройки шрифта. Для этого добавте следующие настройки:
| Name | Type | Scope | Value |
| backgroundColor | System.Drawing.Color | User | Control |
| FormWidth | int | User | 300 |
| FormHeight | int | User | 200 |
| FormFont | System.Drawing.Font | User | Microsoft Sans Serif; 8,25pt |
Должно получиться похожее как на рисунке:

private void Form1_Load(object sender, EventArgs e)
{
//загружаем фоновый цвет
this.BackColor = Properties.Settings.Default.BackgrounColor;
//загружаем шрифт
this.Font = Properties.Settings.Default.FormFont;
//загружаем размеры окна
this.Width = Properties.Settings.Default.FormWidth;
this.Height = Properties.Settings.Default.FormHeight;
}
Сразу, как говорится, не отходя от кассы, подпишемся на обработчик события FormClosing и в нем будем сохранять все настройки при закрытии приложения:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
//запись настроек
Properties.Settings.Default.BackgrounColor = this.BackColor;
Properties.Settings.Default.FormWidth = this.Width;
Properties.Settings.Default.FormHeight = this.Height;
Properties.Settings.Default.FormFont = this.Font;
//сохранение настроек
Properties.Settings.Default.Save();
}
Обратите внимание на строчку
//сохранение настроек Properties.Settings.Default.Save();
Метод Save сохраняет настройку в файле настроек. Без использования этого метода, настройки будут работать только в текущей сессии. Сами настройки хранятся в файле App.config который можно посмотреть в Visual Studio (это обычный XML файл с записанными в нем нашими настройками).
Теперь перейдем к форме Настроек. Здесь мы и будем настраивать все наши параметры.
В обработчике события Load загружаем настройки
private void frmSettings_Load(object sender, EventArgs e)
{
pictureBox1.BackColor = Properties.Settings.Default.BackgrounColor;
font = Properties.Settings.Default.FormFont;
}
В обработчике события кнопки изменения цвета всё просто:
//кнопка Изменить фоновый цвет
private void btnChangeBackgroundColor_Click(object sender, EventArgs e)
{
if (colorDialog1.ShowDialog() == DialogResult.OK)
{
pictureBox1.BackColor = colorDialog1.Color;
}
}
Создадем свойство, с помощью которого будем передавать выбранный цвет в главную форму.
public Color GetColor
{
get { return pictureBox1.BackColor; }
}
С шрифтом аналогичная ситумация.
Font font;
private void btnChangeFont_Click(object sender, EventArgs e)
{
//загружаем текущие настройки шрифта
fontDialog1.Font = Properties.Settings.Default.FormFont;
if (fontDialog1.ShowDialog() == DialogResult.OK)
{
font = fontDialog1.Font;
}
}
Свойство
public Font GetFormFont
{
get { return font; }
}
Осталось только написать код для кнопок ОК и Отмена. Кнопка ОК присваивает значение DialogResult ОК и закрывает форму, а Отмена – просто закрывает форму:
private void btnOk_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.OK;
this.Close();
}
private void btnCancel_Click(object sender, EventArgs e)
{
this.Close();
}
С формой настроек мы закончили. Возвращаемся к главной форме из которой мы будем вызывать окно настроек. Делать мы это будем из обработчика события для пункта меню “Настройки”:
private void mnuSettings_Click(object sender, EventArgs e)
{
//Объявляем екземпляр формы
frmSettings frm = new frmSettings();
//если на форме настроек была нажата кнопка ОК, а не Отмена выполняем следующий код
if (frm.ShowDialog() == DialogResult.OK)
{
//присваиваем значение фонового цвета
this.BackColor = Properties.Settings.Default.BackgrounColor = frm.GetColor;
//присваиваем значение шрифта
this.Font = Properties.Settings.Default.FormFont = frm.GetFormFont;
//сохраняем настройки
Properties.Settings.Default.Save();
}
}
Вот и все. Запустите приложение и попробуйте поизменять размеры формы, цвет и настройки шрифта. При последующем открытии формы все сделанные настройки сохраняются.
[download id=”5″]




Спасибо!
Если ShowColor поставить в true то в fontDialog появиться и выбор цвета шрифта, как его сохранять? Отдельно, или можно в System.Drawing.Font ? Пробовал Microsoft Sans Serif; 8,25pt; Black, ругается.
Вроде сделал все по шагам, как в статье написано. Но форма ведет себя как-то своевольно: размеры не запоминаются, при изменении шрифта иногда одновременно изменяются и размеры. При этом скачанный пример работает нормально.
Если всё сделано правильно, то форма запоминает все размеры.
И еще вопрос. Что это за файл появился после запуска (точнее, после закрытия) приложения: C:\Users\user\AppData\Local\ApplicationSettings\ApplicationSettings.vshos_Url_bfayrgknf0asvwm235hzd50t5lz2s2p3\1.0.0.0\user.config? Ручное редактирование этого файла напрямую влияет на поведение приложения, причем user.config имеет приоритет перед app.config, о котором говорится в статье. Может быть в Visual Studio надо где-то явно указать расположение файла настроек?