RadioButton
Em computação, um botão de opção ou botão de rádio (radio button) é um elemento de interface gráfica (isto é um componente widget) com dois estados: selecionado (ativado) e não-selecionado (desativado), quando o usuário pressiona um botão do mouse ou uma tecla como Espaço. Botões de opção são usados num grupo para apresentar um conjunto limitado de escolhas (duas ou mais) que são mutuamente exclusivas. Deste maneira, quando o usuário seleciona um outro botão no mesmo conjunto, o outro botão já selecionado torna-se automaticamente desativado.
EventHandler
O conceito do Sistema operacional Windows é baseado no envio e recebimento de mensagens e este procedimento é chamado de Windows Messages , na verdade o sistema em baixo nível é composto de vários tipos de mensagens que contém múltiplos eventos. Eventos em um aplicativo do Windows são ocorrências como ao usuário clicar com o mouse ou pressionando uma tecla ou se um temporizador atingir zero
O sistema operacional Windows registra cada evento em uma mensagem e coloca a mensagem em uma fila de mensagens para o programa para o qual a mensagem se destina. Assim uma mensagem do Windows é simplesmente um registro dos dados relativos a um evento, e a fila de mensagens para uma aplicação é apenas uma sequência de tais mensagens aguardando para serem processados pela aplicação, por envio de uma mensagem, o Windows pode dizer ao seu programa de que algo precisa ser feito, ou que algum informação tornou-se disponível, ou que um evento como um clique do mouse ocorreu. Se o seu programa está devidamente organizado, ele vai responder de forma adequada à mensagem. Tem muitos tipos diferentes de mensagens e elas podem ocorrer com muita frequência, muitas vezes até por segundo quando o mouse está sendo arrastado, por exemplo.
Quando você programa em C# você esta utilizando estas mensagens em um alto nível e pode programar eventos predefinifos que são interpretados pelo framework e suas classes, compilando o seu código para uma língua intermediária chamada MSIL (Microsoft Intermediate Language) e transformado em código de maquina pelo componente Just in time (JIT), assim que o seu programa é executado.
No código abaixo nosso programa esta completamente dentro de eventos, o evento Form_Shown é executado assim que o form é exibido, o evento Button_Click, é executado assim que o usuário clica no botão, o evento RadioButton_CheckedChanged é executado quando há uma mudança no estado de cheque de um botão de radio e o evento Form_KeyDown é executado quando uma tecla é pressionada.
Código Dinâmico
Lembre-se que o C# no Visual Studio usa o conceito Design First, Code Later, nosso exemplo é um programa dinâmico ou seja todo escrito em tempo de execução e não em Design Time, quando criar o novo projeto click no form, na janela propriedades, no botão eventos, escolha o evento Shown e de um duplo click para acessar a unidade de código csharp. Para ilustrar esta explicação veja a imagem abaixo, onde você vê o form em Design Time e ao lado o programa em Run Time.
Exemplo:
Neste exemplo criamos um grupo de botões de radio que efetua as 4 operações básicas da matemática, usando o evento de item e a verificação do seu estado.
C#
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace DesenvolvimentoAberto { public partial class Form1 : Form { // Define componentes Label rotulo; RadioButton soma; RadioButton subtrai; RadioButton multiplica; RadioButton divide; Label rotulo1; TextBox campo1; Label rotulo2; TextBox campo2; Button botao; TextBox texto; double total; // Construtor public Form1() { InitializeComponent(); } // Evento Shown é executado quando o form é exibido private void Form1_Shown(object sender, EventArgs e) { // Cria componentes dinamicamente no evento form shown rotulo = new Label(); soma = new RadioButton(); subtrai = new RadioButton(); multiplica = new RadioButton(); divide = new RadioButton(); rotulo1 = new Label(); campo1 = new TextBox(); rotulo2 = new Label(); campo2 = new TextBox(); botao = new Button(); texto = new TextBox(); // posiciona componentes no form rotulo.Location = new Point (5, 10); soma.Location = new Point (5, 30); subtrai.Location = new Point(5, 50); multiplica.Location = new Point(5, 70); divide.Location = new Point(5, 90); rotulo1.Location = new Point(5, 120); campo1.Location = new Point(60, 120); rotulo2.Location = new Point(170, 120); campo2.Location = new Point(220, 120); botao.Location = new Point(330, 120); texto.Location = new Point(5, 150); // adiciona a propriedade de texto nos componentes rotulo.Text = "Escolha um RadioButton ou pressione (A, B, C ou D) ou (Alt + A, B, C ou D)"; soma.Text = "Som&a"; subtrai.Text = "Su&btrai"; multiplica.Text = "Multipli&ca"; divide.Text = "&Divide"; rotulo1.Text = "Numero:"; rotulo2.Text = "Numero:"; botao.Text = "OK"; // seta a propriedades para a caixa de texto texto.Multiline = true; texto.ScrollBars = ScrollBars.Vertical; texto.ReadOnly = true; // Define o tamanho dos objetos no form Form1.ActiveForm.Size = new Size(500, 300); rotulo.Size = new Size(450, 20); soma.Size = new Size(130, 20); subtrai.Size = new Size(130, 20); multiplica.Size = new Size(130, 20); divide.Size = new Size(130, 20); texto.Size = new Size(410, 100); rotulo1.Size = new Size(50, 20); rotulo2.Size = new Size(50, 20); // Define eventos para o checkbox soma.CheckedChanged += new System.EventHandler(soma_CheckedChanged); subtrai.CheckedChanged += new System.EventHandler(subtrai_CheckedChanged); multiplica.CheckedChanged += new System.EventHandler(multiplica_CheckedChanged); divide.CheckedChanged += new System.EventHandler(divide_CheckedChanged); botao.Click += new System.EventHandler(botao_Click); // Ativa a previsão de teclas do form Form1.ActiveForm.KeyPreview = true; // Nome do form Form1.ActiveForm.Text = "Desenvolvimento Aberto"; // Adiciona componentes ao form Form1.ActiveForm.Controls.Add(rotulo); Form1.ActiveForm.Controls.Add(soma); Form1.ActiveForm.Controls.Add(subtrai); Form1.ActiveForm.Controls.Add(multiplica); Form1.ActiveForm.Controls.Add(divide); Form1.ActiveForm.Controls.Add(rotulo1); Form1.ActiveForm.Controls.Add(campo1); Form1.ActiveForm.Controls.Add(rotulo2); Form1.ActiveForm.Controls.Add(campo2); Form1.ActiveForm.Controls.Add(botao); Form1.ActiveForm.Controls.Add(texto); } // Evento On Click do botão private void botao_Click(object sender, EventArgs e) { if (soma.Checked) { total = Convert.ToDouble(campo1.Text) + Convert.ToDouble(campo2.Text); texto.AppendText(campo1.Text + " + " + campo2.Text + " = " + total + "\n"); } if (subtrai.Checked) { total = Convert.ToDouble(campo1.Text) - Convert.ToDouble(campo2.Text); texto.AppendText(campo1.Text + " - " + campo2.Text + " = " + total + "\n"); } if (multiplica.Checked) { total = Convert.ToDouble(campo1.Text) * Convert.ToDouble(campo2.Text); texto.AppendText(campo1.Text + " * " + campo2.Text + " = " + total + "\n"); } if (divide.Checked) { total = Convert.ToDouble(campo1.Text) / Convert.ToDouble(campo2.Text); texto.AppendText(campo1.Text + " / " + campo2.Text + " = " + total + "\n"); } } // Evento do RadioButton de mudança de estado // Verifica o estado pois este evento executa duas vezes // Quando o botão é selecionado e deselecionado // Duplicanto o texto enviado a caixa de texto. private void soma_CheckedChanged(object sender, EventArgs e) { if (soma.Checked) { texto.AppendText("Soma:\n"); } } private void subtrai_CheckedChanged(object sender, EventArgs e) { if (subtrai.Checked) { texto.AppendText("Subtração:\n"); } } private void multiplica_CheckedChanged(object sender, EventArgs e) { if (multiplica.Checked) { texto.AppendText("Multiplicação:\n"); } } private void divide_CheckedChanged(object sender, EventArgs e) { if (divide.Checked) { texto.AppendText("Divisão:\n"); } } // Evento de tecla pressionada private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.A) { if (soma.Checked == true) { soma.Checked = false; } else { soma.Checked = true; } } if (e.KeyCode == Keys.B) { if (subtrai.Checked == true) { subtrai.Checked = false; } else { subtrai.Checked = true; } } if (e.KeyCode == Keys.C) { if (multiplica.Checked == true) { multiplica.Checked = false; } else { multiplica.Checked = true; } } if (e.KeyCode == Keys.D) { if (divide.Checked == true) { divide.Checked = false; } else { divide.Checked = true; } } } } }
Salvou o meu dia. Excelente descrição. Esclarecedor.