Clipper On Line • Ver Tópico - Dúvida sobre foco em um controle

Dúvida sobre foco em um controle

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Dúvida sobre foco em um controle

Mensagempor Paulo_CPV » 13 Mar 2014 11:48

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?

  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
Paulo_CPV
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 178
Data de registro: 07 Mar 2013 10:27
Cidade/Estado: Jacarei/SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Dúvida sobre foco em um controle

Mensagempor Toledo » 13 Mar 2014 19:20

Amigo, faz o seguinte:

Coloque:
ON ENTER {|| ValidaCampo( This.Value) }


Altere a função:
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
Avatar de usuário

Toledo
Administrador

Administrador
 
Mensagens: 3038
Data de registro: 22 Jul 2003 18:39
Cidade/Estado: Araçatuba - SP
Curtiu: 263 vezes
Mens.Curtidas: 258 vezes

Dúvida sobre foco em um controle

Mensagempor Paulo_CPV » 13 Mar 2014 22:26

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
Paulo_CPV
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 178
Data de registro: 07 Mar 2013 10:27
Cidade/Estado: Jacarei/SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Dúvida sobre foco em um controle

Mensagempor Toledo » 14 Mar 2014 00:26

Amigo, segue um exemplo:

#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
Avatar de usuário

Toledo
Administrador

Administrador
 
Mensagens: 3038
Data de registro: 22 Jul 2003 18:39
Cidade/Estado: Araçatuba - SP
Curtiu: 263 vezes
Mens.Curtidas: 258 vezes




Retornar para MiniGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 9 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro