Programación General > Delphi
Cast Para Controles
(1/1)
senzao18:
Hola tengo lo siguiente
form1.Components[1] <----Esa linea hace referencia a un control en un form como le hago para poder aplicar un cast o algo por el estilo para poder manejar las propiedades de ese control.
if form1.Components[5].ClassName = 'TLabel' then
showmessage(form1.Components[1].Name)
Con el codigo anterior comaro si el control es un TLabel y posteriormente muestor su nombre, pero lo que ocupo es sacar las propiedades de ese control sin tener que poner Label1.Caption sino algo asi ---> form1.Components[5].Caption <--- Eso no funciona.
Espero y puedan ayudarme.
Gracias.
Enko:
esta la palabra reservada "is" que se usa tal como se traduce...
si El Componente es TLabel entonces......
--- Código: Text --- if Form1.Components[1] is TLabel then with TLabel(Form1.Component[1]) do begin ........end///o TLabel(Form1.Component[1]).Text := 'Algo';
Otra de las palabras reservadas utilies es "as"...
Con Componente como TButton hacer...
--- Código: Text --- with Form1.Components[1] as TButton dobegin... El problema esta si el componente dicho, no es un TButton, delphi lanzara una excepcion.
ALGO QUE NUNCA SE DEBE HACER
--- Código: Text --- if sender is TComboBox thenwith sender as TComboBox dobegin..... Para que se quiere pasar al sender como TComboBox sabiendo que si es combobox.
Para eso se usa la manera de ariba de todo.
senzao18:
Gracias lo probaré , pero al ver el código me suena muy lògico casi estoy seguro que funcionara.
hasta pronto.
Enko:
--- Código: Text --- procedure TForm1.Button1Click(Sender: TObject);begin if Form1.Components[0] is TLabel then TLabel(Form1.Components[0]).Caption := 'Funciona';end; Pues si funciona.
Aunque no creo que sea la forma de hacerlo.
Lo mejor es que definas tu propio procedimiento para el evento especifico y se lo asignes a los compontes que necesites y luego hagas un Cast con el parametro Sender.
Te paso el codigo completo....
Necesitaras tener en tu form un label1 y un button1....
--- Código: Text ---unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; procedure FormCreate(Sender: TObject); private procedure MyClick(Sender: TObject); public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.MyClick(Sender: TObject);begin if Sender is TLabel then ShowMessage('Presionaste un Label') else if Sender is TButton then ShowMessage('Presionaste un boton');end; procedure TForm1.FormCreate(Sender: TObject);begin Button1.OnClick := MyClick; Label1.OnClick := MyClick;end; end.
Navegación
Ir a la versión completa