Ir ao conteúdo
  • Cadastre-se

Qual a diferença entre TEdit(sender) e (sender as TEdit)??


Visitante: makarioszen

Posts recomendados

Isso dai se chama "Typecasting"

você tratar um objeto como um objeto diferente mas relacionado.

o operador "is" é como você estivesse perguntando se?

e o operador "as" é você está se referindo como


{Aqui você está dizendo que o button1 está sendo enviado como um Objeto}
procedure TForm1.Button1Click(Sender: TObject);
begin
if sender is TEdit then {Aqui você perguntou se o Sender que está sendo chamado no momento é da classe TEdit}
Label1.Caption:= 'Até mais mundo!'
else
(sender as TButton).Caption := 'Olá mundo!'; {Aqui você pegou o Sender como um TButton}
end;

Typecasting é muito útil para fazer ações dependendo do que for acionado, alguns exemplos:

Todas as vezes que o usuário pressionar qualquer botão fazer alguma ação, verificar componentes(muito útil para limpar todos os componentes em que você escreve tipo Edit e memo)

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

A questão é: E se o sender não for um TButton?

Sender é o objeto que chamou o evento..

Logo, poderiamos colocar o seguinte código no evento OnChange (por exemplo) para todas as TEdits de um form:

[COLOR="Red"][B]TEdit[/B][/COLOR]([COLOR="Blue"][B]Sender[/B][/COLOR]).Text := [COLOR="Orange"][b]'Texto da TEdit'[/b][/COLOR];

Isso vai fazer com que ao digitar qualquer coisa em qualquer TEdit o texto dela vá para "Texto da TEdit".. porque Sender retorna qual TEdit foi, se foi a 1, a 2, etc..

Então dizemos que um componente da classe TEdit, no caso a edit que chamou o evento vai receber o valor "Texto da TEdit".

Se esta parte não ficou muito clara, por favor avise para que eu tente explicar melhor.. (não tenho muita pratica na parte de POO)

Já o (sender as TEdit) funciona assim:

Sender é, como podemos ver na declaração do evento, uma variavel do tipo TObject, e não do tipo TEdit..

Então colocamos (Sender as TEdit) para definir (como o amigo acima falou) que o Sender vai ser um TEdit para trabalharmos com suas propriedades. Poderás ver que, caso Sender não seja um tipo TEdit vai retornar o seguinte erro:

Project Project1.exe raised exception class EInvalidCast with message 'Invalid class typecast'. Process stopped. Use Step or Run to continue.

Espero que tenha ajudado.

Qualquer dúvida poste! ^_^

Abraços!

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...