Imprimi Página | Fechar janela

SetFocus em um campo em tela MVC

Impresso de: Helpfacil - Portal do conhecimento
Nome do Forum: ADVPL
Descrição do Forum: Dúvidas sobre a programação em ADVPL
URL:http://www.helpfacil.com.br/display_topic_threads.asp?ForumID=1&TopicID=41705
Data da Impressão: terça-feira, 23 de abril de 2024 at 05:12


Topico: SetFocus em um campo em tela MVC

Postado por: LEXX
Assunto: SetFocus em um campo em tela MVC
Data Postagem: quarta-feira, 21 de fevereiro de 2018 at 17:58

Boa tarde,

Estou criando uma rotina em MVC, que tera 2 tabelas (cabeçalho e itens).

oView:AddField("vfZAD" , oStruZAD , "mfZAD") // field
oView:AddGrid("vgZAE" , oStruZAE , "mgZAE") // grid

No FIELD tem apenas 1 campo habilitado para digitar, e quando é digitado, ele vai no grid preenche as informações de acordo com o que foi digitado nesse campo, ele volta no campo e limpa o que foi digitado mas o foco permanece lá no GRID.

Como faço para tirar o foco do GRID e voltar ele para o campo de cima novamente?

Na criação da ViewDef usei o SetFieldAction.

oView:SetFieldAction("ZAD_CODBAR", { |oView, cIDView, cField, xValue| addLinha(oView, cIDView, cField, xValue) } )


//////////////////////////
static function addLinha(oView, cIDView, cField, xValue)
//////////////////////////

local oMZAD := oModel:GetModel(‘mfZAD‘)
local oMZAE := oModel:GetModel(‘mgZAE‘)

if len(xValue) <> 24
Alert("Atenção, o código de barras deverá ter 24 dígitos, favor verificar.")
return
endif

// vai pra última linha
oMZAE:GoLine(oMZAE:Length())

// preenche os campos
oMZAE:SetValue(‘ZAE_CODBAR‘,xValue)
oMZAE:SetValue(‘ZAE_PROD‘,POSICIONE("SB1",5,xFilial("SB1")+SubStr(xValue,1,14),"B1_COD"))
oMZAE:SetValue(‘ZAE_DESC‘,POSICIONE("SB1",5,xFilial("SB1")+SubStr(xValue,1,14),"B1_DESC"))
oMZAE:SetValue(‘ZAE_NLOTE‘,SubStr(xValue,15,5))
oMZAE:SetValue(‘ZAE_QUANT‘,1)
oMZAE:SetValue(‘ZAE_ARMO‘,‘PR‘)
oMZAE:SetValue(‘ZAE_ARMD‘,‘EX‘)

// adiciona um alinha
oMZAE:AddLine()

// limpa o campo código de barras para ler novamente
oMZAD:SetValue(‘ZAD_CODBAR‘,‘‘)

// aqui, preciso voltar o focus para o campo do código de barras novamente para continuar fazendo a leitura.

Joguei no google, achei esse site.
https://pt.stackoverflow.com/questions/150088/como-setar-o-foco-em-um-componente-do-mvc

Tentei fazer assim:
local oCodBar := oView:GetViewObject(cIDView)
oCodBar:SetFocus()

Mas deu erro, falando que o oCodBar não é um objeto.

Alguma ideia?


Respostas:

Postado Por: LEXX
Data Postagem: sexta-feira, 23 de fevereiro de 2018 at 15:51


Boa tarde, ninguém aqui manja de trabalhar com objetos em mvc?
Não queria recorrer a outras linguagens, pra fazer isso.




Postado Por: JALBERTO
Data Postagem: sexta-feira, 23 de fevereiro de 2018 at 16:58

Trabalho com MVC mas nunca precisei mudar o foco de um campo.

Terá que fazer alguns outros testes, como por exemplo, adicionar um gatilho para que o sistema carregue os dados no grid e também "forçe" o sistema a ficar no campo ( talvez fazer com que o usuário possa sair do campo somente com ele vazio ).

Deve ter alguma maneira de contornar o sistema pois parece que não tem como mudar o foco.


Jorge Alberto
Skype: jalberto2004



Postado Por: RUBEM_MN2
Data Postagem: sábado, 24 de fevereiro de 2018 at 17:38

Boa tarde.

Com gatilho você consegue fazer.



Postado Por: LEXX
Data Postagem: segunda-feira, 26 de fevereiro de 2018 at 15:48

Com gatilho não funciona.

Já tentei criar gatilho nesse campo apontando pra ele mesmo e limpando o campo, ele limpa mas o foco não fica nele.




Postado Por: THEEXIE
Data Postagem: segunda-feira, 6 de janeiro de 2020 at 15:48

Vou desenterrar esse post.
Estou com o mesmo problema também achei o post do stackoverflow mas não tive sucesso.
Alguém conseguiu resolver isso?



      





Imprimir Página | Fechar Janela