Arquivo de março, 2014

Function Modules 

Módulos de função são rotinas ABAP que são armazenados em uma biblioteca de função central. Elas não são específicas do aplicativo, mas disponível em todo o sistema. O ABAP Workbench vem com um grande número de módulos de função padrão.

Como rotinas de formulários, módulos de função podem encapsular o código do programa e fornecer uma interface para troca de dados. Os Módulos de função devem pertencer a um grupo chamado de um grupo de funções.

Eles possuem uma interface fixa para troca de dados. Isso torna mais fácil para você passar parâmetros de entrada e saída para o módulo de função. Por exemplo, você pode atribuir valores padrão para os parâmetros de entrada. A interface também suporta manipulação de exceção. Isto permite-lhe detectar erros e passá-los de volta para o programa de chamada para o manuseio.

Os módulos usam a sua própria área de memória. O programa de chamada e do módulo de função não pode trocar dados usando uma área de memória compartilhada – devem usar a interface do módulo de função. Isso evita efeitos colaterais desagradáveis, como a substituição de dados acidentalmente. Você chama um módulo de função pelo seu nome (que deve ser único) em um comunicado de função de chamada usando a palavra chave CALL FUNCTION.

Function Builder

O Function Builder permite desenvolver, testar e documentar novos módulos de função. Você também pode usá-lo para exibir informações sobre os módulos de função existentes.

Criando uma Função

  1.  Entre na transação SE37.
  2.  No menu Goto, Function Groups, Create Group, crie um novo Grupo de função chamado ZDEVA.fbuilder_group
  3.  Digite a transação SE80, no ABAP WorkBench escolha grupo de função e o seu grupo, clique com o botão direito em cima do nome do seu grupo e escolha Activate.fbuilder_group_active
  4. Volte para a transação SE37.
  5. Em Function Module, escreva ZF_FUNCAO_DA e clique em Create.
  6. fbuilder_function
  7. Na aba Import, nos campos respectivos digite: Parameter name = TEXTO1, Typing = TYPE, Associated Type = String.
  8. No segundo registro digite: Parameter name = TEXTO2, Typing = TYPE, Associated Type = String.
  9. Na Aba Export, nos campos respectivos digite: Parameter name = RESULTADO, Typing = TYPE, Associated Type = String.
  10. Na Aba Exceptions nos campos respectivos digite: Exception = DA_ERRO, ShortText = Erro na função Dev Aberto.
  11. Na aba Source Code, você pode ver o código gerado automaticamente, preencha de acordo com a imagem abaixo.fbuilder_sourcecode
  12. Clique em Activate para ativar a função.

 Call Function

Para chamar um módulo de função, use a instrução de função de chamada  CALL FUNCTION.

Exemplo:

Neste exemplo criamos um modulo de função no Function Builder e usamos um programa para chamar esta função.

Abap

Função

FUNCTION ZF_FUNCAO_DA.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(TEXTO1) TYPE  STRING
*"     REFERENCE(TEXTO2) TYPE  STRING
*"  EXPORTING
*"     REFERENCE(RESULTADO) TYPE  STRING
*"  EXCEPTIONS
*"      DA_ERRO
*"----------------------------------------------------------------------

IF TEXTO1 NE 'ERRO'.

  CONCATENATE TEXTO1 TEXTO2 INTO RESULTADO SEPARATED BY ' '.

ELSE.

  RAISE DA_ERRO.

ENDIF.

ENDFUNCTION.

Programa

*&---------------------------------------------------------------------*
*& Report  ZFUNCAO
*&
*&---------------------------------------------------------------------*
*& Desenvolvimento Aberto
*& Modulo de Função
*&---------------------------------------------------------------------*

REPORT  ZFUNCAO.

DATA R_FUNCAO TYPE STRING.

* Chama função

CALL FUNCTION 'ZF_FUNCAO_DA'
  exporting
    TEXTO1    = 'Desenvolvimento'
    TEXTO2    = 'Aberto'
  importing
    RESULTADO = R_FUNCAO.

WRITE : / 'Retorno da função:', R_FUNCAO.

Diferentemente do Eclipse (IBM),  o NetBeans possui uma IDE gráfica que em seus primórdios foi baseada na IDE do Delphi (Borland), para quem conhece Delphi já sabe que a sua interface de GUI RAD foi um dos seus pontos fortes. O NetBeans adotado pela Sun e agora pela Oracle, possui uma magnifica e produtiva IDE para Java.

Há até uma certa disputa entre as duas IDEs e a preferencia dos desenvolvedores, se por um lado o Eclipse lhe proporciona um código mais limpo e mais leve, o NetBeans sem duvida lhe dará mais produtividade. Você precisa entender que o NetBeans assim o Eclipse não são apenas uma IDE e sim uma plataforma, apesar de serem famosos por proporcionarem uma IDE Java, cada um possui um proposito diferente.

O Eclipse é uma plataforma baseada em plug-ins que permite expansão infinita de suas funcionalidades, permitindo que à partir da plataforma Eclipse outros softwares sejam criados, como por exemplo o IBM Data Studio. O NetBeans é uma plataforma dedicada a desenvolvimento de softwares desktop proporcionando técnicas de desenvolvimento modulares prometendo reduzir o tempo de desenvolvimento de aplicações gráficas em até um ano a menos que outras plataformas.

Disputas a parte, você que esta começando pode escolher por conta própria a sua interface preferida e decidimos lhe ajudar a escolher a melhor forma para criar seus programas em Java.

Para baixar o NetBeans você pode ir diretamente no site da Oracle ou : https://netbeans.org/downloads/index.html

Desenvolvemos o mesmo programa baseado na diferença de escrita de código para as duas IDEs Java. Para ver o mesmo programa desenvolvido para a IDE Eclipse use o link abaixo:

