Dúvida sobre foco em um controle

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Paulo_CPV
Usuário Nível 3
Usuário Nível 3
Mensagens: 178
Registrado em: 07 Mar 2013 10:27
Localização: Jacarei/SP

Dúvida sobre foco em um controle

Mensagem por Paulo_CPV »

Bom dia!

Eu tenho uma função de validação em um controle TEXTBOX que valida se o usuário pressionou ENTER ele verifica se o conteúdo é em branco se for vazio o conteúdo mostra uma mensagem para o usuário digitar novamente.

Mas isto não está acontecendo, pois ele não permanece no foco no TEXTBOX correspondente, ele está indo para o próximo TEXTBOX. O que pode ser isto?

Código: Selecionar todos

  DEFINE TEXTBOX Text_1
      
            ROW    25
            COL    7
            WIDTH  132
            HEIGHT 20
            FONTNAME "Arial"
            FONTSIZE 10
            FONTBOLD .T.
            ON ENTER {|| IF( ValidaCampo( This.Value) = .F. , Form_1.Texbox_1.SetFocus , Form_1.Textbox_2.SetFocus ) }
         
         END TEXTBOX

FUNCTION ValidaCampo( cCampo )

LOCAL lRet

IF EMPTY( cCampo )

   MSGBOX("Campo não pode ser em branco !")

   lRet := .F.

ELSE

    lRet := .T.

ENDIF

RETURN ( lRet )

Abraços,

Paulo - Jacareí/SP
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Dúvida sobre foco em um controle

Mensagem por Toledo »

Amigo, faz o seguinte:

Coloque:

Código: Selecionar todos

ON ENTER {|| ValidaCampo( This.Value) }
Altere a função:

Código: Selecionar todos

FUNCTION ValidaCampo( cCampo )
LOCAL lRet:=EMPTY( cCampo )
IF lRet
   MSGBOX("Campo não pode ser em branco !")
   Form_1.Text_1.SetFocus
ENDIF
RETURN (!lRet)
As alterações acima vão funcionar corretamente se você estiver usando o comando SET NAVIGATION EXTENDED no início do seu programa.

Obs.: no seu exemplo na mensagem anterior o setfocus está sendo feito em Texbox_1, mas o nome que você definiu no objeto TEXTBOX é Text_1. Tome cuidado com isto.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Paulo_CPV
Usuário Nível 3
Usuário Nível 3
Mensagens: 178
Registrado em: 07 Mar 2013 10:27
Localização: Jacarei/SP

Dúvida sobre foco em um controle

Mensagem por Paulo_CPV »

Boa noite!

Toledo muito obrigado por mais uma vez me dar uma orientação, deu certo as modificações que você me passou, mas agora se eu quiser por esta função em vários controles TEXTBOX o que eu devo fazer para que de certo para o meu formulário inteiro?

Abraços,

Paulo - Jacareí/SP
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Dúvida sobre foco em um controle

Mensagem por Toledo »

Amigo, segue um exemplo:

Código: Selecionar todos

#include "minigui.ch"

Function Main()

   SET NAVIGATION EXTENDED

   DEFINE WINDOW Form_1 ;
      AT 0,0 ;
      WIDTH 400 HEIGHT 300 ;
      TITLE 'Exemplo de Controle de Focus' ;
      MAIN

      DEFINE LABEL Label_1
        ROW	10
        COL	10
        WIDTH	60
        VALUE 'Campo 1:'
      END LABEL

      DEFINE TEXTBOX Text_1
        ROW	10
        COL	70
        WIDTH	180
        ON ENTER {|| ValidaCampo(This.Value) }
      END TEXTBOX

      DEFINE LABEL Label_2
        ROW	38
        COL	10
        WIDTH	60
        VALUE 'Campo 2:'
      END LABEL

      DEFINE TEXTBOX Text_2
        ROW	38
        COL	70
        WIDTH	180
        ON ENTER {|| ValidaCampo(This.Value) }
      END TEXTBOX

      DEFINE LABEL Label_3
        ROW	66
        COL	10
        WIDTH	60
        VALUE 'Campo 3:'
      END LABEL

      DEFINE TEXTBOX Text_3
        ROW	66
        COL	70
        WIDTH	180
        ON ENTER {|| ValidaCampo(This.Value) }
      END TEXTBOX

   END WINDOW

   Form_1.Center
   Form_1.Activate

Return Nil

************************************
FUNCTION ValidaCampo( cCampo )
LOCAL lRet:=EMPTY( cCampo ), cFrmName, cCmpName
IF lRet
  MsgInfo("Campo não pode ser em branco !","Preenchimento Inválido")
  cFrmName := thiswindow.name
  cCmpName := this.focusedcontrol
  SETFOCUS &(cCmpName) OF &(cFrmName)
ENDIF
RETURN (!lRet)
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Responder