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

Mudar Caption da Label em VB

Discussão em 'Programação' iniciada por Zero_Cool_PT, 4 de Março de 2008. (Respostas: 19; Visualizações: 3885)

  1. Zero_Cool_PT

    Zero_Cool_PT What is folding?

    Boas pessoal, como é que mudo a caption duma label entre várias frases?, p ex: lbl_lista
    De referir que pode ser um loop^^

    Dim rodar as integer
    Loop while rodar > 1

    lbl_lista.Caption = "Program is Running"
    lbl_lista.Caption = "Program is Running2"
    lbl_lista.Caption = "Program is Running3"

    ?????
     
  2. balute

    balute Power Member

    Caso não saibas, existe o operador & que serve para juntar duas strings para formar uma só. Podes usar isso para juntar uma string com a variável que está a ser incrementada.
    Código:
    For i As Integer = 1 to 10
      lbl_lista.Caption = "Program is Running" & i
    Next
    Não sei se era isto que querias...
     
  3. Zero_Cool_PT

    Zero_Cool_PT What is folding?

    mas eu não quero que incremente, aquilo foi só 1 exemplo. Tipo Passar de "Carro" para "Casa" ou "Crédito" e afins ^^
     
  4. balute

    balute Power Member

    Dá um exemplo...
    Qual é a caption da label, e como é que queres que fique?
     
  5. Zero_Cool_PT

    Zero_Cool_PT What is folding?

    tipo

    lbl_lista.caption= "Carro"
    lbl_lista.caption= "Casa"
    lbl_lista.caption="Crédito"


    e que depois vá fazendo um loop entre essas ^^
     
  6. balute

    balute Power Member

    Queres que o texto da label vá alternando de x em x tempo entre "carro", "casa" e "crédito"? Ou percebi mal outra vez? :D
    Código:
    While [alguma condição]
      lbl_lista.caption = "Carro"
      EsperarUmBocado 1000
      lbl_lista.caption = "Casa"
      EsperarUmBocado 1000
      lbl_lista.caption = "Crédito"
      EsperarUmBocado 1000
    Wend
    
    ----------
    
    Sub EsperarUmBocado(ByVal duraçao As Integer)
      DoEvents
      Sleep duraçao 'em milissegundos
    EndSub
    Também podes fazer com um timer. E as strings podem ficar num array, por exemplo.
     
  7. Zero_Cool_PT

    Zero_Cool_PT What is folding?

    é isso mas ele dá erro no sleep =/
     
  8. The_True_Eue

    The_True_Eue Power Member

    O melhor é usares um timer, um array de strings e uma variável de índice. A cada ocorrência do timer incrementas o índice e mudas a caption para a string nesse novo índice.
    O incrementar do índice tem de ser circular, isto é, ao chegar ao fim voltar a 0. Podes usar o operador de resto da divisão inteira para isso. Algo do género (em C#, não sei qual é o operador em VB, substitui o % pelo correcto):
    i = (i+1) % strings.Length;
     
  9. balute

    balute Power Member

    Tens que adicionar isto no sítio das variáveis globais:
    Código:
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Mesmo assim, acho que é preferível usar um Timer, pois com Sleep não te permite fazer mais nada enquanto a alternância está a decorrer. A não ser que a corras o sub num thread em separado (e as alterações à label têm que ser thread-safe), mas em VB6 é complicado fazer isso.
     
  10. Zero_Cool_PT

    Zero_Cool_PT What is folding?

    Então com timer como ficaria?
     
  11. The_True_Eue

    The_True_Eue Power Member

    Que mais queres?
     
  12. Zero_Cool_PT

    Zero_Cool_PT What is folding?

    Nao sei fazer arrays :004: só coisas mais simples :D
     
  13. balute

    balute Power Member

    lol então andas mesmo à nora com o VB...

    Código:
    Dim ArrayDeStrings() As String 'nota os parênteses a seguir ao nome da variável, que indicam que se trata de um array
    
    ...
    
    ArrayDeStrings = New String() {"string 1", "string 2", "string 3", .....}
    Depois, para chamar cada elemento do array, fazes assim:
    Código:
    'nota que a posição dos elementos começa na posição 0
    ArrayDeStrings(0) 'devolve "string 1"
    ArrayDeStrings(1) 'devolve "string 2"
    ArrayDeStrings(2) 'devolve "string 3"
    ...
     
  14. Zero_Cool_PT

    Zero_Cool_PT What is folding?

    Quando ponho isso na label da-me logo erro sem correr o programa em relaçao ao "New String ()" diz identifier expected =/
     
  15. Armadillo

    Armadillo Folding Member

    faz assim
    Código:
    dim ArrayDeStrings(5) as string 'imagina que inicialmente so precisas de 5 posicoes disponiveis
    'se precisares de redimensionar o vector:
    redim preserve ArrayDeStrings(x) ' em que x é o n.º de elementos a introduzir
    
     
  16. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Vai para aqui cada confusão... Ш¡zard·σf·Шαr, isso não é VB.NET? Eu assumo que o OP esteja a trabalhar com VB6, pelo New String() dar "Identifier Expected".

    Usar um timer parece-me ser a maneira ideal. Para teres uma noção, faz um projecto novo só com um label e um timer (sem mudares os nomes) e cola este código:

    Código:
    Option Explicit
    
    Private x(2) As String '0-1-2, portanto.
    
    Private Sub Form_Load()
        
        x(0) = "Carro"
        x(1) = "Casa"
        x(2) = "Crédito"
        
        Timer1.Interval = 1000
    End Sub
    
    Private Sub Timer1_Timer()
        Static num As Integer
        num = num + 1
        If num > 2 Then num = 0
        'em alternativa às duas linhas anteriores,
        ' If num = 2 Then num = 0 Else num = num + 1
        'depende do gosto de cada um...
        
        Label1.Caption = x(num)
    End Sub
    
    Feito à pressa, mas dá para o gasto :P
     
    Última edição: 5 de Março de 2008
  17. balute

    balute Power Member

    Sim, sabia que o OP está a trabalhar com VB6, mas pensei que no VB6 isso se fizesse da mesma forma que em .NET. :P
     
  18. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Isso já estava muito mais orientado para objectos do que o VB6 :D
    (gozo, mas uso :x )
     
  19. Zero_Cool_PT

    Zero_Cool_PT What is folding?

    Funcionou na perfeição :x2:
    Obrigado a todos pela ajuda!
     
  20. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Interessa bem mais perceberes cada linha do código do que modificares o que fiz e reutilizares ;)
    A sério, é fundamental conheceres arrays, e trabalhar com timers é relativamente simples e útil.

    Já agora, pegando na ideia do The_True_Eue, podes em vez de fazer
    Código:
        num = num + 1
        If num > 2 Then num = 0
        'em alternativa às duas linhas anteriores,
        ' If num = 2 Then num = 0 Else num = num + 1
        'depende do gosto de cada um...
    
        Label1.Caption = x(num)
    
    fazer algo como
    Código:
        num = num + 1
        Label1.Caption = x(num Mod UBound(x))
    
    mas isto já é código ligeiramente mais complexo que podes vir a ter dificuldades em compreender.
     

Partilhar esta Página