IDE Eclipse: https://desenvolvimentoaberto.wordpress.com/2014/03/12/visual-controles-radiobutton-events-getstatechange-java/

Design First, Code Later em Java  Free Design
No Construtor de GUIs da IDE, você pode construir seus formulários simplesmente colocando os componentes onde quiser, como se você estivesse usando o posicionamento absoluto. O GUI Builder descobre quais são atributos de layout  necessários e, em seguida, gera o código para você automaticamente. Você não precisa se ​​preocupar com inserções, âncoras, preenchimentos, e assim por diante .

Para referencia de como deve ficar o seu projeto e o design de seu programa utilize a imagem abaixo:

IDE_NetBeans

NetBeans

  1. Crie um novo Projeto Java Application chamado JDevAberto e clique em Next.
  2. Deixe marcado o checkbox Criar Classe Principal, mas apague o conteúdo do campo de edição, o deixando em branco, em seguida clique em Finalizar.
  3. Já na IDE com o projeto aberto, clique com o botão direito no projeto escolha novo JFrame e o nomeie para JDevAberto_Main
  4. Na janela de propriedades do JFrame clique em Title coloque: “Desenvolvimento Aberto”.
  5. Coloque um JPanel e modifique sua largura e altura até atingir metade do JFrame.
  6. Com o JPanel selecionado, clique em Border na janela de propriedades.
  7. Em Borda com Titulo, coloque o titulo: “Escolha uma opção ou pressione Alt A, B, C ou D” e clique em OK.
  8. Arraste quatro Botões de Radio e em sua respectiva propriedade Text, nomei cada um dos elementos como: Somar, Subtrair, Multiplicar, Dividir.
  9. Na propriedade Mnemonic de cada botão coloque respectivamente as letras : A, B, C e D.
  10. Coloque um Grupo de Botões no JPanel, ele ficara invisivel no formulario.
  11. Clique em cada RadioButton e na propriedade buttonGroup escolha o grupo de botões.
  12. Coloque dois JLabel na tela e dois Campos de textos.
  13. Coloque o valor 0 na propriedade Text dos campos e nomeie a propriedade Texts dos Labels para : Numero
  14. Coloque um botão na tela, mude sua propriedade Text para “OK” e o alinhe ao lado dos labels e campos de texto.
  15. Coloque uma Area de Texto e modifique sua largura e altura para que complete a parte inferior da tela.
  16. No modo Design, na barra de ferramentas ao lado da paleta Histórico, clique no botão Visualizar Design para ver as funcionalidades da sua GUI.
  17. Clique no botão Run na barra de ferramentas para rodar sua aplicação.

Finalização

Neste ponto sua aplicação já possui o design mas ainda nenhuma funcionalidade, precisamos programar os eventos de cada botão, para isso de um duplo clique em cada RadioButton e um duplo clique no botão.

O NetBeans criou para você os eventos automaticamente, agora só precisamos olhar o código abaixo e completar os eventos em nosso programa, após a finalização seu programa deve funcionar como na imagem abaixo:

pCalc

Exemplo:

Este é o código criado automaticamente acrescentado do código dentro dos eventos para a funcionalidade do programa, para visualizar os  eventos de um modo mais fácil, procure o bloco de código  que está marcado com o comentário:  “//************** DA”.

Java

// *
// * To change this license header, choose License Headers in Project Properties.
// * To change this template file, choose Tools | Templates
// * and open the template in the editor.
// */

// **
// *
// * @author Desenvolvimento Aberto
// */
public class JDevAberto_Main extends javax.swing.JFrame {

   //**
   //* Creates new form JDevAberto_Main
   //*/
    public JDevAberto_Main() {
        initComponents();
    }

    //**
    // * This method is called from within the constructor to initialize the form.
    // * WARNING: Do NOT modify this code. The content of this method is always
    // * regenerated by the Form Editor.
    // */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        buttonGroup1 = new javax.swing.ButtonGroup();
        jPanel1 = new javax.swing.JPanel();
        jRadioButton1 = new javax.swing.JRadioButton();
        jRadioButton2 = new javax.swing.JRadioButton();
        jRadioButton3 = new javax.swing.JRadioButton();
        jRadioButton4 = new javax.swing.JRadioButton();
        jLabel1 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jTextField2 = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Desenvolvimento Aberto");

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Escolha uma opção ou pressione Alt A, B, C ou D"));

        buttonGroup1.add(jRadioButton1);
        jRadioButton1.setMnemonic('A');
        jRadioButton1.setText("Somar");
        jRadioButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jRadioButton1ActionPerformed(evt);
            }
        });

        buttonGroup1.add(jRadioButton2);
        jRadioButton2.setMnemonic('B');
        jRadioButton2.setText("Subtrair");
        jRadioButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jRadioButton2ActionPerformed(evt);
            }
        });

        buttonGroup1.add(jRadioButton3);
        jRadioButton3.setMnemonic('C');
        jRadioButton3.setText("Multiplicar");
        jRadioButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jRadioButton3ActionPerformed(evt);
            }
        });

        buttonGroup1.add(jRadioButton4);
        jRadioButton4.setMnemonic('D');
        jRadioButton4.setText("Dividir");
        jRadioButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jRadioButton4ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGap(15, 15, 15)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jRadioButton1)
                    .addComponent(jRadioButton2)
                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                        .addComponent(jRadioButton3)
                        .addComponent(jRadioButton4, javax.swing.GroupLayout.Alignment.LEADING)))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jRadioButton1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jRadioButton2)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jRadioButton3)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jRadioButton4))
        );

        jLabel1.setText("Numero:");

        jTextField1.setText("0");

        jTextField2.setText("0");

        jLabel2.setText("Numero:");

        jButton1.setText("OK");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jScrollPane1.setViewportView(jTextArea1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 141, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jLabel2)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 141, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, 87, Short.MAX_VALUE))
                    .addComponent(jScrollPane1))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel2)
                    .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButton1))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 162, Short.MAX_VALUE)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>

