Мой другой вариант - написать больше пользовательского кода в настройках приложения и выполнить его в formLoad и formClosed. Это не использует привязку данных.
Недостатки:
- Больше кода для записи.
- Очень беспокойно. Порядок, в котором вы устанавливаете свойства в formLoad, сбивает с толку. Например, вы должны убедиться, что вы установили размер окна, прежде чем устанавливать расстояние для разделителя.
Прямо сейчас, это мое предпочтительное решение, но, похоже, слишком много работы. Чтобы сократить объем работы, я создал класс WindowSettings, который сериализует расположение, размер, состояние окна и любые позиции разделителя в одну настройку приложения. Затем я могу просто создать настройку этого типа для каждой формы в приложении, сохранить при закрытии и восстановить при загрузке.
Я опубликовал исходный код , включая класс WindowSettings и некоторые формы, которые его используют. Инструкции по добавлению его в проект включены в файл WindowSettings.cs. Самым хитрым было выяснить, как добавить настройку приложения с пользовательским типом. Вы выбираете Обзор ... в раскрывающемся списке типов, а затем вручную вводите пространство имен и имя класса. Типы из вашего проекта не отображаются в списке.
Обновление: Я добавил несколько статических методов для упрощения стандартного кода, который вы добавляете в каждую форму. После того, как вы следовали инструкциям по добавлению класса WindowSettings в свой проект и созданию настроек приложения, вот пример кода, который необходимо добавить к каждой форме, положение которой вы хотите записать и восстановить.
private void MyForm_FormClosing(object sender, FormClosingEventArgs e)
{
Settings.Default.CustomWindowSettings = WindowSettings.Record(
Settings.Default.CustomWindowSettings,
this,
splitContainer1);
}
private void MyForm_Load(object sender, EventArgs e)
{
WindowSettings.Restore(
Settings.Default.CustomWindowSettings,
this,
splitContainer1);
}