Как я могу имитировать нажатие кнопки?

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

4 ответа

Решение

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

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

btn_ok.click или же btn_okClick(sender);

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

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

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

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

MyButton.Click;
MyButton.Down := True;

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

button1.PerfomClick()

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

Другие вопросы по тегам