(изменено: alexander_8901, 5 октября 2012г. 12:37:32)

Тема: Нажатие стандартных кнопок "ОК" "Омена"

Недавно сделал для себя открытия как обработать события нажатия стандартных кнопок "ОК" "Отмена""

Может кому пригодиться   B)

В скрипте формы добавляем код:

Для кнопки ОК:

Sub OK_OnClick()
msgbox "OK"
End Sub

Для кнопки отмена:

Sub CANCEL_OnClick()
msgbox "Cancel"
End Sub

Было бы неплохо, если б добавили в эти события параметр Cancel, которым можно было бы отменить стандартную обработку события  :rolleyes:

(изменено: McZag, 5 октября 2012г. 09:14:27)

Re: Нажатие стандартных кнопок "ОК" "Омена"

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

Re: Нажатие стандартных кнопок "ОК" "Омена"

Не могу поймать когда срабатывает событие OK_OnClick() или Cancel_OnClick()... Приведенный выше код не работает в 4ке
А задача не закрыть окно при нажатии Enter, а отработать как Tab. Такое вообще возможно?

Re: Нажатие стандартных кнопок "ОК" "Омена"

Shoorup пишет:

Не могу поймать когда срабатывает событие OK_OnClick() или Cancel_OnClick()... Приведенный выше код не работает в 4ке
А задача не закрыть окно при нажатии Enter, а отработать как Tab. Такое вообще возможно?

Походу, облом с этим. Событие стандартных кнопок OK/Cancel можно поймать только на закрытии диалога свойств объекта.