Сохранение WinForms MDI формирует состояние под .net - PullRequest
0 голосов
/ 10 февраля 2012

У меня есть приложение WinForms макета MDI. Я хотел бы сохранить состояние открытых форм (размер, значения текстовых полей, выбранные индексы списка ...) при закрытии приложения, чтобы получить их при новом запуске.

Есть много способов сделать это, но я не нашел решения для сохранения этих данных, если в приложении MDI есть больше открытых экземпляров данной формы. Например. если у меня есть 2 открытых экземпляра Form1, который имеет текстовое поле. Текст TextBox в экземпляре 1 - «a», а в экземпляре 2 - «b». Если я сохраню это, например для app.config с использованием функций .net, настройки instance2 перезапишут сохраненные данные instance1, потому что они одного типа. Так что при загрузке при запуске это будет 'b' для обоих экземпляров.

Как я могу сохранить их состояние отдельно? Как их идентифицировать при сохранении?

1 Ответ

0 голосов
/ 10 февраля 2012

Нет способа реализовать это, как описано. Вы можете сохранить только одно / последнее состояние, поскольку нет способа определить, какую версию следует восстановить.

Но вы можете использовать именованное хранилище состояний для достижения цели.

Вы должны создать собственное хранилище, которое должно предоставлять два метода

interface IStateStorage
{
  UIState LoadState(string name);
  void SaveState(string name, State state);
}

Вы можете сохранить или восстановить состояние пользовательского интерфейса в любое время, когда вам это нужно, загрузив состояние с другим именем.

В случае возникновения вопросов вы можете дважды сохранить состояние пользовательского интерфейса. Сначала он сохранит состояние по умолчанию ss.SaveState («default», состояние), которое перезапишет состояние по умолчанию. Во второй раз он сохранит именованное состояние ss.SaveState ("a", state), которое перезапишет именованное состояние.

При открытии формы вы сможете выбрать, какое состояние должно быть восстановлено, по умолчанию одно или другое с именем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...