Страница: 1 |
Страница: 1 |
Вопрос: В чем разница: FormClosing и FormClosed?
Добавлено: 20.04.09 00:01
Автор вопроса: DimDoc
В чём принципиальная разница между FormClosing и FormClosed?
Понятно, что сначала происходит событие FormClosing, а затем FormClosed.
Как правильно закрывать программу?
Нужно ли писать
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
e.Cancel = False
End Sub
Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
End
End Sub
или достаточно END в Form1_FormClosing? (или в Form1_FormClosed)
Кто знает - поделитесь!
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа:
Aston
ICQ: 214-179-991
Вопросов: 42
Ответов: 272
Профиль | | #1
Добавлено: 20.04.09 11:44
Form_Closing - это форма закрывается - действие закрытия. Например дверь закрывается и время от открытой и до закрытой - это Closing. Closed - это дверь уже закрыта.
Номер ответа: 2
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #2
Добавлено: 20.04.09 18:28
В первом событии ты можешь отменить закрытие формы, а во втором -нет
Номер ответа: 3
Автор ответа:
DimDoc
Вопросов: 21
Ответов: 104
Профиль | | #3
Добавлено: 21.04.09 01:25
Если правильно понял, то FormClosing соответствует QueryUnload (VB6) - таким образом здесь можно, например, спросить пользователя: "Вы действительно хотите закрыть программу? ", а уже в FormClosed написать END. Хотя можно и ничего не писать - приложение всёравно закроется.
Может есть какие нибудь ещё серьёзные причины иметь два события закрытия формы (приложения)?
Хочу спросить в более широком смысле:
Чем отличаются два приложения "Hello World":
в одном события FormClosing и FormClosed не используются.
в другом - указано END.
В обоих случаях приложения закроются.... Или нет???
Номер ответа: 4
Автор ответа:
BG(Алексей)
Вопросов: 26
Ответов: 295
Профиль | | #4
Добавлено: 21.04.09 03:15
В .Net нужно писать
Номер ответа: 5
Автор ответа:
DimDoc
Вопросов: 21
Ответов: 104
Профиль | | #5
Добавлено: 23.04.09 02:26
Возможно....
Но
Вызывает ошибку...
Номер ответа: 6
Автор ответа:
BG(Алексей)
Вопросов: 26
Ответов: 295
Профиль | | #6
Добавлено: 25.04.09 03:16
Но
1. me.close()
Вызывает ошибку...
1. Me.Close
. И только в том случае, когда ты закрываешь форму принудительно.
Номер ответа: 7
Автор ответа:
Dully
ICQ: 229882730
Вопросов: 19
Ответов: 51
Профиль | | #7
Добавлено: 25.04.09 07:57
Me.Close
Me можно не писать
Номер ответа: 8
Автор ответа:
DimDoc
Вопросов: 21
Ответов: 104
Профиль | | #8
Добавлено: 25.04.09 12:47
Ну просто класс!
Пишу
автоматом добавляются скобки
Так, что моя невнимательность здесь нипричём...
тем не менее этот код в событиях Form1_FormClosing и Form1_FormClosed
вызывает ошибку:
StackOverflowException was unhandled (An unhandled exception of type 'System.StackOverflowException' occurred in Unknown Module.)
Думаю me.close можно писать в событии Button1_Click, да и то скобки добавляются...
Мне важно понять - какой код в событиях Form1_FormClosing и Form1_FormClosed предотвращает ситуацию, в которой ФОРМА закрылась, а приложение НЕТ?
Номер ответа: 9
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #9
Добавлено: 01.05.09 23:33
Че ты чудишь???
Преполнение StackOverflowException ты получаешь потому что в событии вызываешь Close, а этот метод вызывает то же событие. И ты опять вызываешь в нем Close. В этих событиях просто не нужно вызывать Me.Close, потому что форма и так ЗАКРЫВАЕТСЯ!
Мне важно понять - какой код в событиях Form1_FormClosing и Form1_FormClosed предотвращает ситуацию, в которой ФОРМА закрылась, а приложение НЕТ?
1) (зависит от опции Shutdown Mode, может как привести к завершению приложения так и предотвратить его)
2)
Устраивает?
Номер ответа: 10
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #10
Добавлено: 01.05.09 23:34
Приложение завершается после того как завершили свое выполнение все потоки, у которых IsBackground=False. Это если быть более точным.