Fórum Erro: ´onExit´ #168523

09/07/2003

0

Qdo. o formulário é aberto, está dando um erro do evento onExit de um edit, sendo que os outros edits têm o mesmo evento, com mesmo conteúdo!!

O que pode ser?


Fatima

Fatima

Responder

Posts

09/07/2003

Fred

coloque seu código aqui.


Responder

Gostei + 0

09/07/2003

Fatima

Qdo. o form. é ativado, desabilito 2 painéis. Com o clique de um botão, um dos painéis é abilitado: (Panel1.Enabled:= True)... Este Panel tem um Edit que tem um evento onExit... este evento está funcionando perfeitamente, em um determinado momento do código deste evento, dependendo da condição, eu abilito o 2º Painel, mas só neste momento!!!

Este 2º Painel tem outro Edit, que também tem um evento onExit, no qual eu digo, dependendo da condição, Edit2.SetFocus...


E ao ´rodar´ o prog., ele dá uma msg. de erro: ´Não pode setar foco em uma janela desabilitada!!´

E então ao ´rodar´ passo a passo, percebi que ele pula do evento onActivate (do Form), no ponto em que eu digo: Panel2.Enabled:= FALSE, para o evento onExit (do Edit) do Panel2, no momento em que eu digo Edit2.SetFocus (do mesmo painel)!!!

Porque ele dá esse ´pulo´ ao ´rodar´??

Obrigada!!!!!


Responder

Gostei + 0

09/07/2003

Carnette

Cuidados ao usar o OnExit (Parte I):
É comum fazermos uso do evento OnExit quando queremos validar o conteúdo de um Edit. E essa pode ser uma boa prática quando necessitamos verificar o que foi digitado apenas quando o usuário terminar de fazer a entrada de dados, como, por exemplo, um Edit que vai receber o CPF ou CNPJ.

Ao colocarmos um código qualquer no evento OnExit ele sempre será executado quando o usuário sair do Edit, o que acontece quando ele pressiona a tecla TAB, clica com o mouse em um outro Edit ou pressiona um botão OK, por exemplo.

No entanto, existem algumas situações especiais em que o evento OnExit não é gerado. Quer um exemplo? Você está no Edit e, ao invés de clicar no botão OK, você pressiona as teclas ALT + O (considerando que o botão OK tem a tecla O como atalho). É como se você tivesse pressionado o botão OK, porém, sem perder o foco que está no Edit. Só mais um exemplo: Os botões do tipo SpeedButton não recebem foco, então, mesmo que clique com o mouse sobre um SpeedButton, o foco continuará no Edit e, conseqüentemente, o evento OnExit não será gerado.

E a solução?

A solução para esse pequeno inconveniente é simples. Basta você colocar o seguinte código no evento OnClick do botão.

procedure TForm1.Button1Click(Sender: TObject);
begin
ActiveControl := nil;
...
end;
Com isso você força a saída de qualquer Edit ou outro componente que esteja com o foco, gerando assim o evento OnExit.


Responder

Gostei + 0

09/07/2003

Fatima

Qdo. o form. é ativado, desabilito 2 painéis. Com o clique de um botão, um dos painéis é abilitado: (Panel1.Enabled:= True)... Este Panel tem um Edit que tem um evento onExit... este evento está funcionando perfeitamente, em um determinado momento do código deste evento, dependendo da condição, eu abilito o 2º Painel, mas só neste momento!!!

Este 2º Painel tem outro Edit, que também tem um evento onExit, no qual eu digo, dependendo da condição, Edit2.SetFocus...


E ao ´rodar´ o prog., ele dá uma msg. de erro: ´Não pode setar foco em uma janela desabilitada!!´

E então ao ´rodar´ passo a passo, percebi que ele pula do evento onActivate (do Form), no ponto em que eu digo: Panel2.Enabled:= FALSE, para o evento onExit (do Edit) do Panel2, no momento em que eu digo Edit2.SetFocus (do mesmo painel)!!!

Porque ele dá esse ´pulo´ ao ´rodar´??

Obrigada!!!!!


Responder

Gostei + 0

31/05/2016

Jose Nascimento

Olá, não sei porque ocorre este erro, porem resolvi assim: Ao invés de chamar o form com o showmodal, chame com o show compila e depois altera pra showmodal e compila, nao me pergunte porque ocorre este erro e muito menos porque fazendo isto resolve. So sei que resolve rsrsrsrsrsrsrs!
Boa sorte!
Responder

Gostei + 0

01/06/2016

Rafael Bosco

Utilize um procedimento interno do componente TEdit:

   
   if Edit2.CanFocus then
     Edit2.SetFocus;
 


Ou seja, se o Edit2 poderá ter o foco, define o Foco, caso contrário, a sua mensagem de erro não irá ocorrer. Abraço
Responder

Gostei + 0

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

Aceitar