• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Dkid

[Resolvido] Visual C# - Calculadora Simples

8 mensagens neste tópico

Boas pessoal a Duvida foi finalmente Resolvida !!

Primeira calculadora, 2 visores, e sem botões.

É o habitual quando se tenta fazer uma calculadora pela primeira vez !

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Calculadora
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void sairToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Environment.Exit(0); // Sai da aplicação
        }
        /* Para ser possivel calcular dois valores em caixas de texto é necessário converter os valores,
         * é presiso usar o método Parse, pois uma caixa de texto é um conjunto de caracteres e deve ser
         * convertido para int (inteiro) ou outro tipo, como double. Declarei double por ser mais
         * abrangente do que o int.
         */
        private void soma_Click(object sender, EventArgs e)
        {   
            double N1 = double.Parse(Tbox1.Text);
            double N2 = double.Parse(Tbox2.Text);
            double outcome; // necessario para mostrar o resultado
            outcome = N1 + N2;
            Rbox.Text = outcome.ToString();
            Xbox.Text = Tbox1.Text + " + " + Tbox2.Text + " = " + outcome.ToString();
        }

        private void sub_Click(object sender, EventArgs e)
        {
            double N1 = double.Parse(Tbox1.Text);
            double N2 = double.Parse(Tbox2.Text);
            double outcome;
            outcome = N1 - N2;
            Rbox.Text = outcome.ToString();
            Xbox.Text = Tbox1.Text + " - " + Tbox2.Text + " = " + outcome.ToString();
        }

        private void multi_Click(object sender, EventArgs e)
        {
            double N1 = double.Parse(Tbox1.Text);
            double N2 = double.Parse(Tbox2.Text);
            double outcome;
            outcome = N1 * N2;
            Rbox.Text = outcome.ToString();
            Xbox.Text = Tbox1.Text + " x " + Tbox2.Text + " = " + outcome.ToString();
        }

        private void divisao_Click(object sender, EventArgs e)
        {
            double N1 = double.Parse(Tbox1.Text);
            double N2 = double.Parse(Tbox2.Text);
            double outcome;
            outcome = N1 / N2;
            Rbox.Text = outcome.ToString();
            Xbox.Text = Tbox1.Text + " / " + Tbox2.Text + " = " + outcome.ToString();
        }

        private void Resto_Click(object sender, EventArgs e)
        {
            double N1 = double.Parse(Tbox1.Text);
            double N2 = double.Parse(Tbox2.Text);
            double outcome;
            outcome = N1 % N2;
            Rbox.Text = outcome.ToString();
            Xbox.Text = Tbox1.Text + " / " + Tbox2.Text + " = " + outcome.ToString() + " de resto";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Tbox1.Text = "";
            Tbox2.Text = "";
            Rbox.Text = "";
            Xbox.Text = "";
        }


        private void Form1_Load(object sender, EventArgs e)
        {
            this.Xbox.ReadOnly = true; // nao permite que as textboxes sejam alteradas
            this.Rbox.ReadOnly = true;
        }

        private void sobreToolStripMenuItem_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Programado em Visual C# ");
        }

        private void ficheiroToolStripMenuItem_Click(object sender, EventArgs e)
        {

        }

        private void E2_Click(object sender, EventArgs e)
        {
            double N1 = double.Parse(Tbox1.Text);
            double outcome;
            outcome = N1* N1;
            Rbox.Text = outcome.ToString();
            Xbox.Text = Tbox1.Text + "  = " + outcome.ToString();
        }

    }
}

Deixo Aqui a minha segunda calculadora bem sucedida (finalmente depois de uma semana a pesquisar)

Esta já traz um visor, traz os botões para fazer as contas... espero que seja util a quem esta a aprender Visual C#

namespace calc
{
    public partial class Form1 : Form
    {
        private enum CalcState
        {
            DivideporZero,
            N1,
            N2
        }

        private enum CalcOperation
        {
            Igual,
            Multi,
            Divide,
            Soma,
            Sub
        }