//************** DA
// Preencha os Eventos a seguir:

    private void jRadioButton4ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        jTextArea1.append("Dividir:\n");
    }

    private void jRadioButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        jTextArea1.append("Somar:\n");
    }

    private void jRadioButton2ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        jTextArea1.append("Subtrair:\n");
    }

    private void jRadioButton3ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        jTextArea1.append("Multiplicar:\n");
    }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:

        double total;

        if (jRadioButton1.getSelectedObjects() != null)
        {
            total = Double.parseDouble(jTextField1.getText()) +
                    Double.parseDouble(jTextField2.getText());

            jTextArea1.append(jTextField1.getText()  + " + " + jTextField2.getText() +
                              " = " + String.valueOf(total)+ "\n");

        }

        if (jRadioButton2.getSelectedObjects() != null)
        {
            total = Double.parseDouble(jTextField1.getText()) -
                    Double.parseDouble(jTextField2.getText());

            jTextArea1.append(jTextField1.getText()  + " - " + jTextField2.getText() +
                              " = " + String.valueOf(total)+ "\n");

        }

        if (jRadioButton3.getSelectedObjects() != null)
        {
            total = Double.parseDouble(jTextField1.getText()) *
                    Double.parseDouble(jTextField2.getText());

            jTextArea1.append(jTextField1.getText()  + " * " + jTextField2.getText() +
                              " = " + String.valueOf(total) + "\n");

        }

        if (jRadioButton4.getSelectedObjects() != null)
        {
            total = Double.parseDouble(jTextField1.getText()) /
                    Double.parseDouble(jTextField2.getText());

            jTextArea1.append(jTextField1.getText()  + " / " + jTextField2.getText() +
                              " = " + String.valueOf(total) + "\n");

        }
    }

 //************** DA
