1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[VB6] Alterar o focus de uma TextBox utilizando CommandButtons

Discussão em 'Programação' iniciada por raVemjr, 26 de Abril de 2008. (Respostas: 12; Visualizações: 4615)

  1. raVemjr

    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: 27 de Abril de 2008
  2. jpaulino

    jpaulino Power Member

    Penso que não seja possível.

    Coloca uma Frame, inseres uma label lá dentro e finalmente defines o BorderStyle = 0 (None )
     
  3. raVemjr

    raVemjr I'm cool cuz I Fold

    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: 26 de Abril de 2008
  4. jpaulino

    jpaulino Power Member

    Humm penso que não dá!
     
  5. raVemjr

    raVemjr I'm cool cuz I Fold

    É pena, vai ter que ficar a azul então...obrigado pela ajuda ;)
     
  6. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

  7. jpaulino

    jpaulino Power Member

    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
    
    
     
  8. raVemjr

    raVemjr I'm cool cuz I Fold

    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: 27 de Abril de 2008
  9. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    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?
     
  10. raVemjr

    raVemjr I'm cool cuz I Fold

    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?
     
  11. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    "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: 27 de Abril de 2008
  12. raVemjr

    raVemjr I'm cool cuz I Fold

    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...
     
  13. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    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.
     

Partilhar esta Página