Página 1 de 1

Dúvida sobre foco em um controle

Enviado: 13 Mar 2014 11:48
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

Dúvida sobre foco em um controle

Enviado: 13 Mar 2014 19:20
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,

Dúvida sobre foco em um controle

Enviado: 13 Mar 2014 22:26
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

Dúvida sobre foco em um controle

Enviado: 14 Mar 2014 00:26
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,