        private long Op1 = 0;
        private long Op2 = 0;
        private CalcState State = CalcState.N1;
        private CalcOperation LastOperation = CalcOperation.Igual;

        public Form1()
        {
            InitializeComponent();
        }
        void AddDigit(byte digit)
        {
            long displayValue = 0;
            switch (State)
            {
                case CalcState.N1:
                    // para sistemas 64-bits
                    if (((ulong)Op1 * 10 + digit) <= System.Int64.MaxValue)
                        Op1 = Op1 * 10 + digit;
                    displayValue = Op1;
                    break;
                case CalcState.N2:
                    if (((ulong)Op2 * 10 + digit) <= System.Int64.MaxValue)
                        Op2 = Op2 * 10 + digit;
                    displayValue = Op2;
                    break;
                case CalcState.DivideporZero:
                    return;
            }

            Vbox.Text = displayValue.ToString();
        }

        void DoOperation(CalcOperation op)
        {
            long displayValue = 0;
            State = CalcState.N2;

            switch (LastOperation)
            {
                case CalcOperation.Igual:
                    displayValue = Op1;
                    break;
                case CalcOperation.Multi:
                    Op1 *= Op2;
                    Op2 = 1;
                    displayValue = Op1;
                    break;
                case CalcOperation.Divide:
                    if (Op2 == 0)
                    {
                        State = CalcState.DivideporZero;
                        Vbox.Text = "Impossivel Dividir por Zero";
                        return;
                    }
                    Op1 /= Op2;
                    Op2 = 1;
                    displayValue = Op1;
                    break;
                case CalcOperation.Soma:
                    Op1 += Op2;
                    Op2 = 0;
                    displayValue = Op1;
                    break;
                case CalcOperation.Sub:
                    Op1 -= Op2;
                    Op2 = 0;
                    displayValue = Op1;
                    break;
            }
            LastOperation = op;
            Vbox.Text = Op1.ToString();
            Op2 = 0;
        }

        private void Button0_Click(object sender, EventArgs e)
        {
            AddDigit(0);
        }

        private void Button1_Click(object sender, EventArgs e)
        {
            AddDigit(1);
        }

        private void Button2_Click(object sender, EventArgs e)
        {
            AddDigit(2);
        }

        private void Button3_Click(object sender, EventArgs e)
        {
            AddDigit(3);
        }

        private void Button4_Click(object sender, EventArgs e)
        {
            AddDigit(4);
        }

        private void Button5_Click(object sender, EventArgs e)
        {
            AddDigit(5);
        }

        private void Button6_Click(object sender, EventArgs e)
        {
            AddDigit(6);
        }

        private void Button7_Click(object sender, EventArgs e)
        {
            AddDigit(7);
        }

        private void Button8_Click(object sender, EventArgs e)
        {
            AddDigit(8);
        }

        private void Button9_Click(object sender, EventArgs e)
        {
            AddDigit(9);
        }

        private void BtnSm_Click(object sender, EventArgs e)
        {
            DoOperation(CalcOperation.Soma);
        }

        private void BtnSub_Click(object sender, EventArgs e)
        {
            DoOperation(CalcOperation.Sub);
        }

        private void BtnMulti_Click(object sender, EventArgs e)
        {
            DoOperation(CalcOperation.Multi);
        }

        private void BtnDiv_Click(object sender, EventArgs e)
        {
            DoOperation(CalcOperation.Divide);
        }

        private void Clear_Click(object sender, EventArgs e)
        {
            State = CalcState.N1;
            LastOperation = CalcOperation.Igual;
            Op1 = 0;
            Op2 = 0;
            Vbox.Text = Op1.ToString();
        }

        private void BtnIgual_Click(object sender, EventArgs e)
        {
            DoOperation(CalcOperation.Igual);
        }

        private void button10_Click(object sender, EventArgs e)
        {
            long displayValue = 0;
            switch (State)
            {
                case CalcState.DivideporZero:
                    return;
                case CalcState.N1:
                    Op1 /= 10;
                    displayValue = Op1;
                    break;
                case CalcState.N2:
                    Op2 /= 10;
                    displayValue = Op2;
                    break;
            }
            Vbox.Text = displayValue.ToString();
        }

        private void Sinal_Click(object sender, EventArgs e)
        {
            long displayValue = 0;
            switch (State)
            {
                case CalcState.DivideporZero:
                    return;
                case CalcState.N1:
                    Op1 = -Op1;
                    displayValue = Op1;
                    break;
                case CalcState.N2:
                    Op2 = -Op2;
                    displayValue = Op2;
                    break;
            }
            Vbox.Text = displayValue.ToString();
        }

        private void Vbox_TextChanged(object sender, EventArgs e)
        {
            this.Vbox.ReadOnly = true;
        }

        private void sairToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
    }

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas, as minhas duvidas mantêm-se....

Vou reformular a minha pergunta,

Neste momento tenho uma caixa de texto que vai aceitar os números vindos dos botões !

Para ser mais explicito o objectivo e ficar uma calculadora idêntica a do Windows.

Quero que ao clicar no botão (exemplo botão 1 ) apareça 1 na caixa de texto, e quando eu clicar num outro botão (exemplo botão 3) na caixa de texto esteja 13, depois quando clicar no botão + ele aceite um novo numero....

Se calhar não me estou a explicar bem, a duvida é básica, mas eu não sei como o fazer....

obrigado pela atenção

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Por exemplo, código quando carregas no botão '1' e a textbox chama-se "txtBox1".

txtBox1.Text += "1";

Isto é um exemplo, na prática não te aconselho a fazeres isto para todos os botões, substituindo o "1" por "2", etc. Deves antes ir buscar o "1", "2", etc à label do botão que activaste.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ahh queres então quando ao clicar no '+' ele mude de número. Então tens que no evento do click desse botão, pegar no conteúdo da textbox e por numa variável interna e então limpar a textbox para receberes um número novo.

PS: Já agora o código que pus em cima está errado. Não é = mas sim +=, já corrigi.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas, eu a uma semana fiz para a escola a calculadora do windows é extremamente facil.. para aparecer no visor os numeros em q clicas, todos seguidos tens de fazer uma conctenaçao, deixo abaixo a parte do meu condigo onde faço isso acontecer.

:biggrin:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

namespace prjCalculadora

{

    public partial class frmCalc : Form

    {

        public frmCalc()

        {

            InitializeComponent();

        }

   

        public string y;

        public double z;

        private void cmd1_Click(object sender, EventArgs e)

        {

            y = y + 1;              //conctenação

            txtVisor.Text = y;

        }

        private void cmd2_Click(object sender, EventArgs e)

        {

            y = y + 2;

            txtVisor.Text = y;

        }

Aqui neste pedaço de codigo, a  variavel y, é do tipo string, e vai guardar  o valor que ja tem, e o valor do botao onde tu clicas, ou seja, se clicares no botao "1" (cmd1), na textbox, a qual chamei txtVisor, vai aparecer "1", e  fica guardado na variavel y, dps se clicares no botao "2", na textbox vai aparecer "12".. Penso que tenha sido isto que estavas a pedir ajuda.

private void cmdSoma_Click(object sender, EventArgs e)

        {

   

            z = Convert.ToDouble(y);

            y = "";

            txtVisor.Text = "";

No evento soma (+), o valor de y passa para double e é atribuido a variavel z, depois a variavel y e a textbox sao "limpas" para receberem o segundo valor.

espero ter sido util,

qqr coisa PM. :P

abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas, obrigado pela tua resposta Vidu era isso, entretanto consegui fazer a calculadora!

Consegues introduzir os numeros pelo teclado ? é que apesar de ter fechado a textbox a minha mesmo que eu escreva uns numeros quaisqueres nao os aceita pelo teclado, so pelos botoes....

Mais uma vez obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não meu, eu fiz apenas a calculadora para inserir numeros atraves dos botoes.. e ainda por cima pus as txtbox readonly.. ta porreira, dps tive d a transformar e adicionar comandos cientificos..

fico feliz por ter ajudado :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora