Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 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
а уже в FormClosed написать END
Забудь за End, как за страшный сон. И никогда не вспоминай.
В .Net нужно писать
  1. Me.Close
. И только в том случае, когда ты закрываешь форму принудительно.

Ответить

Номер ответа: 5
Автор ответа:
 DimDoc



Вопросов: 21
Ответов: 104
 Профиль | | #5 Добавлено: 23.04.09 02:26
Забудь за End, как за страшный сон

Возможно....
Но
  1. me.close()

Вызывает ошибку...

Ответить

Номер ответа: 6
Автор ответа:
 BG(Алексей)



Вопросов: 26
Ответов: 295
 Профиль | | #6 Добавлено: 25.04.09 03:16
Возможно....
Но

   1. me.close()


Вызывает ошибку...
Читай внимательно.

В .Net нужно писать

   1. Me.Close

. И только в том случае, когда ты закрываешь форму принудительно.

Ответить

Номер ответа: 7
Автор ответа:
 Dully



ICQ: 229882730 

Вопросов: 19
Ответов: 51
 Профиль | | #7 Добавлено: 25.04.09 07:57
BG(Алексей) пишет:
Me.Close

Me можно не писать ;)

Ответить

Номер ответа: 8
Автор ответа:
 DimDoc



Вопросов: 21
Ответов: 104
 Профиль | | #8 Добавлено: 25.04.09 12:47
Ну просто класс!
Пишу
  1. Me.Close

автоматом добавляются скобки
  1. Me.Close()

Так, что моя невнимательность здесь нипричём...
тем не менее этот код в событиях 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, потому что форма и так ЗАКРЫВАЕТСЯ!

DimDoc пишет:
Мне важно понять - какой код в событиях Form1_FormClosing и Form1_FormClosed предотвращает ситуацию, в которой ФОРМА закрылась, а приложение НЕТ?


1) (зависит от опции Shutdown Mode, может как привести к завершению приложения так и предотвратить его)
  1. Dim New Form As Form
  2. Form.Show()


2)
  1. Dim Thread = New System.Threading.Thread(AddressOf MySub)
  2. Thread.Start


Устраивает?

Ответить

Номер ответа: 10
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #10 Добавлено: 01.05.09 23:34
Приложение завершается после того как завершили свое выполнение все потоки, у которых IsBackground=False. Это если быть более точным.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам