Как я могу имитировать нажатие кнопки?
Я хочу проверить некоторые формы. Есть ли способ имитировать нажатие кнопки Ok (или Отмена), чтобы кнопка была нажата и запускала обработчики событий, связанные с ней?
4 ответа
Самый чистый подход - вызвать метод Click кнопки. Это лучше, чем альтернативы по этим причинам:
- Вы можете прочитать свойство OnClick, убедиться, что оно не равно nil, а затем вызвать метод. Но это кажется довольно бессмысленным, поскольку метод Click уже делает именно это. Нет смысла дублировать этот код.
- И вы можете вызывать обработчик событий напрямую, но для этого потребуется, чтобы ваш код знал об этом. Это подразумевает нежелательный уровень связи с деталями реализации.
- призвание
Click
воспроизводит то, что на самом деле происходит, когда пользователь нажимает. Это то, что происходит, когда пользователь нажимает кнопку. Это касается любых действий, связанных, например, с кнопкой. Он устанавливает свойство ModalResult формы. И так далее.
Вызов OnClick
Обработчик событий не будет вызывать обработчик событий Delphi по умолчанию, а только тот, который реализован пользователем. Я думаю, что вы должны создать свой собственный класс, полученный из TCustomButton
и реализовать функцию, которая вызывает Click
метод (защищен).
Исправление для TSpeedButton:
Поведение, описанное @David Heffernan, не совсем верно для скоростных кнопок в группе. Вызов метода Click, похоже, не влияет на состояние кнопок "Вниз".
Чтобы решить эту проблему, я использовал следующий код:
MyButton.Click;
MyButton.Down := True;
Лучше использовать PerformClick()
метод кнопки =>
button1.PerfomClick()
Если ваша кнопка не в нужном состоянии для нажатия (включена ложь или не видна), она не будет выполнять метод события click.