Visual – RadioButton, Dinamic Code, EventHandler – C#

Publicado: 13 de março de 2014 em C#

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.

Radiobutton

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;
                }

            }

        }
    }
}

Publicidade
comentários
  1. Angelo disse:

    Salvou o meu dia. Excelente descrição. Esclarecedor.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s