none
Como exibir um Panel ao selecionar o valor em um Combo? RRS feed

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

    terça-feira, 11 de fevereiro de 2014 13:58

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
    sexta-feira, 14 de fevereiro de 2014 12:55

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
    sexta-feira, 14 de fevereiro de 2014 12:55
  • Muito obrigado pela dica, valeu mesmo!!!!!!!!!!!!!!!!

    Atenciosamente, Marcio Nogueira Cardoso Pinto.

    sexta-feira, 14 de fevereiro de 2014 14:09