alexander_8901 пишет:Было бы неплохо, если б добавили в эти события параметр Cancel, которым можно было бы отменить стандартную обработку события :rolleyes:
Форма закроется независимо от того, был нажат ОК или Cancel. Для обработки события закрытия формы используется Form_BeforeClose(Form, Obj, Cancel). В нем вы можете проверить содержимое формы и принять решение закрыть/не закрыть. А чтобы запомнить, что именно нажал пользователь, и воспользоваться этим в Form_BeforeClose, можете использовать примерно такой код (до появления декларативной части скрипта):
Sub OK_OnClick()
Set OKCancelDict = ThisForm.Dictionary
If Not OKCancelDict.Exists("OK") Then
OKCancelDict.Add "OK", True
Else
OKCancelDict.Key("OK") = True
End If
If Not OKCancelDict.Exists("Cancel") Then
OKCancelDict.Add "Cancel", False
Else
OKCancelDict.Key("Cancel") = False
End If
End Sub
Sub Cancel_OnClick()
Set OKCancelDict = ThisForm.Dictionary
If Not OKCancelDict.Exists("OK") Then
OKCancelDict.Add "OK", False
Else
OKCancelDict.Key("OK") = False
End If
If Not OKCancelDict.Exists("Cancel") Then
OKCancelDict.Add "Cancel", True
Else
OKCancelDict.Key("Cancel") = True
End If
End Sub
Sub Form_BeforeClose(Form, Obj, Cancel)
Set OKCancelDict = ThisForm.Dictionary
If OKCancelDict.Exists("OK") Then
If OKCancelDict("OK") Then
msgbox "Нажат OK"
Else
msgbox "Нажат Cancel"
End If
Else
msgbox "Нажато что-то другое"
End If
End Sub
Код можно сильно упростить, если помещать OK и Cancel в одну ячейку словаря и отличать только по True и False