Usuário com melhor resposta
Como exibir um Panel ao selecionar o valor em um Combo?

Pergunta
-
Olá a todos, tenho um form de cadastro que deve exibir o Panel correspondente ao cadastro selecionado no combo. As opções de cadastro são:
Aluno
Curso
Consultoria
Instrutor
Turma
De acordo com o valor selecionado o Panel correspondente deve ser exibido.
Fiz da seguinte forma:
Private Sub Form2_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load If cmbCadastro.SelectedValue = "Aluno" Then pAluno.Visible = True End If End Sub
Desde já agradeço a atenção.
Atenciosamente, Marcio Nogueira Cardoso Pinto.
Respostas
-
Olha marcio, eu sempre prefiro NÃO usar "SelectedValue" se o valor não for necessário (só o índice que realmente interessa - nesse caso usamos "SelectedIndex"). Fica mais fácil para comparar, porque ai você pode até mudar o Texto da Combo, mas o índice permanece.
Ficaria algo assim (e isso porque estou estipulando que os valores da combo NÃO MUDAM):
Private Sub AlterarPainel() pAluno.Visible = (cmbCadastro.SelectedIndex = 0) pCurso.Visible = (cmbCadastro.SelectedIndex = 1) pConsultoria.Visible = (cmbCadastro.SelectedIndex = 2) pInstrutor.Visible = (cmbCadastro.SelectedIndex = 3) pTurma.Visible = (cmbCadastro.SelectedIndex = 4) End Sub
Agora veja que eu escrevi uma sub para isso, porque não entendi porque você colocou isso para acontecer no evento Load do Form? Se você deixar no evento Load do Form, só vai acontecer uma vez - quando o form carregar.
Você tem que usar o evento da combo "cmbCadastro" chamado "SelectedIndexChanged". Assim o evento vai disparar toda vez que você alterar o item selecionado da combo. Outra coisa que você deve notar é que eu defini a propriedade "Visible" de TODOS os painéis, não só do que vai ficar visível. Isso porque quando um painel ficar visível, os outros devem desaparecer.
- Sugerido como Resposta SammuelMiranda sexta-feira, 14 de fevereiro de 2014 12:55
- Marcado como Resposta Marcio_Nogueira sexta-feira, 14 de fevereiro de 2014 14:08
Todas as Respostas
-
Olha marcio, eu sempre prefiro NÃO usar "SelectedValue" se o valor não for necessário (só o índice que realmente interessa - nesse caso usamos "SelectedIndex"). Fica mais fácil para comparar, porque ai você pode até mudar o Texto da Combo, mas o índice permanece.
Ficaria algo assim (e isso porque estou estipulando que os valores da combo NÃO MUDAM):
Private Sub AlterarPainel() pAluno.Visible = (cmbCadastro.SelectedIndex = 0) pCurso.Visible = (cmbCadastro.SelectedIndex = 1) pConsultoria.Visible = (cmbCadastro.SelectedIndex = 2) pInstrutor.Visible = (cmbCadastro.SelectedIndex = 3) pTurma.Visible = (cmbCadastro.SelectedIndex = 4) End Sub
Agora veja que eu escrevi uma sub para isso, porque não entendi porque você colocou isso para acontecer no evento Load do Form? Se você deixar no evento Load do Form, só vai acontecer uma vez - quando o form carregar.
Você tem que usar o evento da combo "cmbCadastro" chamado "SelectedIndexChanged". Assim o evento vai disparar toda vez que você alterar o item selecionado da combo. Outra coisa que você deve notar é que eu defini a propriedade "Visible" de TODOS os painéis, não só do que vai ficar visível. Isso porque quando um painel ficar visível, os outros devem desaparecer.
- Sugerido como Resposta SammuelMiranda sexta-feira, 14 de fevereiro de 2014 12:55
- Marcado como Resposta Marcio_Nogueira sexta-feira, 14 de fevereiro de 2014 14:08
-