2013-04-07 5 views
0

Когда какая-то форма закрывается, я фиксирую событие formClosing, чтобы проверить, действительно ли пользователь хочет его закрыть.Узнайте, какая кнопка была нажата в последний раз при срабатывании события «formCloseing»

Однако я не хочу, чтобы эта проверка выполнялась, если нажата кнопка «Далее>», если только я не знаю, какая кнопка была проверена, всегда запрашивается конформация.

Есть ли способ, которым я могу передать кнопку, которую пользователь clicekd выполняет с помощью функции confirm_exit(), так что если бы она была «Следующая», я могу игнорировать проверку и просто извлекать «Ложно»?

'*' 
' Carries out actions when the user clicks the 'X' button to close the form 
'*' 
Private Sub btnX(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing 

    Dim clicked As Button ' The button that the user clicked 

    clicked = ??? ' How do I get the button that was last clicked? 

    e.Cancel = confirm_exit(clicked) 

End Sub 

'** 
' Checks that the user does actually want to cancel the Music Renamer 
'* 
Public Function confirm_exit(Optional clicked As Button = Nothing) As Boolean 

    ' Ask the user if they are sure that they wish to cancel the Music Renamer 
    Dim cancel As String = MsgBox("The Music Renamer is not finished yet. Are you sure you wish to quit?", vbYesNo, "Are you sure?") 

    ' Set confirm_exit to false by default 
    confirm_exit = False 

    ' Check if the user clicked 'Next >', and exit the function if they did 
    If clicked.Name = "btnNext" Then Exit Function 

    ' If the user is sure, close the Music Renamer form 
    If Not cancel = vbYes Then confirm_exit = True 

End Function 

ответ

1

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

Всякий раз, когда вы хотите, чтобы форма закрывалась без подтверждения, просто установите verifyClosing = false перед вызовом метода Close. Ваш обработчик события закрытия может проверить это значение, чтобы решить, что делать.

+0

Я вижу действительность идеи, но она не работает. Я устанавливаю 'verifyClosing = false' прямо перед' Me.Close() ', когда пользователь нажимает« Далее> », но когда я проверяю значение в функции' confirm_exit() ', он всегда имеет значение« True », , Благодарю. –

+0

Ничего, потому что я закрывал форму дважды по ошибке, и событие 'formClosing' срабатывает, даже если форма уже закрыта. Спасибо за помощь. –