// Fim dos Eventos

    //**
    //* @param args the command line arguments
    //*/
    public static void main(String args[]) {
        //* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        //* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
        //* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
        //*/
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(JDevAberto_Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(JDevAberto_Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(JDevAberto_Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(JDevAberto_Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new JDevAberto_Main().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.ButtonGroup buttonGroup1;
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JRadioButton jRadioButton1;
    private javax.swing.JRadioButton jRadioButton2;
    private javax.swing.JRadioButton jRadioButton3;
    private javax.swing.JRadioButton jRadioButton4;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextArea1;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    // End of variables declaration
}

Struct – Estrututas – C++ e C#

Publicado: 14 de março de 2014 em C#, C/C++

Na Ciência da computação, uma estrutura de dados é um modo particular de armazenamento e organização de dados em um computador de modo que possam ser usados eficientemente.

Diferentes tipos de estrutura de dados são adequadas a diferentes tipos de aplicação e algumas são altamente especializadas, destinando-se a algumas tarefas específicas.

Struct

A palavra-chave estrutura define um tipo de estrutura e / ou de uma variável de um tipo de estrutura. Um tipo struct é um tipo de valor que normalmente é usado para encapsular pequenos grupos de variáveis ​​relacionadas, tais como as coordenadas de um retângulo ou as características de um item em um inventário.

É uma declaração que define uma lista de variáveis ​​a serem colocados sob o mesmo nome em um bloco de memória, permitindo que as diferentes variáveis ​​possam ser acessadas através de um único ponteiro.

O struct é uma palavra chave derivada da linguagem C, e não possui seu equivalente em Java, mas possui seu equivalente em ABAP e Python.

Abap : https://desenvolvimentoaberto.wordpress.com/2014/02/20/tipos-complexos-structures-abap/

Em Python um tuplas também pode armazenar diferentes tipos dentro de uma estrutura: https://desenvolvimentoaberto.wordpress.com/2014/02/22/tuples-tuplas-python-linux/

Exemplo:

Neste programa criamos uma estrutura de clientes.

C++

#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;

struct Cliente
{
	string nome;
	string logradouro;
	string endereco;
	int numero;
	string complemento;
	string bairro;
	string cidade;
	string contato;
	string cargo;
	int cep;
	long RG;
	long cpf;

};

int _tmain(int argc, _TCHAR* argv[])
{
	Cliente dados;

		dados.nome = "Instituto Brasileiro de Geografia e Estatística";
		dados.logradouro = "Avenida";
		dados.endereco = "Beira Mar";
		dados.numero = 436;
		dados.complemento = "13o Andar";
		dados.bairro = "Castelo";
		dados.cep = 20021060;
		dados.cidade = "Rio de Janeiro";
		dados.contato = "Mario de Oliveira Aguiar";
		dados.cargo = "Gerente";
		dados.RG = 999999999;
		dados.cpf = 99999999999;

		cout << "Empresa: " << dados.nome << endl;
		cout << dados.logradouro << " " << dados.endereco << " " <<
			dados.numero << " " << dados.complemento << endl;
		cout << "Cep: " << dados.cep << " " << dados.bairro << " " << dados.cidade << endl;
		cout << endl;
		cout << "Contato: " << dados.contato << " - " << dados.cargo << endl;
		cout << "Rg: " << dados.RG << " - Cpf: " << dados.cpf << endl;

		cout << endl;
		system("pause");

	return 0;
}

C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DesenvolvimentoAberto
{
    class Program
    {
         struct Cliente
        {
            public string nome;
            public string logradouro;
            public string endereco;
            public int numero;
            public string complemento;
            public string bairro;
            public string cidade;
            public string contato;
            public string cargo;
            public int cep;
            public long RG;
            public long cpf;
        }
        static void Main(string[] args)
        {
            Cliente dados = new Cliente();

            dados.nome = "Instituto Brasileiro de Geografia e Estatística";
            dados.logradouro = "Avenida";
            dados.endereco = "Beira Mar";
            dados.numero = 436;
            dados.complemento = "13o Andar";
            dados.bairro = "Castelo";
            dados.cep = 20021060;
            dados.cidade = "Rio de Janeiro";
            dados.contato = "Mario de Oliveira Aguiar";
            dados.cargo = "Gerente";
            dados.RG = 999999999;
            dados.cpf = 99999999999;

            Console.WriteLine( "Empresa: " + dados.nome);
            Console.WriteLine( dados.logradouro + " " + dados.endereco + " " +
                dados.numero + " " + dados.complemento);
            Console.WriteLine( "Cep: " + dados.cep + " " + dados.bairro + " " + dados.cidade );
            Console.WriteLine();
            Console.WriteLine( "Contato: " + dados.contato + " - " + dados.cargo);
            Console.WriteLine( "Rg: " + dados.RG + " - Cpf: " + dados.cpf );

            Console.WriteLine( );
            Console.ReadKey();
        }

    }
}

RadioButton

Em computação, um botão de opção ou botão de rádio (Radiobutton) é 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.

Grid

É o gerente de geometria de grade coloca os widgets em uma tabela bi-dimensional. O Widget mestre é dividido em um número de linhas e colunas, e cada “célula” na tabela resultante pode conter um widget.

Utilizar o gerenciador de grade é fácil. Basta criar os widgets, e usar o método grade para dizer ao gerente em que linha e coluna quer os colocar. Você não tem que especificar o tamanho da grade de antemão, o gerente determina automaticamente que a partir dos widgets na mesma. Linhas e colunas vazias são ignoradas.

Sticky

Os widgets são centrados em suas células. Você pode usar a opção Sticky para mudar isso, esta opção tem um ou mais valores do conjunto N, S, E, W. Para alinhar os rótulos para a borda esquerda, direita, cima e baixo.

ColumnSpan e  Rowspan

Os widgets podem abranger mais de um célula. A opção ColumnSpan é usada para permitir que um Widget alcance mais de uma coluna, e a opção rowspan deixa abranger mais de uma linha.

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. Você deve obter um programa Linux como na imagem acima.

Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# Radiobutton.py

# importa modulo
from Tkinter import *

# Cria formulario
formulario = Tk()
formulario.title = "Desenvolvimento Aberto"

# Evento CB on click
def evento1():
    if (r1.get() == 1):
         texto.insert(END,"Somar:\n")

def evento2():
    if (r1.get() == 2):
         texto.insert(END,"Subtrair:\n")

def evento3():
    if (r1.get() == 3):
         texto.insert(END,"Multiplicar:\n")

def evento4():
    if (r1.get() == 4):
         texto.insert(END,"Dividir:\n")

# Evento do botão
def callback():
    if (r1.get() == 1):
        n1 = float(campo1.get())
        n2 = float(campo2.get())
        total =  n1 + n2
        texto.insert(END, campo1.get() + " + " + campo2.get() + " = " + str(total) + "\n")

    if (r1.get() == 2):
        n1 = float(campo1.get())
        n2 = float(campo2.get())
        total =  n1 - n2
        texto.insert(END, campo1.get() + " - " + campo2.get() + " = " + str(total) + "\n")

    if (r1.get() == 3):
        n1 = float(campo1.get())
        n2 = float(campo2.get())
        total =  n1 * n2
        texto.insert(END, campo1.get() + " * " + campo2.get() + " = " + str(total) + "\n")

    if (r1.get() == 4):
        n1 = float(campo1.get())
        n2 = float(campo2.get())
        total =  n1 / n2
        texto.insert(END, campo1.get() + " / " + campo2.get() + " = " + str(total) + "\n")

# Define variavel para status do RadioButton
r1 = IntVar()

# Cria um novo label
rotulo = Label(formulario, text = "Escolha uma Opcao")

# Identa linhas usando o caracter continuacao de linua

# Cria os Componentes
opc1 = Radiobutton(formulario, text = "Somar", variable = r1, value =1, command = evento1)

opc2 = Radiobutton(formulario, text = "Subtrair", variable = r1, value = 2, command = evento2)

opc3 = Radiobutton(formulario, text = "Multiplicar", variable = r1, value =3, command = evento3)

opc4 = Radiobutton(formulario, text = "Dividir", variable = r1, value = 4, command = evento4)

rotulo1 = Label(formulario, text = "Numero 1:")

rotulo2 = Label(formulario, text = "Numero 2:")

campo1 = Entry(formulario)

campo2 = Entry(formulario)

botao = Button(formulario, text="Ok", command = callback)
texto = Text(formulario, height = 10, width = 50)

# Adiciona Componentes no Grid
rotulo.grid(sticky=W)

opc1.grid(row=1, sticky=W)
opc2.grid(row=2, sticky=W)
opc3.grid(row=3, sticky=W)
opc4.grid(row=4, sticky=W)

rotulo1.grid(row=5,sticky=W)
campo1.grid(row=5, columnspan=2)
rotulo2.grid(row=6,sticky=W)
campo2.grid(row=6, columnspan =2)

botao.grid(row=6, columnspan= 3, sticky=E)

texto.grid(row=7)

# Roda o loop principal do tcl
mainloop()

Diferentemente das linguagens baseadas no Microsoft Framework, o MFC utiliza C++ nativo e trabalha direto no conceito do sistema operacional Windows manipulando mensagens diretamente das APIs do Windows, portanto o que é muito simples como  programar em uma linguagem de alto nível, aqui fica um pouco diferente e um pouco mais complicado, é o caso de verificar o simples status de um Checkbox ou um Radiobutton.

RadioButton

Em computação, um botão de opção ou botão de rádio (Radiobutton) é 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.

GetCheckedRadioButton

É uma função que retorna um valor equivalente ao Checked (marcado) em linguagens de alto nível, neste caso recupera o ID do botão de opção atualmente verificado no grupo especificado e retorna o ID do botão de opção marcada, ou 0 se nenhum for selecionado.

Visual Studio

Escolha um novo projeto MFC Application, e marque Dialog Based, em Design Time, apague os componentes default e coloque um 3 StaticTexts, 4 Radiobuttons, 3 EditsControl e um botão. Mude as propriedades de um EditControl para Multiline = true, Read Only = true e Vertical Scroll = true. Use a imagem abaixo para referencia do design.

radiobutton_design

Aqui levamos em consideração que você já sabe como usar as variáveis para os componentes e como criar seus respectivos eventos, caso ainda não saiba veja nosso primeiro post MFC. Crie as variáveis como na imagem abaixo:

radiobutton_var

Crie os eventos BN_CLICKED para cada RadioButton e  para o botão. Use o código abaixo para completar o código gerado automaticamente, seu programa deve apresentar o seguinte resultado:

radiobutton_exe

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++


// RadioBDlg.cpp : implementation file
//

#include "stdafx.h"
#include "RadioB.h"
#include "RadioBDlg.h"
#include "afxdialogex.h"
#include "Windowsx.h"
#include <assert.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// CAboutDlg dialog used for App About

class CAboutDlg : public CDialogEx
{
public:
	CAboutDlg();

// Dialog Data
	enum { IDD = IDD_ABOUTBOX };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

// Implementation
protected:
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()

// CRadioBDlg dialog

CRadioBDlg::CRadioBDlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(CRadioBDlg::IDD, pParent)

{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CRadioBDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_EDIT1, campo1);
	DDX_Control(pDX, IDC_EDIT2, campo2);
	DDX_Control(pDX, IDC_BUTTON1, botao);
	DDX_Control(pDX, IDC_EDIT3, texto);
}

BEGIN_MESSAGE_MAP(CRadioBDlg, CDialogEx)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_RADIO1, &CRadioBDlg::OnBnClickedRadio1)
ON_BN_CLICKED(IDC_RADIO2, &CRadioBDlg::OnBnClickedRadio2)
ON_BN_CLICKED(IDC_RADIO3, &CRadioBDlg::OnBnClickedRadio3)
ON_BN_CLICKED(IDC_RADIO4, &CRadioBDlg::OnBnClickedRadio4)
ON_BN_CLICKED(IDC_BUTTON1, &CRadioBDlg::OnBnClickedButton1)
END_MESSAGE_MAP()

// CRadioBDlg message handlers

BOOL CRadioBDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		BOOL bNameValid;
		CString strAboutMenu;
		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
		ASSERT(bNameValid);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon

	// TODO: Add extra initialization here

	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CRadioBDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialogEx::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CRadioBDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialogEx::OnPaint();
	}
}

// The system calls this function to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CRadioBDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}

/**

  Nosso Código começa Aqui

  **/

// Evento on click do RadioButton - Append menssagem

void CRadioBDlg::OnBnClickedRadio1()
{

		int tam = texto.GetWindowTextLengthW();
		texto.SetSel(tam, tam);
		texto.ReplaceSel(L"Somar:\n");

}

void CRadioBDlg::OnBnClickedRadio2()
{

	int tam = texto.GetWindowTextLengthW();
	texto.SetSel(tam, tam);
	texto.ReplaceSel(L"Subtrair:\n");
}

void CRadioBDlg::OnBnClickedRadio3()
{

	int tam = texto.GetWindowTextLengthW();
	texto.SetSel(tam, tam);
	texto.ReplaceSel(L"Multiplicar:\n");
}

void CRadioBDlg::OnBnClickedRadio4()
{

	int tam = texto.GetWindowTextLengthW();
	texto.SetSel(tam, tam);
	texto.ReplaceSel(L"Dividir:\n");
}

// Evento On Click do Botão -- Efetua o calculo

void CRadioBDlg::OnBnClickedButton1()
{

	CString valor1;
	CString valor2;
	CString dTOstr;
	double total;

	//Captura valor dos TextControls
	campo1.GetWindowTextW(valor1);
	campo2.GetWindowTextW(valor2);

	// Verifica qual RadioButton esta checado
	int RadioStatus = GetCheckedRadioButton(IDC_RADIO1, IDC_RADIO4);

		switch (RadioStatus)
		{
		case IDC_RADIO1:
			{

				total = _wtof(valor1) + _wtof(valor2);
				dTOstr.Format(_T("%2.f"), total);
				int tam = texto.GetWindowTextLengthW();
				texto.SetSel(tam, tam);
				texto.ReplaceSel(valor1 + L" + " + valor2 + L" = " + dTOstr + L"\n");
			}
			break;

			case IDC_RADIO2:
			{

				total = _wtof(valor1) - _wtof(valor2);
				dTOstr.Format(_T("%2.f"), total);
				int tam = texto.GetWindowTextLengthW();
				texto.SetSel(tam, tam);
				texto.ReplaceSel(valor1 + L" - " + valor2 + L" = " + dTOstr + L"\n");
			}
				break;

			case IDC_RADIO3:
			{

				total = _wtof(valor1) * _wtof(valor2);
				dTOstr.Format(_T("%2.f"), total);
				int tam = texto.GetWindowTextLengthW();
				texto.SetSel(tam, tam);
				texto.ReplaceSel(valor1 + L" * " + valor2 + L" = " + dTOstr + L"\n");
			}
				break;

			case IDC_RADIO4:
			{

				total = _wtof(valor1) / _wtof(valor2);
				dTOstr.Format(_T("%2.f"), total);
				int tam = texto.GetWindowTextLengthW();
				texto.SetSel(tam, tam);
				texto.ReplaceSel(valor1 + L" / " + valor2 + L" = " + dTOstr + L"\n");
			}
				break;
		}

}

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

            }

        }
    }
}

