Последовательность событий во время закрытия формы в vb.net

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

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

Например: у меня есть рабочая область учетной записи, которая вызывает окно редактирования адреса. Я закрываю приложение (из окна, в котором размещена рабочая область учетной записи) в середине редактирования адреса. У меня есть шаг закрытия события через рабочие пространства, и если он находит открытое модальное окно, он выполняет canclose в этом рабочем пространстве Windows.

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

Должен ли я сосредоточиться на рабочей области как на событии и просто вернуть false в вызов canclose?

Я запутался в том, что происходит в последовательности, когда я запускаю процесс, такой как canclose, и запускаю событие, когда код события действительно выполняется по отношению к коду, который запросил событие.


person BRisley    schedule 14.11.2012    source источник


Ответы (1)


Вместо того, чтобы использовать свой собственный механизм (и, возможно, заново изобретать колесо), сначала рассмотрите собственный FormClosing. Там вы можете Отменить закрытие или переопределение CloseReason для пользовательское, некаскадное значение для более детализированного дерева действий.

person Neolisk    schedule 14.11.2012
comment
Мы обрабатываем закрытие вкладки или окна, проверяем наш флаг на ws, чтобы увидеть, не загрязнен ли он, если это так, то мы вызываем процесс в модели представления данных ws, чтобы он мог подсказать пользователю о действии. Эта виртуальная машина может сохранять данные в базу данных или просто возвращать данные своему родителю, поэтому ей необходимо определить, может ли она закрыться и что нужно сделать, чтобы правильно закрыть ее. Если он отправляет данные обратно вверх по иерархии, это включает вызов процесса на родительской ws vm для обработки возвращенных данных. Я хочу остановить отмену, а также выполнить этот процесс возврата и вернуть фокус родительскому ws - person BRisley; 15.11.2012
comment
@BRisley: вы сможете выполнить все это с помощью вышеуказанного подхода. В настоящее время я использую его для производственного приложения, которое управляет ядром системы управления страхованием. Каскадные несохраненные изменения приведут к другим запросам, и пользователь может отменить их на любом этапе. - person Neolisk; 15.11.2012
comment
Как вы справляетесь с подсказкой, разрешаете ли вы подсказке делать что-то, что каскадируется, или вы просто отменяете событие закрытия и оставляете их в этом представлении рабочей области? - person BRisley; 16.11.2012
comment
@BRisley: пользователь может ответить Yes, No или Cancel на запрос Save. Иногда невозможно выполнить Save, так как проверка не проходит, поэтому доступны только Yes и No (которые на самом деле являются No и Cancel в этом контексте). Да означает сохранить и закрыть, Нет означает не сохранять и закрыть, а Отмена означает ничего не делать, вернуться туда, где я был. Я не делаю ничего каскадного, поэтому каждое окно отвечает само за себя. С тем, как работает FormClosing, при попытке закрыть родительский элемент события будут срабатывать от дочерних элементов. При отмене на дочернем уровне будет отменена вся последовательность. - person Neolisk; 16.11.2012
comment
У меня есть вещи, которые зависят от возврата значений родителю, они не автономны. (Мы поддерживаем различные пользовательские изменения сведений на основе правил каждого сайта, поэтому мы вызываем разные комбинации представления и виртуальной машины, и эти данные используются родительским представлением.) Приложение не открывает никаких окон специально в модальном режиме, оно просто выглядит быть. У нас есть подпрограммы, которые вызываются у родителя для обработки возвращаемых данных, когда дочерний процесс завершен, и блокируют действия над родителем. - person BRisley; 16.11.2012
comment
@BRisley: возвращать значения родителю — это нормально, вы можете сделать это с помощью пользовательских свойств или пользовательской функции, которую вы вызываете вместо Show. Модальный или нет - не важно. Просто убедитесь, что у вас есть право собственности на окно. Вам по-прежнему следует избегать обработки основной формы, выполненной ребенком, потому что, если вы это сделаете, в будущем возникнут проблемы. - person Neolisk; 16.11.2012