Pesquise no Blog

 

terça-feira, 15 de janeiro de 2008

Percorrendo Todos os Componentes de Um Formulário

Uma situação bastante comum é precisar percorrer todos os componentes, de uma ou mais classes, contidos em um formulário ou container qualquer, para usar um método ou atributo dos mesmos.

Exemplo:

  • Fechar todas as conexões de queries;

  • Limpar todos os campos da tela;

  • Desativar todos os botões da tela.

Ao inserir cada componente em um formulário ou container, o mesmo receberá um índice iniciado de zero, no qual será identificado. Além disso, existe o atributo ComponentCount no qual é armazenado o número de componentes existentes no formulário ou container.

Um detalhe importante, é que cada componente inserido, será referenciado em um vetor da classe TComponent. Esse vetor é o atributo Components de cada formulário ou container.



procedure TfrmExemplo.percorrerComponentes;
var
i: Integer;
begin
{ Percorre por todos os componentes que têm frmExemplo como parent. }
for i := 0 to frmExemplo.ComponentCount - 1 do
begin
{ Verifica se o componente de índice i é da classe TEdit }
if frmExemplo.Components[i] is TEdit then

{ Usando um casting, o componente de índice i será convertido em TEdit, }
{ possibilitando que qualquer método ou atributo do mesmo possa ser usado. }

TEdit(frmExemplo.Components[i]).Clear;
end;
end;

2 comentários:

Mike disse...

E se eu quiser percorrer todos os componentes mas pra cada tipo localizado fazer uma coisa diferente??

tipo:

se Componente[i] is ComboBox
faça alguma coisa

se Componentes[i] is CheckBox
faça outra coisa

como fazer isso???

Dnv-X disse...

Mike, ali no exemplo tem a seguinte linha:

if frmExemplo.Components[i] is TEdit then

Esse IF está verificando se o component é um Edit, vc pode trocar fazer esses teste para qualquer tipo: TComboBox, TLabel, e etc.