View Full Version : Mudar Caption da Label em VB
Zero_Cool_PT 04-03-2008, 18:38 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"
?????
Ш¡zard·σf·Шαr 04-03-2008, 18:57 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.
For i As Integer = 1 to 10
lbl_lista.Caption = "Program is Running" & i
Next
Não sei se era isto que querias...
Zero_Cool_PT 04-03-2008, 19:00 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.
For i As Integer = 1 to 10
lbl_lista.Caption = "Program is Running" & i
NextNã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 ^^
Ш¡zard·σf·Шαr 04-03-2008, 19:08 Dá um exemplo...
Qual é a caption da label, e como é que queres que fique?
Zero_Cool_PT 04-03-2008, 19:37 tipo
lbl_lista.caption= "Carro"
lbl_lista.caption= "Casa"
lbl_lista.caption="Crédito"
e que depois vá fazendo um loop entre essas ^^
Ш¡zard·σf·Шαr 04-03-2008, 20:18 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
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
EndSubTambém podes fazer com um timer. E as strings podem ficar num array, por exemplo.
Zero_Cool_PT 04-03-2008, 22:29 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
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
EndSubTambém podes fazer com um timer. E as strings podem ficar num array, por exemplo.
é isso mas ele dá erro no sleep =/
The_True_Eue 05-03-2008, 11:53 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;
Ш¡zard·σf·Шαr 05-03-2008, 12:05 é isso mas ele dá erro no sleep =/
Tens que adicionar isto no sítio das variáveis globais:
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.
Zero_Cool_PT 05-03-2008, 14:46 Tens que adicionar isto no sítio das variáveis globais:
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?
The_True_Eue 05-03-2008, 15:49 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?
Zero_Cool_PT 05-03-2008, 18:58 Que mais queres?
Nao sei fazer arrays :004: só coisas mais simples :D
Ш¡zard·σf·Шαr 05-03-2008, 19:26 lol então andas mesmo à nora com o VB...
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:
'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"
...
Zero_Cool_PT 05-03-2008, 19:37 lol então andas mesmo à nora com o VB...
ArrayDeStrings = New String() {"string 1", "string 2", "string 3", .....}Depois, para chamar cada
Quando ponho isso na label da-me logo erro sem correr o programa em relaçao ao "New String ()" diz identifier expected =/
Armadillo 05-03-2008, 19:55 faz assim
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 (http://www.techzonept.com/member.php?u=32079), 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:
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
Ш¡zard·σf·Шαr 05-03-2008, 22:15 Vai para aqui cada confusão... Ш¡zard·σf·Шαr (http://www.techzonept.com/member.php?u=32079), isso não é VB.NET? Eu assumo que o OP esteja a trabalhar com VB6, pelo New String() dar "Identifier Expected".
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
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
Isso já estava muito mais orientado para objectos do que o VB6 :D
(gozo, mas uso :x )
Zero_Cool_PT 05-03-2008, 23:25 Vai para aqui cada confusão... Ш¡zard·σf·Шαr (http://www.techzonept.com/member.php?u=32079), 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:
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
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
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.
|
|