[VB6] Alterar o focus de uma TextBox utilizando CommandButtons

raVemjr

I'm cool cuz I Fold
Boas, eu tenho-me desenrascado com o VB, e vou fazendo uma coisa ou outra.

Fiz um menu com uma listbox, utilizando uns botões direccionais para navegar no menú, e tudo correu bem. Agora queria fazer uma espécie de ecrã de login. O problema é o seguinte: se quiser meter Labels à frente da Listbox, elas teimam em não aparecer...

Já fiz hide à Lisbox, já a mandei para traz, e a Label teima em não aparecer. Será que estou a falhar em algum lado? Ou é mesmo uma limitação do VB6?


EDIT: Agora o problema é outro. Já sei como meter o focus numa TextBox, mas quero que ele passe para a Textbox abaixo depois de carregar num command button.

O problema é que quando carrego no botão, o focus deixa de tar na caixa onde estava e não passa para a caixa seguinte, ficando no botão. Já experimentei usar um timer para despoletar o SetFocus depois do button_click, mas não acontece nada...
 
Última edição:
E se eu fizer essa frame desaparecer, dá para ver a Listbox por baixo?

EDIT: Esquece, já andei a brincar com aquilo e funciona. Não fazia ideia que se colocasse uma Label dentro da frame ou colocasse-a depois lá dentro ia dar dois resultados completamente diferentes. Muito obrigado, a ver se consigo acabar o login ainda hoje...

Já agora, não sabes se dá para alterar a cor do highlight dos items de uma ListBox?
 
Última edição:
Dar dá, mas entra numa área mais avançada - o subclassing.

Ok, não queria entrar por ai porque é mais complicado e altera as subclasses do sistema. Ou seja o que altera é o sistema e não o programa e se não se tomar algum cuidado as cores aparecem em todo o lado. Bem, mas aqui vai um exemplo:

Código:
Private Const COLOR_HIGHLIGHT = 13
Private Const COLOR_HIGHLIGHTTEXT = 14
 
Private Declare Function GetSysColor Lib "user32" (ByVal nIndex As Long) As Long
Private Declare Function SetSysColors Lib "user32" (ByVal nChanges As Long, lpSysColor As Long, lpColorValues As Long) As Long
Dim clrHL As Long, clrHLText As Long
 
Private Sub Form_Load()
List1.AddItem ("132")
List1.AddItem ("abc")
List1.AddItem ("test")
DoEvents

clrHL = GetSysColor(COLOR_HIGHLIGHT)
clrHLText = GetSysColor(COLOR_HIGHLIGHTTEXT)
End Sub
 
Private Sub List1_GotFocus()
    SetSysColors 1, COLOR_HIGHLIGHT, vbGreen
    SetSysColors 1, COLOR_HIGHLIGHTTEXT, vbBlack
End Sub
 
Private Sub List1_LostFocus()
    SetSysColors 1, COLOR_HIGHLIGHT, clrHL
   SetSysColors 1, COLOR_HIGHLIGHTTEXT, clrHLText
End Sub
 
E com o referido exemplo estou a alterar as cores do sistema ou só do form? Alterar no sistema inteiro pode (e mais provavelmente vai dar mesmo) dar barraca, conhecendo-me...
Obrigado, mas acho que vai passar ao lado. Podemos mudar o layout de modo a que o azul não fique muito mal...

Anyway, tinha outra duvida no post inicial, se ma conseguissem tirar agradecia imenso :D
 
Última edição:
Pois, o problema do subclassing é precisamente dar barraca quando não se sabe usar (e eu que o diga :x )

Não voltes a fazer isso de mudar a dúvida no tópico inicial, sff. Uma pessoa perde-se muito facilmente, assim. Para novas dúvidas, abre um novo tópico, ou coloca a nova dúvida no último post do tópico.

Em relação à tua dúvida propriamente dita, eu testei colocar um "Text2.Setfocus" num botão, e resultou plenamente. Qual é o problema com que te deparas?
 
Em relação à tua dúvida propriamente dita, eu testei colocar um "Text2.Setfocus" num botão, e resultou plenamente. Qual é o problema com que te deparas?

Realmente tá a dar também...e acho que já sei porque não tava a dar, mas não resolveu.

É o seguinte, tenho duas TextBoxes, e queria que carregando para baixo fosse para a caixa de baixo, e caso estivesse na caixa de baixo voltasse para a de cima. Estava a usar o Screen.ActiveControl para verificar qual delas está selecionada, mas pelos vistos, ao clicar no botão nenhuma das condições se verificava e o focus ficava no botão...sugestões?
 
"Carregando para baixo"? Como assim?

Se tivesses uma array de textboxes, facilitava-te o trabalho. Usando o ENTER, punhas no KeyDown da Textbox um
If Keyascii = 13 then textbox(index+1).Setfocus

Usando o ActiveControl, ao clicares no CommandButton, isso é o próprio ActiveControl.

Se não quiseres usar arrays, o que me ocorre de momento é: no GetFocus de cada textbox, mete o nome dela numa variável, e, no commandbutton, em vez de verificares o ActiveControl, verifica essa variável.
 
Última edição:
O carregar para baixo a que me refiro é um command button que tenho. Ou seja, se carregar nesse botão uma vez, passa para o próximo textbox.

As minhas textboxes não têem GetFocus, mas a ideia era essa: determinar quem tem o foco, e passar para o próximo. O passar para o próximo eu sei, basta um select case, o que me falta mesmo é uma maneira de determinar qual a textbox que tem o foco...
 
Estás a perceber mal.
Não tenho aqui o VB, mas é algo assim:
No evento GetFocus (tens o Click, Change, MouseDown, e tens o GetFocus) da text1:
variavel = "Text1"
No mesmo evento, da text2:
variavel = "Text2"

No Commandbutton, há uma forma mais simples, mas envolve outras coisas. Fica com isto:
if variavel = "Text1" then text2.setfocus else cmdok.setfocus
por exemplo. Podias também usar uma variável booleana, mas o efeito é o mesmo.
 
Back
Topo