Checkbutton

O Widget checkbutton é um widget Tkinter padrão usados ​​para implementar seleções on-off. Checkbuttons podem conter texto ou imagens, e você pode associar uma função Python ou método para cada botão. Quando o botão é pressionado, Tkinter chama essa função ou método.

Text

O Text é um Widget de texto que fornece exibição de texto formatado. Ele permite que você para exibir e editar texto com vários estilos e atributos. O widget também suporta imagens e Windows Embedded.

Line Continue

O caractere \ (barra invertida) é usado para dizer ao interpretador Python que você esta continuando uma linha de código em um nova linha, evitando assim que o interpretador acuse um erro de identação.

Exemplo:

Neste exemplo criamos três checkbuttons usando o evento ONCLICK através do comando command, onde verificamos se o status do checkbutton foi checado ou não.

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# checkbox.py

# importa modulo
from Tkinter import *

# Cria formulario
formulario = Tk()
formulario.title = "Desenvolvimento Aberto"

# Evento CB on click
def evento1():
    if (c1.get() == 1):
         texto.insert(END,"Voce selecionou no Checkbox 1\n")
    else:
         texto.insert(END,"Voce deselecionou no Checkbox 1\n")

def evento2():
    if (c2.get() == 1):
         texto.insert(END,"Voce selecionou no Checkbox 2\n")
    else:
         texto.insert(END,"Voce deselecionou no Checkbox 2\n")

def evento3():
    if (c3.get() == 1):
         texto.insert(END,"Voce selecionou no Checkbox 3\n")
    else:
         texto.insert(END,"Voce deselecionou no Checkbox 3\n")

# Define variavel para status do checkbox
c1 = IntVar()
c2 = IntVar()
c3 = IntVar()

# Cria um novo label
rotulo = Label(formulario, text = "Concatena Strings")

# Identa linhas usando o caracter continuacao de linua

# Cria os checkbox
opc1 = Checkbutton(formulario, text = "Opcao1", \
                   variable =c1, \
                   command = evento1)

opc2 = Checkbutton(formulario, text = "Opcao2", \
                   variable =c2, \
                   command = evento2)

opc3 = Checkbutton(formulario, text = "Opcao3", \
                   variable =c3, \
                   command = evento3)

texto = Text(formulario, height = 10, width = 50)

# Adiciona Componentes no Grid
rotulo.grid(row=0, column=1)
opc1.grid(row=1, column=1)
opc2.grid(row=2, column=1)
opc3.grid(row=3, column=1)
texto.grid(row=4, column=1)

# Roda o loop principal do tcl
mainloop()

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.

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.

Java

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Radio extends JPanel implements ItemListener, ActionListener {

	// Declara Objetos
	JLabel rotulo;

	JRadioButton soma;
	JRadioButton subtrai;
	JRadioButton multiplica;
	JRadioButton divide;

	JLabel rotulo1;
	JLabel rotulo2;

	JTextField campo1;
	JTextField campo2;

	JButton botao;

	JTextArea texto;

	double total;

	public Radio() {

		// Cria novos Objetos

		rotulo = new JLabel("Escolha um RadioButton ou Alt + A, B, C ou C:");

		soma = new JRadioButton("Soma");
		subtrai = new JRadioButton("Subtrai");
		multiplica = new JRadioButton("Multiplica");
		divide = new JRadioButton("Divide");

		rotulo1 = new JLabel("Numero");
		campo1 = new JTextField("0,00");
		rotulo2 = new JLabel("Numero");
		campo2 = new JTextField("0,00");

		botao = new JButton("OK");

		texto = new JTextArea(5, 20);

		ButtonGroup grupo = new ButtonGroup();

		grupo.add(soma);
		grupo.add(subtrai);
		grupo.add(multiplica);
		grupo.add(divide);

		// Seta atalho do teclado ex: ALT + A ou B ou C
		soma.setMnemonic(KeyEvent.VK_A);
		subtrai.setMnemonic(KeyEvent.VK_B);
		multiplica.setMnemonic(KeyEvent.VK_C);
		divide.setMnemonic(KeyEvent.VK_D);

		// Seta Evento
		soma.addItemListener(this);
		subtrai.addItemListener(this);
		multiplica.addItemListener(this);
		divide.addItemListener(this);
		botao.addActionListener(this);

		// Seta texto não editavel
		texto.setEditable(false);

		// Cria barras de rolagem
		JScrollPane barra = new JScrollPane(texto);

		// Seta restrições para barra de rolagem
		GridBagConstraints c = new GridBagConstraints();
		c.gridwidth = GridBagConstraints.REMAINDER;

		// Seta tamanho do preenchimento para as barras
		c.fill = GridBagConstraints.BOTH;
		c.weightx = 1.0;
		c.weighty = 1.0;

		// cria paineis
		JPanel painel1 = new JPanel();
		JPanel painel2 = new JPanel();
		JPanel painel3 = new JPanel();
		JPanel painel4 = new JPanel();

		// adiciona componentes nos paineis
		painel1.add(rotulo);
		painel2.add(soma);
		painel2.add(subtrai);
		painel2.add(multiplica);
		painel2.add(divide);

		painel3.add(rotulo1);
		painel3.add(campo1);
		painel3.add(rotulo2);
		painel3.add(campo2);
		painel3.add(botao);

		painel4.add(barra, c);

		// adiciona painel e centraliza
		add(painel1, BorderLayout.CENTER);
		add(painel2, BorderLayout.CENTER);
		add(painel3, BorderLayout.CENTER);
		add(painel4, BorderLayout.CENTER);

	}

	public void itemStateChanged(ItemEvent e)

	{
		// Evento de mudança de estado do checkbox

		// captura item celecionado
		Object fonte = e.getItemSelectable();
		int estado = e.getStateChange();

		// coloca o cursor no final do texto para efeito de rolagem
		texto.setCaretPosition(texto.getDocument().getLength());

		// Seleciona o estado sem esta condição o a rotina executa duas vezes
		// A primeira quando o item é selecionado a segunda quando é deselecionado
		// estados: Selected = selecionado - Deselected - deselecionado
		if (estado == ItemEvent.SELECTED) {

			// Define click no checkbox
			if (fonte == soma) {
				texto.append("Soma:" + "\n");
			}

			if (fonte == subtrai) {
				texto.append("Subtração:" + "\n");
			}

			if (fonte == multiplica) {
				texto.append("Multiplicação:" + "\n");
			}

			if (fonte == divide) {
				texto.append("Divisão:" + "\n");
			}

		}

	}

	public static void main(String[] args) {

		// adicona thread do swing
		javax.swing.SwingUtilities.invokeLater(new Runnable() {

			@Override
			public void run() {

				// cria formulario
				JFrame formulario = new JFrame("Desenvolvimento Aberto");
				formulario.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

				// monta paineis de componetes no frame
				JComponent componentes = new Radio();
				componentes.setOpaque(true);

				// Seta propriedades do frame
				formulario.setContentPane(componentes);
				formulario.setSize(400, 250);
				formulario.setVisible(true);
			}
		});
	}

	// Evento do botão - OnClick
	public void actionPerformed(ActionEvent e) {

		// coloca o cursor no final do texto para efeito de rolagem
		texto.setCaretPosition(texto.getDocument().getLength());

        // Verifica o objeto selecionado e efetua a operação correspondente

		//Soma
		if (soma.getSelectedObjects() != null) {
			total = Double.parseDouble(campo1.getText())
					+ Double.parseDouble(campo2.getText());
			texto.append(campo1.getText() + " + " + campo2.getText() + " = "
					+ String.valueOf(total) + "\n");
		}

		// Subtração
		if (subtrai.getSelectedObjects() != null) {
			total = Double.parseDouble(campo1.getText())
					- Double.parseDouble(campo2.getText());
			texto.append(campo1.getText() + " - " + campo2.getText() + " = "
					+ String.valueOf(total) + "\n");
		}

		// Multiplicação
		if (multiplica.getSelectedObjects() != null) {
			total = Double.parseDouble(campo1.getText())
					* Double.parseDouble(campo2.getText());
			texto.append(campo1.getText() + " * " + campo2.getText() + " = "
					+ String.valueOf(total) + "\n");
		}

		// Divisão
		if (divide.getSelectedObjects() != null) {
			total = Double.parseDouble(campo1.getText())
					/ Double.parseDouble(campo2.getText());
			texto.append(campo1.getText() + " / " + campo2.getText() + " = "
					+ String.valueOf(total) + "\n");
		}
	}

}

No post anterior mostramos como criar um projeto MFC para usar C++ nativo direto das APIs do Windows, portanto não vamos entrar em detalhes agora sobre como criar os eventos e o DoDataExchange dos componentes. Crie um form de acordo com o design da imagem abaixo:

checkbox

Access Keys

Uma tecla de acesso é um caractere sublinhado no texto de um menu, item de menu, ou o rótulo de um controle como um botão. Ele permite o usuário “clicar” em um botão, pressionando a tecla ALT em combinação com a tecla de acesso predefinido. Por exemplo, se um botão executa um procedimento para imprimir um formulário, e, portanto, sua propriedade Text é definido como “Imprimir”, acrescentando um e comercial antes da letra “i” faz com que a letra “i”, seja sublinhada no texto do botão em tempo de execução tempo. O usuário pode executar o comando associado ao botão pressionando ALT + I. Você não pode ter uma chave de acesso para um controle que não pode receber o foco, por exemplo, um controle TabPage.

CheckBox

Representa um CheckBox do Windows

OnBnClicked

Ocorre quando o um botão recebe um click do mouse.

Visual Studio

  1. Abra um projeto MFC Application.
  2. Use a imagem acima para referencia.
  3. Coloque no form 1 componente Static text.
  4. Coloque no form 3 componentes CheckBox.
  5. Para todos os CheckBoxes a propriedade Caption precisa do Access Key &, exemplo: Opção 1 Alt + &X
  6. Coloque no form 1 componente EditControl.
  7. Mude as propriedade do EditControl: Multilines = True, Read Only = True, Vertical Scroll = True.
  8. Crie as variáveis para os CheckBox e para o EditControl.
  9. Crie um evento OnBnClicked para os 3 CheckBoxes.
  10. Use o código abaixo para completar o código gerado automaticamente.

Exemplo:

Neste exemplo mostramos como usar o componente checkbox seus eventos e como usar hotkeys para manipular o checkbox e imprimir o resultado criando um efeito do comando Append dentro de um componente EditControl Multiline.

C++


// CheckboxDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Checkbox.h"
#include "CheckboxDlg.h"
#include "afxdialogex.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// CCheckboxDlg dialog

CCheckboxDlg::CCheckboxDlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(CCheckboxDlg::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CCheckboxDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_CHECK1, opc1);
	DDX_Control(pDX, IDC_CHECK2, opc2);
	DDX_Control(pDX, IDC_CHECK3, opc3);
	DDX_Control(pDX, IDC_EDIT1, texto);
}

BEGIN_MESSAGE_MAP(CCheckboxDlg, CDialogEx)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_CHECK1, &CCheckboxDlg::OnBnClickedCheck1)
	ON_BN_CLICKED(IDC_CHECK2, &CCheckboxDlg::OnBnClickedCheck2)
	ON_BN_CLICKED(IDC_CHECK3, &CCheckboxDlg::OnBnClickedCheck3)

END_MESSAGE_MAP()

// CCheckboxDlg message handlers

BOOL CCheckboxDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon

	// TODO: Add extra initialization here

	return TRUE;  // return TRUE  unless you set the focus to a control
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CCheckboxDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialogEx::OnPaint();
	}
}

// The system calls this function to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CCheckboxDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}

/** Nosso codigo começa aqui.

   O codigo abaixo mostra como criar o efeito da palavra chave
   APPEND em C++ em um EditControl Multiline.

   Para criar o efeito capturamos o tamanho do texto atual,
   criamos um ponto de selecão e
   trocamos a selecção pelo novo texto.

   **/

 void CCheckboxDlg::OnBnClickedCheck1()
{
	int tam = texto.GetWindowTextLengthW();
	texto.SetSel(tam, tam);
	texto.ReplaceSel(L"Você clicou no Checkbox 1\n");
}

void CCheckboxDlg::OnBnClickedCheck2()
{
	int tam = texto.GetWindowTextLengthW();
	texto.SetSel(tam, tam);
	texto.ReplaceSel(L"Você clicou no Checkbox 2\n");
}

void CCheckboxDlg::OnBnClickedCheck3()
{
	int tam = texto.GetWindowTextLengthW();
	texto.SetSel(tam, tam);
	texto.ReplaceSel(L"Você clicou no Checkbox 3\n");
}

Access Keys

Uma tecla de acesso é um caractere sublinhado no texto de um menu, item de menu, ou o rótulo de um controle como um botão. Ele permite o usuário “clicar” em um botão, pressionando a tecla ALT em combinação com a tecla de acesso predefinido. Por exemplo, se um botão executa um procedimento para imprimir um formulário, e, portanto, sua propriedade Text é definido como “Imprimir”, acrescentando um e comercial antes da letra “i” faz com que a letra “i”, seja sublinhada no texto do botão em tempo de execução tempo. O usuário pode executar o comando associado ao botão pressionando ALT + I. Você não pode ter uma chave de acesso para um controle que não pode receber o foco, por exemplo, um controle TabPage.

CheckBox

Representa um CheckBox do Windows

CheckedChanged

Ocorre quando o valor da propriedade Checked muda entre postagens para o servidor.

TextBox

Representa um controle de caixa de texto do Windows.

KeyPreview

Obtém ou define um valor indicando se o formulário receberá eventos de teclas antes do evento ser passado para o controle que tem o foco.

HotKeys

É o termo utilizado para teclas de atalho em C#

Keys Enumeration

Esta enumeração tem um atributo FlagsAttribute que permite uma combinação bit a bit de seus valores de membro. Pode ser usado através da classe Keys.

KeyDown

É um evento que ocorre quando uma tecla é pressionada enquanto o controle tem foco.

Exemplo:

Neste exemplo mostramos como usar o componente checkbox seus eventos e como usar hotkeys para manipular o checkbox e imprimir o resultado dentro de um componente textbox.

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 WindowsFormsApplication14
{

    public partial class Form1 : Form
    {
        // Define componentes
        Label rotulo;
        CheckBox opc1;
        CheckBox opc2;
        CheckBox opc3;
        TextBox texto;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Shown(object sender, EventArgs e)
        {
            // Cria componentes dinamicamente no evento form shown
            rotulo = new Label();
            opc1 = new CheckBox();
            opc2 = new CheckBox();
            opc3 = new CheckBox();
            texto = new TextBox();

            // posiciona componentes no form
            rotulo.Location = new Point (5, 10);
            opc1.Location = new Point (5, 30);
            opc2.Location = new Point(5, 50);
            opc3.Location = new Point(5, 70);
            texto.Location = new Point(5, 100);

            // adiciona a propriedade de texto nos componentes
            rotulo.Text = "Escolha um Checkbox ou pressione A, B ou C:";
            opc1.Text = "Opção 1 - Alt + &X";
            opc2.Text = "Opção 2 - Alt + &Y";
            opc3.Text = "Opção 3 - Alt + &Z";

            // 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
            rotulo.Size = new Size(250, 20);
            opc1.Size = new Size(130, 20);
            opc2.Size = new Size(130, 20);
            opc3.Size = new Size(130, 20);
            texto.Size = new Size(250, 100);

            // Define eventos para o checkbox
            opc1.CheckedChanged += new System.EventHandler(opc1_CheckedChanged);
            opc2.CheckedChanged += new System.EventHandler(opc2_CheckedChanged);
            opc3.CheckedChanged += new System.EventHandler(opc3_CheckedChanged);

            // 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(opc1);
            Form1.ActiveForm.Controls.Add(opc2);
            Form1.ActiveForm.Controls.Add(opc3);
            Form1.ActiveForm.Controls.Add(texto);

        }

        // Eventos do checkbox
        private void opc1_CheckedChanged(object sender, EventArgs e)
        {
            texto.AppendText("Você clicou no checkbox 1\n");
        }

        private void opc2_CheckedChanged(object sender, EventArgs e)
        {
            texto.AppendText("Você clicou no checkbox 2\n");
        }
        private void opc3_CheckedChanged(object sender, EventArgs e)
        {
            texto.AppendText("Você clicou no checkbox 3\n");
        }

        // Evento de tecla pressionada
        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {

            if  (e.KeyCode == Keys.A)
            {

                    if (opc1.Checked == true)
                    {
                        opc1.Checked = false;
                    }
                    else
                    {
                        opc1.Checked = true;
                    }

            }

            if (e.KeyCode == Keys.B)
            {

                if (opc2.Checked == true)
                {
                    opc2.Checked = false;
                }
                else
                {
                    opc2.Checked = true;
                }

            }

            if (e.KeyCode == Keys.C)
            {

                if (opc3.Checked == true)
                {
                    opc3.Checked = false;
                }
                else
                {
                    opc3.Checked = true;
                }

            }

        }
    }
}