Кнопки Stateful Winform и Cancel

С преобладанием кнопок «ОК» и «Отмена» в нижней части форм/диалогов мне странно, что я не могу найти «стандартный» способ сохранения состояния управления.

Например, у меня есть проверенный список фильтров. Когда пользователь нажимает кнопку «ОК», он применяет фильтры к набору данных, и форма закрывается. Если пользователь нажимает кнопку отмены, форма отменяет все изменения отмеченных элементов и закрывается.

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

Каков наилучший способ обработки кнопки отмены, отменяющей изменения в элементе управления или даже во всей форме? Есть ли передовое решение? Я видел, что это необходимо для текстовых полей, круговых кнопок, флажков и практически каждого элемента управления, поэтому, пожалуйста, старайтесь, чтобы это было общим, а не специфичным для проверенных списков.


person Steve H.    schedule 30.05.2012    source источник
comment
Это интересный вопрос, но, по моему опыту, я не знаю, что вы можете «сохранить» состояние полной формы, чтобы вы могли перезагрузить ее, когда пользователь отменяет операцию. Обычно при отмене мы отбрасываем изменения без применения фильтра. Или, если есть несколько элементов управления, просто используйте переменные, чтобы отслеживать старое значение каждого из них.   -  person Shiin Zu    schedule 30.05.2012
comment
Возможно, этот вопрос лучше подходит для нашего родственного сайта Разработка программного обеспечения. Вы хотите, чтобы я перенес его?   -  person Kev    schedule 01.06.2012


Ответы (2)


Я бы предложил это так же просто, как:

  • Держите данные, отражаемые в пользовательском интерфейсе, отдельно от самого пользовательского интерфейса.
  • Когда форма загружена, установите ее содержимое на основе данных
  • Когда пользователь нажимает «ОК», сохраните изменения в модели данных (однако это будет достигнуто, что будет зависеть от того, как именно вы заполняете модель).
  • Когда пользователь нажимает кнопку "Отмена", не сохранять изменения.

Нет необходимости «отменять» изменения при «Отмене» — вы просто выбрасываете форму. Когда вы в следующий раз захотите отобразить форму, будут загружены те же данные, что и раньше, потому что вы не сохранили в них никаких изменений.

person Jon Skeet    schedule 30.05.2012

Простой способ: не используйте экземпляры формы повторно. Делайте var childForm = new MyChildForm(); перед каждым childForm.Show();

person Robert Levy    schedule 30.05.2012