Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Llamar a un evento desde código (https://www.clubdelphi.com/foros/showthread.php?t=52472)

dardo 22-01-2008 15:02:29

Llamar a un evento desde código
 
Hola,
tengo un botón que tiene un evento OnClick, con su código.
Necesito llamar a ese evento desde código, sin pinchar el botón.
Además lo tengo que hacer desde otro formulario.
Es decir, estoy en un formulario X, desde código abro otro formulario Y, además al abrirlo ejecuto el evento OnClik de un botón de este formulario Y.
¿Cómo se llama a ese evento?
Gracias.

dec 22-01-2008 15:10:54

Hola,

Al evento podría llamarse tal que así:

Código Delphi [-]
Form2.Button1OnClick(nil);

Como si fuera cualquier otro método de la clase, como en realidad es. Sin embargo, según tengo entendido no parece muy buena idea hacer ese tipo de llamadas. ¿Tal vez el código del evento en cuestión debería constituir un método aparte que pudiera ser llamado de forma "más natural"? Es posible que pueda hacerse de otro modo lo mismo que persigues... depende de qué sea.

espericueta 22-01-2008 16:38:24

Click
 
Hola que tal tambien puedes hacer que se lance el evento con :

Código Delphi [-]
formy.boton.click

sin embargo como dice David esto no es lo mejor , podrias crear un procedimiento o una funcion , y asi llamarlos desde donde necesites sin necesidad de estar invocando un evento.

dardo 23-01-2008 08:27:00

Gracias por vuestros comentarios.
Al escribirlo como me decís me da un mensaje de error "This form or method can only allowed for class methods".
Lo hacía así porque hay dos formas de acceder a ese segundo formulario que puede tener dos contenidos, desde el formulario anterior seleccionando una opción elegía el contenido, o también podría hacerlo entrando en ese segundo formulario y pinchando el botón, por eso quería aprovechar el código del evento del botón para acceder directamente desde el formulario anterior.
Lo voy a probar haciendo funciones, y que los eventos de los botones llamen a las funciones.
Saludos.

dec 23-01-2008 10:06:47

Hola,

Tal vez estás intentando llamar a un método de una clase "estática" que no es tal. Es decir, en lugar de algo como esto:

Código Delphi [-]
Form2.Metodo();

... suponiendo que "Form2" es una variable que guarda una instancia de "TForm2" (por ejemplo) y que es "correcto", puedes estar codificando algo como:

Código Delphi [-]
TForm2.Metodo();

... directamente, lo que no sería válido, a no ser que "TForm2" fuera una clase "estática", es decir, que no requiere de instanciación alguna. Pero, esto último no es lo común, mucho menos en el caso de clases "formularios".

En todo caso no vas por mal camino (en mi opinión) si te decides a utilizar funciones, procedimientos o métodos, que no sean propiamente eventos, porque un evento no debería ser llamado por ti.

El ejemplo del "onclick" es bastante claro: el evento debería lanzarse cuando se hace clic en cierto lugar y no de otro modo, puesto que entonces se están confundiendo las cosas. Supongamos algo de código:

Código Delphi [-]
Unit Form1;

interface

uses
  Forms {...};

type
  TForm1 = class(TForm)
  public
    procedure Button1Click(Sender: TObject);
  end;

implementation

{TForm1}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Self.Caption := 'ClubDelphi';  
end;

end.

Si quieres cambiar el "Caption" del formulario a "ClubDelphi", lo suyo no es que llames al evento "Click" del botón que hace esa tarea, sino, plantearte el asunto más o menos de este otro modo:

Código Delphi [-]
Unit Form1;

interface

uses
  Forms {...};

type
  TForm1 = class(TForm)
  public
    procedure Button1Click(Sender: TObject);
    procedure CambiaCaption(newCaption: string);
  end;

implementation

{TForm1}

procedure TForm1.CambiaCaption(newCaption: string);
begin
  Self.Caption := newCaption;  
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Self.CambiaCaption('ClubDelphi');
end;

end.

Ahora en el evento haces uso de un método para hacer lo que quieres, un método que no es un evento, y que forma parte también, en este caso, de la clase "TForm1". Pues bien, si ahora quisieras cambiar el "Caption" del formulario desde otro lugar, no usarías el evento "Onclick" del botón de marras, sino el método que sirve, precisamente, para lo que quieres hacer, y que puedes usar en donde mejor te parezca: sea en el evento "Onclick" de un botón, o desde cualquier otro sitio.

dardo 23-01-2008 10:48:24

Muchas gracias, así lo he hecho, es mucho más lógico, no se en qué estaría pensando para intentar hacerlo llamando directamente a eventos.
Saludos a todos.

dec 23-01-2008 10:51:55

Hola,

No te preocupes. Que levante la mano quien nunca se haya propuesto eso y cosas "peores" aún. :rolleyes: ;)


La franja horaria es GMT +2. Ahora son las 08:48:27.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi