Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отменить закрытие окна 
V
    Опции темы
DEER
Дата 15.8.2006, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

Репутация: нет
Всего: 13



Что то нигде не нашел как это сделать.

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

Есть ли событие, которое возникает до начала закрытия формы, или хотя бы во время закрытия ??

Добавлено @ 10:05 
так..
у формы оказывается есть событие closing..
тогда все просто....
а вот если это не форма, а UserControl?? тогда никак не отловишь закрытие?


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
ivashkanet
Дата 15.8.2006, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 11
Всего: 149



Тебе нужно событие Form.Closing. И поле его аргумента e.Cancel 
Незакрываемая форма (как ни странно (шутка smile ) не закрывается)
Код

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
      e.Cancel = true;
}


PM MAIL WWW ICQ   Вверх
DEER
Дата 15.8.2006, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

Репутация: нет
Всего: 13



да, спасибо, с этим разобрался...
а с контролом. 
Получается, нужно делать публичный метод у контрола, который и будет спрашивать у юзера... и если нажали Cancel, то метод вернёт false, тогда в форме пишем
Код

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if(!MyControl.Closing())  e.Cancel = true;
}




--------------------
 
PM MAIL WWW ICQ MSN   Вверх
mr.DUDA
Дата 15.8.2006, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



Цитата(DEER @  15.8.2006,  09:58 Найти цитируемый пост)
а вот если это не форма, а UserControl?? тогда никак не отловишь закрытие?

А как ты себе представляешь "закрытие юзерконтрола" ?  smile 

Если нужно отловить закрытие формы с юзерконтрола, можно например поступить так: добавить свой public-метод OnClosing(CancelEventArgs e), который вызывать с формы в обработчике Form.Closing (форма уже знает о наличии этого метода). Пусть OnClosing у юзерконтрола выполняет все действия, связанные с закрытием родительской формы, и выставляет e.Cancel = true если форму закрывать нельзя.

Добавлено @ 10:32 
Цитата(DEER @  15.8.2006,  10:25 Найти цитируемый пост)
Получается, нужно делать публичный метод у контрола, который и будет спрашивать у юзера... и если нажали Cancel, то метод вернёт false, тогда в форме пишем

опередил  smile 


--------------------
user posted image
PM MAIL WWW   Вверх
arilou
Дата 15.8.2006, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: нет
Всего: 61



А что, разве из ЮзерКонтрола нельзя подписаться на Form.Closing ?  smile 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
mr.DUDA
Дата 16.8.2006, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



Цитата(arilou @  15.8.2006,  22:59 Найти цитируемый пост)
А что, разве из ЮзерКонтрола нельзя подписаться на Form.Closing ?

Можно, хоть его IntelliSence и не показывает smile. Событие в 2.0 стало obsolete, подписываться надо на событие FormClosing. Но тут есть ряд мелких неприятностей:
- во-первых, нужно найти форму (не факт, что контрол находится на форме, а не внутри др. контрола), методом FindForm()
- во-вторых, делать это можно только начиная с метода OnLoad (в конструкторе нельзя, т.к. контрол ещё не добавлен на форму)
- в Design Mode формы может не быть, значит нужна проверка на null

Конечно, правильнее подписываться на событие, но проще объявить паблик-метод и дёргать его из формы.  smile 


--------------------
user posted image
PM MAIL WWW   Вверх
engaged
Дата 22.4.2008, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 22.4.2008

Репутация: нет
Всего: нет



а на Delphi можно ли отменить закрытие окна?
PM MAIL   Вверх
amarenkov
Дата 23.4.2008, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 21.2.2008
Где: Воронеж

Репутация: нет
Всего: нет



И на Delphi можно:

Код

procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    Action := caNone;
end;


Это сообщение отредактировал(а) amarenkov - 23.4.2008, 08:27
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0785 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.