Как проверить, кто закрывает форму?

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Snussi
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 151
Зарегистрирован: 21.07.2004 (Ср) 18:08
Откуда: Москва, Россия

Как проверить, кто закрывает форму?

Сообщение Snussi » 19.04.2005 (Вт) 17:39

Впрос в следующем: хочется, чтобы при нажатии юзера на крестик формы вызывался me.hide, а в других случаях - форма закрывалась?

Конкретнее, как мне кажется, вопрос в следующем - понять, "кто" инициировал From_Closing - юзер или код (или операционка, в случае если выгружают винды)? Как это сделать?

Dmitriy Solomnikov
Постоялец
Постоялец
 
Сообщения: 407
Зарегистрирован: 10.11.2004 (Ср) 13:04
Откуда: Москва

Сообщение Dmitriy Solomnikov » 22.04.2005 (Пт) 16:23

когда форму закрывает код ВЫ знаете - в остальных случаях либо операционка, либо юзер (без разницы)

Snussi
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 151
Зарегистрирован: 21.07.2004 (Ср) 18:08
Откуда: Москва, Россия

Сообщение Snussi » 25.04.2005 (Пн) 10:37

Для меня есть разница - юзер (нажав крестик) или операционка.

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 25.04.2005 (Пн) 15:17

ммдя, хорошо, Snussi, а скажите пожалуста в чем-же тогда разница?
И такой еще вопрос, для Вас, закрытие по Alt+F4 или по выборе "Закрыть" из контекстного меню - это закрытие пользователем или операционкой???
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 25.04.2005 (Пн) 15:27

SHURUP
Если FlashGet'у по кресту кликнуть, он не закроется, а свернётся.
А если перезагрузиться, он корректно закроется - хотя мог бы отказаться, если бы не обрабатывал эту ситуацию :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Gloom
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 200
Зарегистрирован: 23.11.2004 (Вт) 15:57
Откуда: СПб

Сообщение Gloom » 25.04.2005 (Пн) 16:22

в .Net Farmework 2.0 появился класс FormClosingEventArgs, а в нём - CloseReason enum:
    ApplicationExitCall
    FormOwnerClosing
    MdiFormClosing
    None
    TaskManagerClosing
    UserClosing
    WindowsShutDown


А вообще, вот:
Find out what's closing your application

ZeroX
Бывалый
Бывалый
 
Сообщения: 207
Зарегистрирован: 29.04.2003 (Вт) 12:36
Откуда: Мой адрес не дом и не улица, мой адрес Советский Союз

Сообщение ZeroX » 26.04.2005 (Вт) 3:44

А если перезагрузиться, он корректно закроется - хотя мог бы отказаться, если бы не обрабатывал эту ситуацию :)

WM_ENDSESSION
WM_QUERYENDSESSION
Эти сообщения пока никто не отменял - так что можно смело использовать их для проверки
Каждый warning мечтает стать error'om

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 26.04.2005 (Вт) 6:36

Мда...
Для сокета нельзя даже узнать, отвалился ли удалённый комп.
Для форм нет простейшего индикатора кто закрывает, а появился он только в 2.0.

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

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

Вот если бы был VB с синтаксическими возможностями VB .NET, но без этого FW, это был бы рулез...
Блин, хоть свой компилятор пиши... :(
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Snussi
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 151
Зарегистрирован: 21.07.2004 (Ср) 18:08
Откуда: Москва, Россия

Сообщение Snussi » 26.04.2005 (Вт) 9:00

Всем спасибо, разобрался. Если кому интересно - вот шмоток кода (сделано топорно :)
Код: Выделить всё
    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        If m.Msg = &H11 Then ' Закрытие сессии Windows - WM_QUERYENDSESSION
            NeedClose = True
        End If
        MyBase.WndProc(m)
    End Sub 'WndProc

    Private Sub frmBase_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
        If NeedClose = False Then
            e.Cancel = True
            Me.ShowInTaskbar = False
            Me.Visible = False
            Me.myNotifyIcon.Visible = True
            Exit Sub
        End If
    End Sub

BuilderSoft
Постоялец
Постоялец
 
Сообщения: 350
Зарегистрирован: 21.09.2002 (Сб) 10:13

Сообщение BuilderSoft » 01.05.2005 (Вс) 19:46

сделай базу даных
при закрытии записывай UserName и узнаешь кто закрыл кто открыл
Нет глупых,
Один узнал раньше других
אין א-אפשר

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.05.2005 (Пн) 6:21

Вопрос внимательно прочитай.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 91

    TopList