Mudar Caption da Label em VB

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"

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

mas eu não quero que incremente, aquilo foi só 1 exemplo. Tipo Passar de "Carro" para "Casa" ou "Crédito" e afins ^^
 
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.
 
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.

é isso mas ele dá erro no sleep =/
 
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;
 
é isso mas ele dá erro no sleep =/
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.
 
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.

Então com timer como ficaria?
 
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;

Que mais queres?
 
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"
...
 
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
 
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:
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

Funcionou na perfeição :x2:
Obrigado a todos pela ajuda!
 
Funcionou na perfeição :x2:
Obrigado a todos pela ajuda!
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.
 
Back
Topo