В Visual Basic основной задачей сохранения состояния формы (размер, положение, значения полей) между сессиями является запись данных в внешний источник (файл, реестр, настройки пользователя) при закрытии и восстановление при запуске.
Подходы:
Пример использования My.Settings:
' Сохранение состояния Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing My.Settings.WindowLocation = Me.Location My.Settings.WindowSize = Me.Size My.Settings.Save() End Sub ' Восстановление состояния Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load If Not My.Settings.WindowSize.IsEmpty Then Me.Size = My.Settings.WindowSize End If If Not My.Settings.WindowLocation.IsEmpty Then Me.Location = My.Settings.WindowLocation End If End Sub
Настройки добавляются через дизайнер либо вручную.
Тонкости:
Можно ли сохранить нестандартный объект (например, DataTable) через My.Settings? Как это правильно реализовать?
Ответ: Да, но настройка должна быть типа User, а объект должен поддерживать сериализацию. Для DataTable или сложных объектов My.Settings сохраняет сериализованный Binary/XML-вид. Необходимо реализовать поддержку сериализации или использовать ручную запись через сериализатор.
История
В приложении сохраняли состояние формы в реестр Windows. После некоторых обновлений пользователи утратили доступ к настройкам из-за ограничений прав, что вызвало массовые обращения в поддержку. Решение — переход на My.Settings в пользовательских профилях.
История
Без проверки координат положения окна при запуске приложение отображалось вне видимой области экрана (сменился второй монитор). Теперь добавлена логика проверки границ рабочего стола при восстановлении положения формы.
История
При обновлении со старой версии приложения разработчики не обеспечили перенос пользовательских настроек (форм-вложенных полей). Итог — потеря данных и недовольство пользователей. Принята политика поддержки миграции версий настроек с контролем совместимости.