2012-03-05 18 views
5

Quiero probar algunos formularios. ¿Hay alguna forma de simular la pulsación de un botón Aceptar (o Cancelar) para que se presione el botón y active los controladores de eventos que están asociados con él?¿Cómo puedo simular la presión de un botón?

+2

Consulte también esta respuesta para [delphi-gui-testing-and-modal-forms] (http://stackoverflow.com/a/6574035/576719). –

+2

¿Qué tan precisa es la simulación que quieres? ¿Debería moverse el mouse? ¿Debería aparecer el botón presionado en la pantalla? ¿Debería el botón recibir mensajes como 'wm_LButtonDown'? –

+0

@LU RD, gracias por el puntero! Me preguntaba cómo probar formas modales. Esto ayuda. – Arnold

Respuesta

17

El enfoque más limpio es llamar al método Click del botón. Esto es mejor que las alternativas por estos motivos:

  • Puede leer la propiedad OnClick, verificar que no sea nula y luego llamar al método. Pero eso parece bastante inútil ya que el método Click ya hace precisamente eso. No tiene sentido duplicar este código.
  • Y podría llamar al controlador de eventos directamente, pero eso requeriría que su código lo supiera. Eso implica un nivel indeseable de acoplamiento a los detalles de implementación.
  • Llamando Click replica lo que sucede realmente cuando el usuario hace clic. Es es lo que sucede cuando el usuario presiona el botón. Se trata de cualquier acción que esté asociada con el botón, por ejemplo. Establece los formularios propiedad ModalResult. Y así.
+0

+1, gran información ... nunca lo hubiera pensado, – PresleyDias

+0

Esto es exactamente lo que quería. Lo probé y funciona, lo que me facilita la prueba de formularios. ¡Muchas gracias! – Arnold

5

btn_ok.click o btn_okClick(sender);

1

que llama al gestor de eventos OnClick no llamar controlador de eventos predeterminado del Delphi, pero sólo el implementado por el usuario. Creo que deberías crear tu propia clase derivada de TCustomButton e implementar una función que llame al método Click (está protegido).

+5

'TCustomButton.Click' es público, no está protegido. –

+0

Sí, simplemente llame a 'Haga clic' en una instancia' TButton'. Sin necesidad de derivación. –

+0

Es público en VCL, y está protegido en Firemonkey. – naXa

-1

Es mejor utilizar el método del botón =>

button1.PerfomClick() 

PerformClick() Si el botón no está en el estado correcto para hacer clic (habilitado falsa o no visible), no va a realizar el clic EventMethod.

+4

No hay 'PerformClick' en el VCL. Hay un 'PerformClick' en WinForms. Tal vez eso es a lo que te refieres. –

Cuestiones relacionadas