• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

_Planax_

[VB 6] ComboBox

19 mensagens neste tópico

Boa noite a todos.

A minha dúvida é a seguinte:

Queria criar condições em ComboBoxes. Por exemplo:

Na ComboBox1 tenho á escolha as opções "Entradas", "Bebidas", "Prato Principal", "Sobremesa".

Queria fazer com que, consoante a minha escolha na ComboBox1, a ComboBox2 apresentasse valores referentes apenas, por exemplo, a "Sobremesas"...

Estava a fazer assim, mas não está a funcionar:

Private Sub Combo1_Change()
    If Combo1.ItemData = 1 Then
        Combo2.AddItem "Pudim"
        Combo2.AddItem "Mousse de Chocolate"
        Combo2.AddItem "Tarte de Natas"
        Combo2.AddItem "Fruta da Época"
    End If
End Sub

Obrigado a todos, desde já.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olha  fazes assim:

  Private sub Combo2_Click()

 

      if Combo1.text="Pudim" them

        Combo2.AddItem = "Boca Doce"

        ... (assim por diante)

      endif

Qualquer coisa avisa ....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas! Antes de mais obrigado pela resposta. ;)

O código funciona, mas ocorre um bug... Quando eu escolho a primeira vez uma opção na Combo1, na Combo2 aparece correctamente, porém se for escolher outro valor á Combo1, em vez de aparecer uma nova lista na Combo2,  aparece a anterior mais a nova...  :bored:

Private Sub Combo1_Click()
    If Combo1.Text = "Sapo ADSL" Then
        Combo2.AddItem "256kbps"
        Combo2.AddItem "512kbps"
        Combo2.AddItem "2Mb"
        Combo2.AddItem "4Mb"
        Combo2.AddItem "8Mb"
    Else:
        Combo1.Text = "Clix"
        Combo2.AddItem "2Mb"
        Combo2.AddItem "8Mb"
        Combo2.AddItem "16Mb"
    End If
End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens que limpar o combobox antes de clicares outras vez e para isso utilizas o seguinte comando.

Combo1.clear

Private Sub Combo1_Click()
   Combo2.clear
    If Combo1.Text = "Sapo ADSL" Then
        Combo2.AddItem "256kbps"
        Combo2.AddItem "512kbps"
        Combo2.AddItem "2Mb"
        Combo2.AddItem "4Mb"
        Combo2.AddItem "8Mb"
    Else:
        Combo1.Text = "Clix"
        Combo2.AddItem "2Mb"
        Combo2.AddItem "8Mb"
        Combo2.AddItem "16Mb"
    End If
End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:S Agora ao tentar adicionar mais ISPs para além do Sapo e da Clix reparei que com Ifs não vou lá... Ou pelo menos não estou a conseguir... Secalhar com "case" era melhor... Não? Mas não sei as syntaxes do Case no VB... Não dei nas aulas... Será que me podias explicar? Desculpa lá o incómodo...

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esquece! Consegui "sozinho", fui pesquisar uns Tutorials de VB. :D Funciona bem melhor com o Case.  :P

Obrigado na mesma.

Cumprimentos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Depois de pelo meio o computador da escola me ter dado cabo da pen e de eu não ter backups do projecto, consegui pô-lo a funcionar de novo... E vinha esclarecer mais uma dúvida. De momento o código está assim:

Private Sub Option1_Click()
    Combo1.Clear
    Combo1.AddItem "Sapo ADSL"
    Combo1.AddItem "Clix"
    If Option1.Enabled Then
        Select Case Combo1.Text
            Case "Sapo ADSL"
                Picture1.Picture = LoadPicture("imagens\sapo.gif")
                Combo2.Clear
                Combo2.AddItem "256kbps"
                Combo2.AddItem "512kbps"
                Combo2.AddItem "2Mb"
                Combo2.AddItem "4Mb"
                Combo2.AddItem "8Mb"
            Case "Clix"
                Picture1.Picture = LoadPicture("imagens\clix.jpg")
                Combo2.Clear
                Combo2.AddItem "2Mb"
                Combo2.AddItem "8Mb"
                Combo2.AddItem "16Mb"
            Case "Oni"
                Picture1.Picture = LoadPicture("imagens\oniduo.jpg")
                Combo2.Clear
                Combo2.AddItem "OniDuo 512kbps"
                Combo2.AddItem "OniDuo 5Mb"
        End Select
    End If
End Sub

O problema é que ele não chega a fazer o case... O que é que eu estou a fazer mal?

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ele só vai fazer esse case se tu tiveres a 1.ª Combo preenchida caso contraio ele não faz nada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então mas a 1ªa Combo está preenchida...  :hmm:

    Combo1.AddItem "Sapo ADSL"
    Combo1.AddItem "Clix"

E tanto com ou sem aquele If, o programa não corre bem... Faz a mesma coisa... :S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não te faz nada porque isso está no evento errado... o que tu tás a fazer aí é o seguinte:

Carregas num OptionButton ... e vai apagar o conteudo da combo1 e adicionar os 2 items... e dps verificar no case o estado da combo1. Como foram adicionados os items, sem haver posterior interacçao com o utilizador, ou seja, não foi seleccionado nenhum item da combo1... o case n irá verificar nenhuma das condiçoes que lá tens. Para corrigires isso faz o seguinte:

Private Sub Option1_Click()
    Combo1.Clear
    Combo1.AddItem "Sapo ADSL"
    Combo1.AddItem "Clix"

Depois no evento Click da Combo1 metes o seguinte:

If Option1.Enabled Then
        Select Case Combo1.Text
            Case "Sapo ADSL"
                Picture1.Picture = LoadPicture("imagens\sapo.gif")
                Combo2.Clear
                Combo2.AddItem "256kbps"
                Combo2.AddItem "512kbps"
                Combo2.AddItem "2Mb"
                Combo2.AddItem "4Mb"
                Combo2.AddItem "8Mb"
            Case "Clix"
                Picture1.Picture = LoadPicture("imagens\clix.jpg")
                Combo2.Clear
                Combo2.AddItem "2Mb"
                Combo2.AddItem "8Mb"
                Combo2.AddItem "16Mb" 
            Case "Oni"
                Picture1.Picture = LoadPicture("imagens\oniduo.jpg")
                Combo2.Clear
                Combo2.AddItem "OniDuo 512kbps"
                Combo2.AddItem "OniDuo 5Mb"
        End Select
    End If

Ve lá se assim dá....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Continua a não funcionar... :S Fiz algo mal?

Private Sub Option1_Click()
    Combo1.Clear
    Combo1.AddItem "Sapo ADSL"
    Combo1.AddItem "Clix"
End Sub

Private Sub Option2_Click()
    Combo1.Clear
    Combo1.AddItem "Netcabo"
    Combo1.AddItem "Netvisão"
End Sub

Private Sub Combo1_Change()
If Option1.Enabled Then
        Select Case Combo1.Text
            Case "Sapo ADSL"
                Picture1.Picture = LoadPicture("imagens\sapo.gif")
                Combo2.Clear
                Combo2.AddItem "256kbps"
                Combo2.AddItem "512kbps"
                Combo2.AddItem "2Mb"
                Combo2.AddItem "4Mb"
                Combo2.AddItem "8Mb"
            Case "Clix"
                Picture1.Picture = LoadPicture("imagens\clix.jpg")
                Combo2.Clear
                Combo2.AddItem "2Mb"
                Combo2.AddItem "8Mb"
                Combo2.AddItem "16Mb"
            Case "Oni"
                Picture1.Picture = LoadPicture("imagens\oniduo.jpg")
                Combo2.Clear
                Combo2.AddItem "OniDuo 512kbps"
                Combo2.AddItem "OniDuo 5Mb"
        End Select
        
        Else: Option2.Enabled
                Select Case Combo1.Text
                    Case Combo1.Text = "Netcabo"
                    Combo2.Clear
                    Combo2.AddItem "256kbps"
                    Combo2.AddItem "512kbps"
                    Combo2.AddItem "2Mb"
                    Combo2.AddItem "4Mb"
                    Combo2.AddItem "8Mb"
                Case Combo1.Text = "Netvisão"
                    Combo2.Clear
                    Combo2.AddItem "2Mb"
                    Combo2.AddItem "8Mb"
                    Combo2.AddItem "16Mb"
                End Select
    
    End If
End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu disse para pores no evento Click da ComboBox e não no Evento Change.. altera isso e já fica a dar...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uma dica para que n voltes a cometer este mesmo erro. Se não estiver a funcionar algo que achas que deva funcionar, experimenta por um breakpoint na primeira linha de codigo associado ao evento, e quando correres, se ele parar nessa linha qd fizeres a operaçao que tens a fazer é porque estás a trabalhar no evento correcto ( ha excepções como é obvio ).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E para acabar com as perguntas, com o projecto à beira da conclusão, peço que me ajudem:

