Сохранение настроек приложения. XML-сериализация
При работе с приложением часто возникает необходимость сохранения пользовательских настроек. Одним из способов решения этой задачи является преобразование свойств и полей объекта в специальное представление — формат XML. При этом данные преобразуются в последовательную серию байтов. Этот процесс называется XML-сериализацией. Обратный процесс — восстановление записанной информации — называется десериализацией.
Создайте новое Windows-приложение и назовите его XML-serialization. В качестве свойств для сохранения будем использовать ширину и высоту самой формы.
Подключаем пространство имен для работы с потоками и XML-сериализацией:
using System.IO; using System.Xml.Serialization;
Создаем новый класс FormSize, в котором объявляем переменные для хранения размеров формы:
public class FormSize { public int height; public int width; }
Размеры формы должны записываться при закрытии формы. В режиме дизайна выделяем форму и в окне Properties переключаемся на события формы (нажимаем на кнопку Events). Создаем обработчик для события Closing формы:
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) { //Создаем экземпляр frmSize класса FormSize: FormSize frmSize = new FormSize(); // Присваиваем текущие значения высоты и ширины формы //переменным height и width frmSize.height = this.Height; frmSize.width = this.Width; //Cоздаем экземпляр xmlser класса XmlSerializer XmlSerializer xmlser = new XmlSerializer(typeof(FormSize)); //Создаем переменную filename, которой присваиваем //название файла applicationSettings.xml в текущей директории string filename = System.Environment.CurrentDirectory + "\\applicationSettings.xml"; //Создаем поток filestream для создания XML-файла FileStream filestream = new FileStream(filename, FileMode.Create); //Создаем сериализацию для экземпляра frmSize xmlser.Serialize(filestream, frmSize); //Закрываем поток filestream.Close();
}
Запускаем приложение. С помощью мыши изменяем размер формы и закрываем ее. В окне Solution Explorer нажимаем на кнопку
(Show All Files) — в папке bin/Debug приложения появился файл applicationSettings.xml (рис. 3.20), в котором записаны размеры формы:При работе с приложением часто возникает необходимость сохранения пользовательских настроек. Одним из способов решения этой задачи является преобразование свойств и полей объекта в специальное представление — формат XML. При этом данные преобразуются в последовательную серию байтов. Этот процесс называется XML-сериализацией. Обратный процесс — восстановление записанной информации — называется десериализацией.
Создайте новое Windows-приложение и назовите его XML-serialization. В качестве свойств для сохранения будем использовать ширину и высоту самой формы.
Подключаем пространство имен для работы с потоками и XML-сериализацией:
using System.IO; using System.Xml.Serialization;
Создаем новый класс FormSize, в котором объявляем переменные для хранения размеров формы:
public class FormSize { public int height; public int width; }
Размеры формы должны записываться при закрытии формы. В режиме дизайна выделяем форму и в окне Properties переключаемся на события формы (нажимаем на кнопку Events). Создаем обработчик для события Closing формы:
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) { //Создаем экземпляр frmSize класса FormSize: FormSize frmSize = new FormSize(); // Присваиваем текущие значения высоты и ширины формы //переменным height и width frmSize.height = this.Height; frmSize.width = this.Width; //Cоздаем экземпляр xmlser класса XmlSerializer XmlSerializer xmlser = new XmlSerializer(typeof(FormSize)); //Создаем переменную filename, которой присваиваем //название файла applicationSettings.xml в текущей директории string filename = System.Environment.CurrentDirectory + "\\applicationSettings.xml"; //Создаем поток filestream для создания XML-файла FileStream filestream = new FileStream(filename, FileMode.Create); //Создаем сериализацию для экземпляра frmSize xmlser.Serialize(filestream, frmSize); //Закрываем поток filestream.Close();
}
Запускаем приложение. С помощью мыши изменяем размер формы и закрываем ее. В окне Solution Explorer нажимаем на кнопку
(Show All Files) — в папке bin/Debug приложения появился файл applicationSettings.xml (рис. 3.20), в котором записаны размеры формы:<?xml version="1.0"?> <FormSize xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <height>155</height> <width>250</width> </FormSize>
Рис. 3.20. Файл applicationSettings.xml в окне Solution Explorer
Добавим теперь обработчик для события Load формы, в котором данные из applicationSettings.xml будут считываться и применяться для установки размеров:
private void Form1_Load(object sender, System.EventArgs e) { //Создаем экземпляр frmSizeSetup класса FormSize: FormSize frmSizeSetup = new FormSize(); //Cоздаем экземпляр xmlser класса XmlSerializer XmlSerializer xmlser = new XmlSerializer(typeof(FormSize)); //Создаем переменную filename, которой присваиваем //название файла applicationSettings.xml в текущей директории string filename = System.Environment.CurrentDirectory + "\\applicationSettings.xml"; //Создаем поток filestream для чтения XML-файла FileStream filestream = new FileStream(filename, FileMode.Open); //Экземпляру frmSizeSetup передаем данные, //полученные в процессе десериализации frmSizeSetup = (FormSize)xmlser.Deserialize(filestream); //Устанавливаем текущие высоту и ширину формы this.Height = frmSizeSetup.height; this.Width = frmSizeSetup.width; //Закрываем поток filestream.Close(); }
В результате получаем следующее — запускаем приложение, изменяем размер формы, закрываем ее. Снова запускаем приложение — форма имеет установленный размер.
На диске, прилагаемом к книге, вы найдете приложение XML-serialization (Code\Glava3\XML-serialization).
<?xml version="1.0"?> <FormSize xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <height>155</height> <width>250</width> </FormSize>
Рис. 3.20. Файл applicationSettings.xml в окне Solution Explorer
Добавим теперь обработчик для события Load формы, в котором данные из applicationSettings.xml будут считываться и применяться для установки размеров:
private void Form1_Load(object sender, System.EventArgs e) { //Создаем экземпляр frmSizeSetup класса FormSize: FormSize frmSizeSetup = new FormSize(); //Cоздаем экземпляр xmlser класса XmlSerializer XmlSerializer xmlser = new XmlSerializer(typeof(FormSize)); //Создаем переменную filename, которой присваиваем //название файла applicationSettings.xml в текущей директории string filename = System.Environment.CurrentDirectory + "\\applicationSettings.xml"; //Создаем поток filestream для чтения XML-файла FileStream filestream = new FileStream(filename, FileMode.Open); //Экземпляру frmSizeSetup передаем данные, //полученные в процессе десериализации frmSizeSetup = (FormSize)xmlser.Deserialize(filestream); //Устанавливаем текущие высоту и ширину формы this.Height = frmSizeSetup.height; this.Width = frmSizeSetup.width; //Закрываем поток filestream.Close(); }
В результате получаем следующее — запускаем приложение, изменяем размер формы, закрываем ее. Снова запускаем приложение — форма имеет установленный размер.
На диске, прилагаемом к книге, вы найдете приложение XML-serialization (Code\Glava3\XML-serialization).