Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Adicionar um object a um Radio Button

E ai, pessoal,

Tive uma dúvida quanto a possibilidade de adicionar um object a um Radio Button.

Ao utilizar Combo box é possível adicionar um object qualquer nele, necessitando se preocupar apenas em sobrescrever a classes To.String().

É possível fazer algo similar com um Radio Button?

Agradeço desde já.

5 respostas

Olá, José Moura

Você está se referindo a Windows Forms, certo? (Só pra ter certeza de que não está falando de WPF - Windows Presentation Foundation).

Nesse caso, acredito que não exista uma maneira de "emular" o comportamento do DropDownList. Mas você poderia criar algum mecanismo manual para gerar os botões de rádio dentro de um painel (este, por sua vez, se ajustaria automaticamente com seus botões internos) a partir de uma lista. Por exemplo:

public class FormaPagamento
{
    public int Id { get; }
    public string Nome { get; }

    public FormaPagamento(int id, string nome)
    {
        Id = id;
        Nome = nome;
    }
}
FlowLayoutPanel pnl = new FlowLayoutPanel();
pnl.Dock = DockStyle.Fill;

var formasPagamento = new List<FormaPagamento>
{
    new FormaPagamento(1, "Boleto"),
    new FormaPagamento(2, "MASTER"),
    new FormaPagamento(3, "VISA"),
    new FormaPagamento(4, "AMEX")
};

for (int i=0;i<formasPagamento.Count();i++)
{
var forma = formasPagamento[i];
    pnl.Controls.Add(new RadioButton() { Text = forma.Nome });
}

this.Controls.Add(pnl);

Olá, Marcelo,

Obrigado pela resposta.

É para Windows Forms mesmo. Vou fazer uns testes agora.

No DropDownList é possível realizar um SelectionItem as FormaPagamento e tratar o item selecionado como um object e não apenas um texto.

Seria possível a mesma ideia?

solução!

Oi José

Agora entendi. O que você pode fazer é modificar um pouco o código que postei lá em cima:

for (int i=0;i<formasPagamento.Count();i++)
{
var forma = formasPagamento[i];
var button = new RadioButton() { Text = forma.Nome, Tag = forma };
    pnl.Controls.Add(button);
}

Note que agora estou inicializando a propriedade Tag com o próprio objeto FormaPagamento:

Tag = forma

Para obter qual objeto FormaPagamento foi selecionado, você pode adicionar esta pesquisa usando LINQ:

var selectedButton = this.Controls.OfType<RadioButton>()
                                      .FirstOrDefault(r => r.Checked);
var forma = selectedButton.Tag as FormaPagamento;

if (forma != null)
{
    MessageBox("Forma de pagamento selecionada: " + forma.Nome);
}

Era exatamente isso que necessitava, Marcelo.

Muito obrigado!

Excelente, José, fico feliz em ajudar! Obrigado por participar do fórum. Boa sorte e bons estudos!