Propriedade quot;ComponentCountquot; - Mistério!!

02/10/2004

0

Olá pessoal,

em um Form tenho um PageControl com 3 TabSheets.

Dentro de uma TabSheet tenho 5 Edits.

A minha dúvida é a seguinte: estou tentando recuperar a quantidade de componentes dentro de uma TabSheet da seguinte forma:

TabSheet.ComponentCount

porém sempre me retorna 0. Ora, se dentro da TabSheet em questão há 5 Edits como pode a propriedade ComponentCount estar retornando 0?

Abraços...
Anderson Dibo


Anddibo

Anddibo

Responder

Posts

02/10/2004

Tatuweb

Olá,

Já respondi uma dúvida desse tipo. Clique no lnk abaixo para ver uma solução.
:arrow: http://delphiforum.icft.com.br/forum/viewtopic.php?t=43638

Para chamar a função você usa:
ShowMessage (IntToStr (CompsParent (TabSheet3)));



Responder

05/10/2004

Anddibo

valeu TatuWeb,

resolveu meu problema. Obrigado!! :D


Mas ainda continua no ar a questão do ´ComponentCount´. Seria um bug do Delphi? :(


Abraços...
Anderson Dibo


Responder

05/10/2004

Emerson Nascimento

tente

TabSheet.ControlCount


Responder

06/10/2004

Anddibo

Valeu Emerson,

a propriedade ControlCount funciona legal. :D


Abraços...
Anderson Dibo


Responder

06/10/2004

Rômulo Barros

Olá, Já respondi uma dúvida desse tipo. Clique no lnk abaixo para ver uma solução. :arrow: http://delphiforum.icft.com.br/forum/viewtopic.php?t=43638 Para chamar a função você usa:
ShowMessage (IntToStr (CompsParent (TabSheet3)));


Muito legal, TatuWeb. Mas, por outro lado, vamos analisar a seguinte situação:

:arrow: [color=red:dd80ba43ab][b:dd80ba43ab]1 - Quero acessar todos o edits do meu form e alterar a propriedade Text de cada uma para ´Valor Teste´.[/b:dd80ba43ab][/color:dd80ba43ab]

...
Var
  C : Integer;
Begin
  For C := 0 To Form.ComponentCount -1 Do
  Begin
     If(Components[C] Is TEdit)Then
        TEdit(Components[C]).Text := ´Valor Teste´;
  End;
End;
...

:wink: [color=blue:dd80ba43ab][b:dd80ba43ab]Até aí, tudo bem. Consegui alterar todos os edits do meu form.[/b:dd80ba43ab][/color:dd80ba43ab]

:?: [color=darkred:dd80ba43ab][b:dd80ba43ab][u:dd80ba43ab]Mas, utilizando a sua function, como devo prosseguir para alterar a propriedade Text de todos os edits de apenas uma TabSheet?[/u:dd80ba43ab][/b:dd80ba43ab][/color:dd80ba43ab]


Responder

06/10/2004

Keitarosan

Bom, respondendo a dúvida do nosso amigo [b:5cea856a8f]anddibo[/b:5cea856a8f], pode ter certeza que isso não é bug, a explicação é bem simples, você não consegue acessar o tal edit pela propriedade ComponentCount ou Components do TabSheet pelo simples motivo que esses Edits foram criados pelo Form e nao pelo TabSheet... ou seja, eles ´pertencem´ ao Form...
Em tempo de desenvolvimento eu não sei criar objetos que nao pertençam ao Form, mas em Tempo de Execução tente isso aqui pra você entender o que eu digo:

evento onClick de um botao:
var
  Edit: TEdit;
begin
  Edit := TEdit.Create(TabSheet1); //Com o TabSheet1 como o parametro, você criará o Edit como sendo um componente pertencente do TabSheet1, independente de quem seja o "pai" dele...
  Edit.Parent := TabSheet1; //Sim, você precisa desta linha, você criou um componente pertencente ao TabSheet1, mas não falou quem seria o "pai" dele, se você omite esta informação, o componente não aparecerá...
  //feiro estas duas linhas acima, você tem 1 componente dentro do TabSheet, nesse momento a propriedade ComponentCount do TabSheet é igual a 1
end;

:wink: Entendeu o funcionamento da parada??

Agora qnt a pergunta do [b:5cea856a8f]Undeclared[/b:5cea856a8f],
Basta alterar um pokinho esta funcao para que ela fique do jeito que você quer, basta fazer isso daqui:
Var
  C : Integer;
Begin
  For C := 0 To Form.ComponentCount -1 Do
  Begin
    If (Components[C] Is TEdit) Then
      if (Components[C] as TEdit).Parent = TabSheet1 then
        TEdit(Components[C]).Text := ´Valor Teste´;
  End;
End;


Onde TabSheet1 é o tabSheet desejado.... ou painel, ou qualquer outro tipo de Container :D


Responder

06/10/2004

Rômulo Barros

Agora qnt a pergunta do [b:d254f3b780]Undeclared[/b:d254f3b780], Basta alterar um pokinho esta funcao para que ela fique do jeito que você quer, basta fazer isso daqui:
Var
  C : Integer;
Begin
  For C := 0 To Form.ComponentCount -1 Do
  Begin
    If (Components[C] Is TEdit) Then
      if (Components[C] as TEdit).Parent = TabSheet1 then
        TEdit(Components[C]).Text := ´Valor Teste´;
  End;
End;
Onde TabSheet1 é o tabSheet desejado.... ou painel, ou qualquer outro tipo de Container :D


:arrow: [color=blue:d254f3b780][b:d254f3b780]Beleza, Cara !! Deu certinho mesmo !![/b:d254f3b780][/color:d254f3b780]

[b:d254f3b780]Ass:[/b:d254f3b780] [color=blue:d254f3b780][u:d254f3b780][i:d254f3b780]Undeclared Identifier[/i:d254f3b780] - Em exibição nos cinemas[/u:d254f3b780][/color:d254f3b780]


Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar