Usando WinForms; Existe uma maneira melhor de encontrar o RadioButton marcado para um grupo? Parece-me que o código abaixo não deve ser necessário. Quando você marca um RadioButton diferente, ele sabe qual desmarcar ... então deve saber qual está marcado. Como faço para obter essas informações sem fazer muitas instruções if (ou uma mudança).
RadioButton rb = null;
if (m_RadioButton1.Checked == true)
{
rb = m_RadioButton1;
}
else if (m_RadioButton2.Checked == true)
{
rb = m_RadioButton2;
}
else if (m_RadioButton3.Checked == true)
{
rb = m_RadioButton3;
}
c#
.net
winforms
radio-button
Billy
fonte
fonte
Respostas:
Você pode usar LINQ:
Observe que isso requer que todos os botões de opção estejam diretamente no mesmo contêiner (por exemplo, Painel ou Formulário) e que haja apenas um grupo no contêiner. Se esse não for o caso, você pode criar
List<RadioButton>
s em seu construtor para cada grupo e, em seguida, escreverlist.FirstOrDefault(r => r.Checked)
.fonte
s.FirstOrDefault
, em vez delist.FirstOrDefault
no segundo parágrafo da sua resposta?s
é uma pluralização, não um nome de variável.Você pode conectar os CheckedEvents de todos os botões a um manipulador. Lá você pode obter facilmente a caixa de seleção correta.
fonte
Para quem não tem LINQ:
fonte
O OP queria obter o RadioButton BY GROUP verificado. Embora a resposta de @SLaks seja excelente, ela realmente não responde à pergunta principal do OP. Para melhorar a resposta de @SLaks, basta levar o LINQ um passo adiante.
Aqui está um exemplo do meu próprio código de trabalho. Por WPF normal, meus RadioButtons estão contidos em um
Grid
(denominado "myGrid") com vários outros tipos de controles. Tenho dois grupos RadioButton diferentes no Grid.Para obter o RadioButton verificado de um grupo específico:
Se o seu código não tiver a possibilidade de nenhum RadioButtons ser verificado, use
SingleOrDefault()
(Se eu não estiver usando botões tri-state, então sempre defino um botão "IsChecked" como uma seleção padrão).fonte
.Where(r => r.GroupName == "GroupName" && r.IsChecked == true)
porquer.IsChecked
é uma propriedade bool anulável.Você pode usar o evento CheckedChanged para todos os seus RadioButtons.
Sender
será o RadioButtons desmarcado e verificado.fonte
Você pode usar um método Extension para iterar a coleção Parent.Controls do RadioButton. Isso permite que você consulte outros RadioButtons no mesmo escopo. Usando dois métodos de extensão, você pode usar o primeiro para determinar se algum RadioButtons no grupo está selecionado e, em seguida, usar o segundo para obter a seleção. O campo RadioButton Tag pode ser usado para conter um Enum para identificar cada RadioButton no grupo:
Aqui está um padrão de uso típico:
fonte
Além da fiação CheckedChangedEvent, pode-se usar a propriedade "Tag" dos controles para distinguir entre os botões de opção ... uma alternativa (código espaguete) seria a propriedade "TabIndex"; P
fonte
Às vezes, em situações como essa, sinto falta da minha juventude, quando o Access era meu veneno de escolha, e eu poderia dar a cada botão de opção em um grupo seu próprio valor.
Meu hack em C # é usar a tag para definir o valor, e quando eu faço uma seleção no grupo, eu leio o valor da tag do radiobutton selecionado. Neste exemplo, directionGroup é o grupo no qual tenho quatro cinco botões de opção com "Nenhum" e "NE", "SE", "NW" e "SW" como as tags nos outros quatro botões de opção.
Usei proativamente um botão para capturar o valor do botão marcado, porque atribuir um manipulador de eventos a todos os eventos CHeckCHanged dos botões faz com que CADA botão seja disparado, porque alterar um deles altera todos. Portanto, o valor de sender é sempre o primeiro RadioButton do grupo. Em vez disso, uso esse método quando preciso descobrir qual está selecionado, com os valores que desejo recuperar na propriedade Tag de cada RadioButton.
Para sua informação, testei e usei isso em meu trabalho.
Joey
fonte
se você quiser salvar a seleção em arquivo ou qualquer outro e chamá-lo depois, aqui o que faço
então ligue com
fonte
Se você deseja obter o índice do botão de opção selecionado dentro de um controle, pode usar este método:
Exemplo de uso:
O código não foi bem testado, mas parece que a ordem do índice é da esquerda para a direita e de cima para baixo, como ao ler um texto. Se nenhum botão de opção for encontrado, o método retornará -1.
Atualização: Minha primeira tentativa não funcionou se não houver um botão de opção dentro do controle. Eu adicionei um bloco try and catch para corrigir isso, e o método agora parece funcionar.
fonte
O GroupBox possui um evento Validado para este fim, caso você esteja utilizando WinForms.
fonte
Para desenvolvedores que usam VB.NET
fonte