none
[C#] RadioButton RRS feed

  • Pergunta

  • E aí galera, tudo bem? Tem um formulário e nele há 2 painéis. Dentro do painel1 tem dois RadioButton e dentro do painel2 tem dois RadioButton. Não há nada de errado ainda, mas quando eu executo o aplicativo, quando eu clico no RadioButton1 do painel1, ele só é selecionável entre o RadioButton1 e RadioButton2 do painel1. Por exemplo, se eu seleciono o RadioButton1 do painel1, quando vou selecionar o RadioButton1 do painel 2, ele ficam como se fosse um CheckBox. Como mudar a forma de seleção deles para publica? Para quando selecionar o RadioButton1 do painel1 e selecionar o RadioButton1 do painel2, ele desselecionar o RadioButton1 do painel1?
    quarta-feira, 30 de março de 2016 18:00

Respostas

  • Boa tarde Gerlanio!

    Uma solução rápida, pode ser? 

    private void radioButton1_Click(object sender, EventArgs e)
    {
      if (radioButton2.Checked == true)
      {
        radioButton2.Checked = false;
      }
    }
    
    private void radioButton2_Click(object sender, EventArgs e)
    {
       if (radioButton1.Checked == true)
       {
         radioButton1.Checked = false;
       }
    }

    Fui nas propriedades do evento do radio, no click dele eu verifico se o outro está habilitado. 

    Caso queira outra solução é só ler:
    https://msdn.microsoft.com/pt-br/library/sefz7fxc(v=vs.110).aspx

    At.te,
    • Editado Open Study quarta-feira, 30 de março de 2016 18:54
    • Marcado como Resposta Marcos SJ quarta-feira, 30 de março de 2016 19:58
    quarta-feira, 30 de março de 2016 18:53

Todas as Respostas

  • Boa tarde Gerlanio!

    Uma solução rápida, pode ser? 

    private void radioButton1_Click(object sender, EventArgs e)
    {
      if (radioButton2.Checked == true)
      {
        radioButton2.Checked = false;
      }
    }
    
    private void radioButton2_Click(object sender, EventArgs e)
    {
       if (radioButton1.Checked == true)
       {
         radioButton1.Checked = false;
       }
    }

    Fui nas propriedades do evento do radio, no click dele eu verifico se o outro está habilitado. 

    Caso queira outra solução é só ler:
    https://msdn.microsoft.com/pt-br/library/sefz7fxc(v=vs.110).aspx

    At.te,
    • Editado Open Study quarta-feira, 30 de março de 2016 18:54
    • Marcado como Resposta Marcos SJ quarta-feira, 30 de março de 2016 19:58
    quarta-feira, 30 de março de 2016 18:53
  • Já sei usar este método mas e seu usasse muitas RadionButton, teria que fazer isso muitas vezes... Não tem um modo mais prático? Obrigado!
    quinta-feira, 31 de março de 2016 19:50
  • Boa noite! 

    Os painéis ou groupbox, são utilizados para criar grupos. O RadionButton tem essa característica de clicar e desmarcar o outro, mas quando precisamos de criar grupos para os RadionButton daquele grupo não desmarcarem, recorremos aos grupos(painéis ou groupbox).

    O que você está fazendo, contrapõem as características. Por enquanto eu não vejo outra solução, a não ser essa verificação se ele está selecionado ou não.

    Posso procurar alguma outra alternativa sem código, mas que eu saiba você sempre ao criar um novo RadionButton, vai ter identificar ele, caso você trabalhe com grupos.

    Se você quer voltar a característica normal dos RadionButton, você tem que retirar painel ou groupbox. Desse jeito, não vai nem precisa de linha de código.

    At.te,

    quinta-feira, 31 de março de 2016 21:21
  • Como o Open Study já explanou, a característica de mutual exclusive do Radio Button tem uma abrangência por container, isto é, ele não leva em consideração eventos de um radio button de outro container, como no caso dos Panels.

    Para contornar essa situação você pode usar a solução do Open, ou pode utilizar a solução abaixo:

    private List<RadioButton> radioButtons = new List<RadioButton>();
    
    //Popular essa lista com todos os RadioButtons que quer agrupar.
    
    private void HookUpEvents()
    {
        foreach(var radio in radioButtons)
        {
            radio.CheckedChanged -= PerformMutualExclusion;
            radio.CheckedChanged += PerformMutualExclusion;
        }
    }
    
    private void PerformMutualExclusion(object sender, EventArgs e)
    {
        Radio senderRadio = (RadioButton)sender;
        if(!senderRadio.Checked)
        {
            return;
        }
        foreach(var radio in radioButtons)
        {
            if(radio == sender || !radio.Checked)
            {
                continue;
            }
            radio.Checked = false;
        }
    }

    Fonte:

    Are there multiple ways to group radio buttons in Windows Forms?

    Att,


    Antero Marques

    _________________________________________________________________________

    Se a resposta for útil, marque como útil, se respondeu totalmente sua dúvida, marque como resposta.

    O Fórum MSDN é utilizado também como base de conhecimento, então é responsabilidade de todos mantê-lo organizado e funcional.


    quinta-feira, 31 de março de 2016 21:36