_Planax_ Posted May 28, 2006 at 09:07 PM Report #29885 Posted May 28, 2006 at 09:07 PM 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á.
vbtipo Posted May 29, 2006 at 06:59 AM Report #29908 Posted May 29, 2006 at 06:59 AM Olha fazes assim: Private sub Combo2_Click() if Combo1.text="Pudim" them Combo2.AddItem = "Boca Doce" ... (assim por diante) endif Qualquer coisa avisa .... Lema: Se eu não saber de alguma coisa não se preocupem porque tento sempre ajudar alguma coisita, nem que seja, por palpites/sugestões.
_Planax_ Posted May 29, 2006 at 05:33 PM Author Report #29978 Posted May 29, 2006 at 05:33 PM 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
vbtipo Posted May 29, 2006 at 06:56 PM Report #30002 Posted May 29, 2006 at 06:56 PM 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 Lema: Se eu não saber de alguma coisa não se preocupem porque tento sempre ajudar alguma coisita, nem que seja, por palpites/sugestões.
_Planax_ Posted May 29, 2006 at 08:24 PM Author Report #30030 Posted May 29, 2006 at 08:24 PM :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
_Planax_ Posted May 29, 2006 at 08:29 PM Author Report #30033 Posted May 29, 2006 at 08:29 PM Esquece! Consegui "sozinho", fui pesquisar uns Tutorials de VB. 😄 Funciona bem melhor com o Case. 😛 Obrigado na mesma. Cumprimentos.
_Planax_ Posted June 2, 2006 at 03:43 PM Author Report #30709 Posted June 2, 2006 at 03:43 PM 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
vbtipo Posted June 2, 2006 at 07:07 PM Report #30738 Posted June 2, 2006 at 07:07 PM Ele só vai fazer esse case se tu tiveres a 1.ª Combo preenchida caso contraio ele não faz nada. Lema: Se eu não saber de alguma coisa não se preocupem porque tento sempre ajudar alguma coisita, nem que seja, por palpites/sugestões.
_Planax_ Posted June 2, 2006 at 09:29 PM Author Report #30760 Posted June 2, 2006 at 09:29 PM Então mas a 1ªa Combo está preenchida... ? 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
Tiago Salgado Posted June 2, 2006 at 11:15 PM Report #30782 Posted June 2, 2006 at 11:15 PM 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á....
_Planax_ Posted June 3, 2006 at 12:06 PM Author Report #30839 Posted June 3, 2006 at 12:06 PM 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
Tiago Salgado Posted June 3, 2006 at 01:44 PM Report #30865 Posted June 3, 2006 at 01:44 PM Eu disse para pores no evento Click da ComboBox e não no Evento Change.. altera isso e já fica a dar...
_Planax_ Posted June 3, 2006 at 02:36 PM Author Report #30873 Posted June 3, 2006 at 02:36 PM I'm sorry... Funciona! 😁😄
Tiago Salgado Posted June 3, 2006 at 11:32 PM Report #30944 Posted June 3, 2006 at 11:32 PM 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 ).
_Planax_ Posted June 5, 2006 at 07:42 PM Author Report #31344 Posted June 5, 2006 at 07:42 PM 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
Tiago Salgado Posted June 5, 2006 at 08:05 PM Report #31346 Posted June 5, 2006 at 08:05 PM 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
_Planax_ Posted June 5, 2006 at 09:41 PM Author Report #31362 Posted June 5, 2006 at 09:41 PM Uma vez que não funcionou deixo aqui o link para poderem descarregar o projecto: http://downet.no.sapo.pt/calculadora.rar
Tiago Salgado Posted June 6, 2006 at 08:49 AM Report #31401 Posted June 6, 2006 at 08:49 AM 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
_Planax_ Posted June 6, 2006 at 12:18 PM Author Report #31430 Posted June 6, 2006 at 12:18 PM 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..." 😁
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now