C#. Сохранение параметров приложения
Много статей посвящено удобству пользовательского интерфейса. И расположение компонентов, и цвета – оказывается, все имеет значение. Также зачастую возникает необходимость сохранить какие-нибудь параметры приложения, например, расположение формы и ее размеры. Для этого уже существует возможность в мире .Net и в данной статье я его рассмотрю. Думаю, это будет полезно для тех, кто изобретает свои велосипеды там, где они не требуются (например, сохранение параметров в реестре).
Для начала требуется зайти в настройки проекта (Проект -> Свойства). На вкладке Параметры таблица, в полях которой и можно настроить наши параметры. Поле таблицы «Имя» предназначено для задания идентификатора параметра (удивительно, правда?
). С полем «Тип» тоже все понятно. Причем для параметров можно задавать самые различные типы - как простой byte, так и такие специфические типы, как Exception. В нашем примере нам требуется четрые параметра типа int. Поле Область указывает на то, где будет располагаться файл с сохраненными параметрами. Если в качестве значения стоит «Пользователь», то файл сохраняется в профиле пользователя. В моем случае полный путь к нему следующий:
C:\Users\user\AppData\Local\Example\SaveParamsExample.vshost._Url_hkimbsrx4btk1hbbv0r23trl354cidvh\1.0.0.0\user.config.
Данный файл используется для хранения пользовательских настроек. Если же в качестве значения установить «Приложение», то параметры будут сохраняться в файле ApplicationName.exe.config в папке приложения, хранить настройки приложения. Причем следует учесть тот факт, что пользователь не может менять данные параметры. Исходя из этого, в примере этому полю у всех строк ставим значение «Пользователь». И последнее поле – «Значение». Без комментариев. Получаем следующее:

Теперь немного кода. Для начала нужно подключить пространство имен с параметрами приложения. В моем случае данная строка выглядит так: using SaveParamsExample.Properties;
Теперь, при загрузке формы напишем для выполнения следующий код:
private void Form1_Load(object sender, EventArgs e)
{
this.Top = Settings.Default.Top;
this.Left = Settings.Default.Left;
this.Height = Settings.Default.Height;
this.Width = Settings.Default.Width;
}
Из данного кода следует, что для доступа к создаваемым нами параметрам используется строка вида Settings.Default.<ИмяПараметра>.
Соответственно, для сохранения новых параметров, делаем наоборот в обработчике события закрытия формы:
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
Settings.Default.Top = this.Top;
Settings.Default.Left = this.Left;
Settings.Default.Height = this.Height;
Settings.Default.Width = this.Width;
Settings.Default.Save();
}
Вот таким простым образом и осуществляется сохранение параметров приложения. Причем полученный конфигурационный файл – это обычный файл XML, в данном случае выглядящий следующим образом:
<?xml version="1.0" encoding="utf-8"?> <configuration> <userSettings> <SaveParamsExample.Properties.Settings> <setting name="Top" serializeAs="String"> <value>237</value> </setting> <setting name="Left" serializeAs="String"> <value>373</value> </setting> <setting name="Height" serializeAs="String"> <value>300</value> </setting> <setting name="Width" serializeAs="String"> <value>400</value> </setting> </SaveParamsExample.Properties.Settings> </userSettings> </configuration>
Written by: wwwnet
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- 8554 просмотра



Комментарии
27 комментария(ев)Дата: Втр, 14/09/2010 - 15:12
Действительно даже легче чем в делфи.
Дата: Втр, 14/09/2010 - 16:49
JvFormStorage, я сомневаюсь что предложенная конструкция легче чем кинуть компонент на форму и указать куда сохранять настройки
Дата: Втр, 14/09/2010 - 16:52
Позвольте узнать, а что это за компонент?
Дата: Втр, 14/09/2010 - 16:57
]]>JVCL]]> бесплатная библиотека компонентов, там столько всего что я даже не успел ещё оценть все возможности
хотя использую её уже почти год
Дата: Втр, 14/09/2010 - 17:01
Не люблю я эти все сторонние компоненты. Потом так через пару лет открываешь исходник, а он уже не грузится. Вот и приходится искать все эти компоненты. А если еще и саму Делфи обновил, то ваще кирдык.
Не. Лучше использовать стандартные компоненты, а все остальное докодивать ручками. Зато всегда откроешь проект и не будет проблем. Кто-то не согласен?
Дата: Втр, 14/09/2010 - 17:07
ну если вам время позволяет то да, у меня его нет
Дата: СР, 15/09/2010 - 08:59
Я бы не сказал, что особо проще, почти также.
В Delphi можно задействовать ini файл для хранения настроек или вообще их в реестр сохранять, и никакие доп. компоненты не нужны..
Дата: СР, 15/09/2010 - 11:59
2Komatoz
Невероятно, но факт - в C# тоже можно сохранять настройки в реестре и инишнике. Но зачем, если есть такой удобный способ? причем также без всяких дополнительных компонент.
Дата: СР, 15/09/2010 - 13:47
да уж, мои понятия об удобстве немного другого толка
Дата: СР, 15/09/2010 - 16:11
Если настройки сохранять в реестре в ветке HKEY_CURRENT_USER, то настройки для каждого пользователя будут свои. А из INI файла настройки считываются одни и те же для любого пользователя.