Private Sub Combo2_Click()
    If Option1.Enabled Then
        Select Case Combo2.Text
        
            Case "256kbps"
                Text3 = 256 / 8
                Text5 = 128 / 8
                Text4 = ((256 / 8) * 0.76)
                Text6 = ((128 / 8) * 0.76)
                
            Case "512kbps"
                Text3 = 512 / 8
                Text5 = 128 / 8
                Text4 = ((512 / 8) * 0.76)
                Text6 = ((128 / 8) * 0.76)
                
            Case "2Mb"
                Text3 = 2048 / 8
                Text5 = 128 / 8
                Text4 = ((2048 / 8) * 0.76)
                Text6 = ((128 / 8) * 0.76)
                
            Case "4Mb"
                Text3 = 4096 / 8
                Text5 = 256 / 8
                Text4 = ((4096 / 8) * 0.76)
                Text6 = ((256 / 8) * 0.76)
                
            Case "8Mb"
                Text3 = 8192 / 8
                Text5 = 389 / 8
                Text4 = ((8192 / 8) * 0.76)
                Text6 = ((384 / 8) * 0.76)
            
            Case "16Mb"
                Text3 = 16384 / 8
                Text5 = 400 / 8
                Text4 = ((8192 / 8) * 0.76)
                Text6 = ((400 / 8) * 0.76)
        End Select
       End If
    'Else
        If Option2.Enabled Then
            Select Case Combo2.Text
            
                Case "256kbps"
                    Text3 = 256 / 8
                    Text5 = 128 / 8
                    Text4 = ((256 / 8) * 0.8)
                    Text6 = ((128 / 8) * 0.8)
                    
                Case "512kbps"
                    Text3 = 512 / 8
                    Text5 = 128 / 8
                    Text4 = ((512 / 8) * 0.8)
                    Text6 = ((128 / 8) * 0.8)
                    
                Case "2Mb"
                    Text3 = 2048 / 8
                    Text5 = 128 / 8
                    Text4 = ((2048 / 8) * 0.8)
                    Text6 = ((128 / 8) * 0.8)
                    
                Case "4Mb"
                    Text3 = 4096 / 8
                    Text5 = 256 / 8
                    Text4 = ((4096 / 8) * 0.8)
                    Text6 = ((256 / 8) * 0.8)
                    
                Case "8Mb"
                    Text3 = 8192 / 8
                    Text5 = 389 / 8
                    Text4 = ((8192 / 8) * 0.8)
                    Text6 = ((389 / 8) * 0.8)
            End Select
        'End If
    End If
End Sub

Porque raio só faz ele, para qualquer escolha da combo2 a parte "If Option2.Enabled Then" ?

PS- Se eu tirar aqueles comentários e fizer o progama ter Else, ele faz o opsto, só faz a parte do If Option1.Enabled Then. :S

PS2- Como defino um breakpoint? :$

Obrigado a todos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mete assim:

Private Sub Combo2_Click()
    If Option1.Enabled = True Then
        Select Case Combo2.Text
        
            Case "256kbps"
                Text3 = 256 / 8
                Text5 = 128 / 8
                Text4 = ((256 / 8) * 0.76)
                Text6 = ((128 / 8) * 0.76)
                
            Case "512kbps"
                Text3 = 512 / 8
                Text5 = 128 / 8
                Text4 = ((512 / 8) * 0.76)
                Text6 = ((128 / 8) * 0.76)
                
            Case "2Mb"
                Text3 = 2048 / 8
                Text5 = 128 / 8
                Text4 = ((2048 / 8) * 0.76)
                Text6 = ((128 / 8) * 0.76)
                
            Case "4Mb"
                Text3 = 4096 / 8
                Text5 = 256 / 8
                Text4 = ((4096 / 8) * 0.76)
                Text6 = ((256 / 8) * 0.76)
                
            Case "8Mb"
                Text3 = 8192 / 8
                Text5 = 389 / 8
                Text4 = ((8192 / 8) * 0.76)
                Text6 = ((384 / 8) * 0.76)
            
            Case "16Mb"
                Text3 = 16384 / 8
                Text5 = 400 / 8
                Text4 = ((8192 / 8) * 0.76)
                Text6 = ((400 / 8) * 0.76)
        End Select
    Else
            Select Case Combo2.Text
            
                Case "256kbps"
                    Text3 = 256 / 8
                    Text5 = 128 / 8
                    Text4 = ((256 / 8) * 0.8)
                    Text6 = ((128 / 8) * 0.8)
                    
                Case "512kbps"
                    Text3 = 512 / 8
                    Text5 = 128 / 8
                    Text4 = ((512 / 8) * 0.8)
                    Text6 = ((128 / 8) * 0.8)
                    
                Case "2Mb"
                    Text3 = 2048 / 8
                    Text5 = 128 / 8
                    Text4 = ((2048 / 8) * 0.8)
                    Text6 = ((128 / 8) * 0.8)
                    
                Case "4Mb"
                    Text3 = 4096 / 8
                    Text5 = 256 / 8
                    Text4 = ((4096 / 8) * 0.8)
                    Text6 = ((256 / 8) * 0.8)
                    
                Case "8Mb"
                    Text3 = 8192 / 8
                    Text5 = 389 / 8
                    Text4 = ((8192 / 8) * 0.8)
                    Text6 = ((389 / 8) * 0.8)
            End Select
    End If
End Sub

Se não funcionar, anexa aí o projecto que é mais simples de resolver

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, não funciona da forma que tu queres por uma razao muito simples. Tu tens If option1.Enable = True ... quando o que pretendes é verificar se está seleccionada ou nao. O .Enable permite saber se o objecto está Activo ou nao, ou seja, se o utilizador consegue ou não utiliza-lo. Altera o "Option1.Enable = True" para "Option1.Value = True"

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Muito obrigado por toda a ajuda que me prestaram.

Como prova do meu agradecimento deixo-vos aqui o binário da versão "final" do programa.

Aberto a críticas e sugestões.

Calculadora eMule v0.3.4 (Binário)

Obs. Ver "About..." :cheesygrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora