Как я могу имитировать нажатие кнопки? - PullRequest
5 голосов
/ 05 марта 2012

Я хочу проверить некоторые формы.Есть ли способ имитировать нажатие кнопки Ok (или Отмена), чтобы кнопка была нажата и запускала обработчики событий, связанные с ней?

Ответы [ 5 ]

20 голосов
/ 05 марта 2012

Самый чистый подход - вызвать метод Click кнопки.Это лучше, чем альтернативы по следующим причинам:

  • Вы можете прочитать свойство OnClick, убедиться, что оно не равно nil, а затем вызвать метод.Но это кажется довольно бессмысленным, поскольку метод Click уже делает именно это.Нет смысла дублировать этот код.
  • И вы можете вызвать обработчик событий напрямую, но для этого потребуется, чтобы ваш код знал об этом.Это подразумевает нежелательный уровень привязки к деталям реализации.
  • Вызов Click воспроизводит то, что действительно происходит, когда пользователь нажимает.Это равно , что происходит, когда пользователь нажимает кнопку.Это касается любых действий, связанных, например, с кнопкой.Устанавливает свойство форм ModalResult.И так далее.
5 голосов
/ 05 марта 2012

btn_ok.click или btn_okClick(sender);

1 голос
/ 05 марта 2012

Вызов обработчика события OnClick не вызовет обработчик событий Delphi по умолчанию, а только тот, который реализован пользователем.Я думаю, что вы должны создать свой собственный класс, полученный из TCustomButton, и реализовать функцию, которая вызывает метод Click (он защищен).

0 голосов
/ 24 марта 2019

Исправление для TSpeedButton:

Поведение, описанное @David Heffernan, не совсем верно для скоростных кнопок в группе.Вызов метода Click, похоже, не влияет на состояние кнопок «Вниз».

Чтобы решить эту проблему, я использовал следующий код:

MyButton.Click;
MyButton.Down := True;
0 голосов
/ 05 марта 2012

Лучше использовать метод PerformClick() для кнопки =>

button1.PerfomClick()

Если ваша кнопка не в нужном состоянии для нажатия (включена ложь или не видна), она не будет выполнятьщелкните метод события.

...