Как заядлый (закоренелый) Дельфист, я не мог не попасть в так вот красивый просак, а именно в сохранение определённых настроек программы.
Методы формирования ini файлов отбросил, так как хотелось изящества и нативности, что по русски звучит так: надо проще и понятнее, что бы раз и навсегда сделать и забыть.
Ну и стоит, конечно, отметить, что к ООП я раньше вообще не имел никакого отношения.
И так задача: программа стартует — имеет одно окно (Form1) и одну кнопку (практически бесполезную).
Перемещаем окно по экрану и закрываем программу. Запускаем заново и она, после старта, занимает на экране позицию в которой она была в момент закрытия. Другими словами программа помнит место положение окна.
в Form1.cs добавляем две строки:
Нас интересую 3 события: окно загрузилось, окно закрывается и нажата бесполезная кнопка, вот их мы и будем обрабатывать.
Дальше я привожу всё тело программы, так проще комментировать:
Послесловие.
Иногда очень со скрипом идёт ломка старых стереотипов — я 3 часа бился головой в клавиатуру, выписывая код сохранения в старый добрый ini файл и, увидев во что превращается простенькая задача, бросил это занятие. Да — XML не так красиво читаем как ini файл, но всё равно он правится как вручную, так и сторонними программами.
Методы формирования ini файлов отбросил, так как хотелось изящества и нативности, что по русски звучит так: надо проще и понятнее, что бы раз и навсегда сделать и забыть.
Ну и стоит, конечно, отметить, что к ООП я раньше вообще не имел никакого отношения.
И так задача: программа стартует — имеет одно окно (Form1) и одну кнопку (практически бесполезную).
Перемещаем окно по экрану и закрываем программу. Запускаем заново и она, после старта, занимает на экране позицию в которой она была в момент закрытия. Другими словами программа помнит место положение окна.
в Form1.cs добавляем две строки:
using System.IO; // это для работы с файлами
using System.Xml.Serialization; //это для сохранения классов — что и есть серилизация (стрёмное слово)
Нас интересую 3 события: окно загрузилось, окно закрывается и нажата бесполезная кнопка, вот их мы и будем обрабатывать.
Дальше я привожу всё тело программы, так проще комментировать:
namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } // вот этот самый класс, который мы будем сохранять public class iniSettings // имя выбрано просто для читаемости кода впоследствии { public int X_pos; // это собственно для хранения X верхнего левого угла окна public int Y_pos; // ну а это, соответственно Y } // нажатие бесполезной кнопки на окне private void button1_Click(object sender, EventArgs e) { // перемещаем окно в позицию на экране X=5 и Y=5 this.Location = new Point(5, 5); } // действие при закрытии окна private void Form1_FormClosing(object sender, FormClosingEventArgs e) { // создаём копию класса iniSettings с именем iniSet iniSettings iniSet = new iniSettings(); // записываем в переменные класса текущие координаты верхнего левого угла окна iniSet.X_pos = Location.X; iniSet.Y_pos = Location.Y; // выкидываем класс iniSet целиком в файл program.xml using (Stream writer = new FileStream("program.xml", FileMode.Create)) { XmlSerializer serializer = new XmlSerializer(typeof(iniSettings)); serializer.Serialize(writer, iniSet); } } // при загрузке окошка программы private void Form1_Load(object sender, EventArgs e) { // загружаем данные из файла program.xml using (Stream stream = new FileStream("program.xml", FileMode.Open)) { XmlSerializer serializer = new XmlSerializer(typeof(iniSettings)); // в тут же созданную копию класса iniSettings под именем iniSet iniSettings iniSet = (iniSettings)serializer.Deserialize(stream); // и устанавливаем прочитанные координаты окну this.Location = new Point(iniSet.X_pos, iniSet.Y_pos); } } } }
Послесловие.
Иногда очень со скрипом идёт ломка старых стереотипов — я 3 часа бился головой в клавиатуру, выписывая код сохранения в старый добрый ini файл и, увидев во что превращается простенькая задача, бросил это занятие. Да — XML не так красиво читаем как ini файл, но всё равно он правится как вручную, так и сторонними программами.