как отменить закрытие формы c

Отменить закрытие формы открытой по ShowDialog

Всем привет! Я снова здесь просить помощи великих и бесстрашных.

У меня есть форма, в ней control со всем необходимым (т.е. на форме нет ничего кроме одного userContol’a), а в этом контроле уже пара кнопок(одна имеет DialogResult = Yes(далее «кнопка подтверждения»), а вторая DialogResult = No(далее «кнопка отмены»)) и пара textbox’ов.

Проблема следующая:
Пользователь ввел данные в текстбоксы. При нажатии на кнопку подтверждения происходит валидация данных и не зависимо от того, валидны данные или нет окно закрывается( Так вот как сделать так, чтобы при валидных данных окно не закрывалось при нажатии на кнопку подтверждения, а при валидных закрывалось.

как отменить закрытие формы c. Смотреть фото как отменить закрытие формы c. Смотреть картинку как отменить закрытие формы c. Картинка про как отменить закрытие формы c. Фото как отменить закрытие формы cКак отменить закрытие формы?
не у верен что правильно сформулировал заголовок сообщения. ну да ладно. задача проста: при выходе.

Если в поле DataGridView имеются пустые поля, отменить закрытие формы
Доброго времени суток. Имеется форма, на которой таблицы DataGridView. Задача такова: Если 9.

как отменить закрытие формы c. Смотреть фото как отменить закрытие формы c. Смотреть картинку как отменить закрытие формы c. Картинка про как отменить закрытие формы c. Фото как отменить закрытие формы cОтменить закрытие формы
Всем доброго времени суток. Хочу отменить закрытие формы. то есть при нажатии на кнопку закрыть.

Отменить автоматическое закрытие формы бд Шоколадный магазин
Форма Оформление заказа предназначена для добавления данных о новом заказе в таблицы. Добавление.

Источник

Отменить закрытие формы

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

Это код для вызова подчиненной формы:

А это код для пункта меню «Сохранить» в подчиненной форме:

Проблема в том, что код всегда возвращается к вызывающему методу, закрывая (может быть, просто скрывая?) Подформу, даже если метод this.Close() не вызывается.

2 ответа

Мне кажется странным, что вы хотите закрыть форму, когда пользователь просто хочет сохранить данные. 🙂

Сохранение не должно закрывать вашу форму.

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

В зависимости от того, нажал ли пользователь «Да» или «Нет», вы должны или не должны сохранять изменения. Если пользователь нажал кнопку «Отмена», вы должны отменить закрытие формы, создав событие для события FormClosing. Это событие позволяет отменить закрытие формы.

Приведенный выше код полезен, когда «Форма 2» не является модальной формой.

Если вы хотите, чтобы форма Form2 отображалась в модальном режиме, приведенный выше код также будет работать. Однако в этом случае вы также можете использовать свойство DialogResult формы:

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

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

Также я рекомендую использовать this.Close вместо Dispose Form.Close () отправляет правильные сообщения Windows для закрытия окна win32. Во время этого процесса, если форма не отображалась модально, в форме вызывается Dispose. Удаление формы освобождает неуправляемые ресурсы, которые форма удерживает.

Для более организованного кода попробуйте создать экземпляр формы из основной формы и обработать результат диалога следующим образом:

Источник

Как отменить закрытие окна в приложении MVVM WPF

Как я могу отменить выход из определенной формы после нажатия кнопки «Отмена» (или X в правом верхнем углу или Esc)?

Текущий код не работает. Я хочу, чтобы пользователь оставался в текущей форме, если он выберет «Нет» во всплывающем диалоговом окне. Кроме того, переопределение CanExecute не помогает. Просто отключает кнопку. Я хочу разрешить пользователю нажимать кнопку, но затем уведомить его / ее, что данные будут потеряны. Может быть, я должен назначить прослушиватель событий на кнопку?

Мне удалось показать всплывающее окно на кнопке «Отмена». Но я все еще не могу управлять кнопкой Esc или X (вверху справа). Кажется, меня смутила кнопка Отмена, потому что метод Execute выполняется, когда я нажимаю кнопку X или Esc.

Я изменил вопрос. Это было «как отменить кнопку отмены». Однако это было не то, что я искал. Мне нужно отменить кнопку Esc или X. В MyViewModel я добавляю:

Это решило мою проблему. Однако мне нужно, чтобы ICommand понимал, какая кнопка была нажата, Сохранить или Отменить. Есть ли способ исключить использование события?

3 ответа

Вы пытаетесь выполнить работу View в классе ViewModel. Позвольте вашему классу View обработать запрос на закрытие и указать, следует ли его отменить или нет.

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

Пример кода прикрепленного поведения (автор кода: Ниш Нишант)

Пример привязки команд:

Команды «ClosedCommand», «ClosingCommand» и «CancelClosingCommand» должны быть определены в отдельной View-Model.

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

В XAML я добавил это

И, наконец, в модели просмотра

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

Источник

Cancel form closing

I’m writing a WinForm desktop application. In the main form, the user clicks on a button which calls another form for the user to submit data to. At the end of this submission process, the user clicks on a «Save» menu item to close the subform.

This is the code for the subform calling:

and this is the code for the «Save» menu item in the subform:

The problem is that the code will always get back to the calling method, thus closing (maybe just hiding?) the sub-form, even if the this.Close() method isn’t called.

как отменить закрытие формы c. Смотреть фото как отменить закрытие формы c. Смотреть картинку как отменить закрытие формы c. Картинка про как отменить закрытие формы c. Фото как отменить закрытие формы c

2 Answers 2

you should not make a new event instance, those are things you would want to avoid instead try:

Events are supposed to occur automatically, so ‘OnFormClosing’ will raise when the form will close.

also i recommend to use this.Close instead of Dispose Form.Close() sends the proper Windows messages to shut down the win32 window. During that process, if the form was not shown modally, Dispose is called on the form. Disposing the form frees up the unmanaged resources that the form is holding onto.

for more organized code, try making an instance of the form from the main form and handle the dialog result like this:

I find it strange that you want to close the form when the user just wants to save the data. 🙂

Save should not close your form.

When you close the form, you should verify if there are unsaved changes. If there are, ask the user the question if he wants to save his changes before closing and offer him the options Yes, No and Cancel, where Cancel means ‘cancel closing the form’.

Depending on wether the user clicked Yes or No, you should or shouldn’t save the changes. If the user clicked cancel, you should cancel closing the form by having an event for the FormClosing event. This event allows you to cancel closing the form.

The code above is usefull when ‘Form2’ is not a modal form.

If you want Form2 to be shown modal, the code above will work as well. However, you can also use the DialogResult proprety of the Form in that case:

Источник

C# Как грамотно закрыть Form?

Здравствуйте, коллеги! Не думал, что будут проблемы с такими вот вещами, но тем не менее. Вот в чем суть проблемы. Разрабатываю программу, в которой из главной Form1, при нажатии на копку я открываю Form2.

Далее уже на Form2 я выполняю код, который заполняет таблицу на Form1, при этом я вывожу данные в таблицу, а затем мне нужно закрыть Form2 сразу.

Так вот в чем проблема: Form2 она то вроде закрывается, но по факту только скрывается. По долгу своей работы, мое приложение должно работать сутками в фоне и получается, что очередной раз пользователь открывает Form2, нажимает там на кнопку, таблица на Form1 заполняется, но Form2 не закрывается, а сворачивается. И так у меня плодятся окна Form1 и Form2 до бесконечности. Как можно это грамотно обыграть? P.s. Пробовал и Form2.ActiveForm.Close() и this.Close() ничего не помогает. Может логическая ошибка где? Помогите, пожалуйста!

3 ответа 3

После закрытия формы через Close() вызовите в первой форме у второй Dispose() и будет вам счастье. Иногда достаточно почитать официальные мануалы.

Два условия, когда форма не удаляется при вызове Close это когда (1) это часть приложения многодокументного интерфейса (MDI) и форма не является видимой; и (2) форма была отображена посредством ShowDialog.

Пример обработчика события по нажатию кнопки в Form2 с изменением свойств объектов формы Form1.

Пример более правильного вызова/создания дочерней формы.

Настоятельно рекомендую иметь ввиду контроль наличия (существования) окна, если вы используете окно без привязки к основному. Т.е. если дочерние окна можно убрать в фон или на задний план, то вы обязательно его потеряете.

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *