C# Taschenrechner



  • Hay an alle Programmierer da draußen,

    ich habe mich die letzten zwei Tage mit C# auseinander gesetzt und einen Taschenrechner programmiert. Er funktioniert auch schon, nur möchte ich noch einen kleinen "Extra" einbauen.

    Ich habe mir als Vorlage, den Taschenrechner von Windows genommen. Und nun möchte ich noch einbauen, das man in der Textbox auch rechnen kann. Sprich man gibt eine Zahl ein dann die + - * oder / Taste und dann nochmal eine Zahl und bei Enter sollte man dann die Lösung sehen. (Das alles geschieht in 1! Textbox)

    Das mit der Entertaste hab ich hinbekommen, war nicht als zu schwer, da ich einfach den Code vom = Button kopiert habe.

    Hier mal mein Code:
    [ICH => Anfänger]

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace Taschenrechner
    {
        public partial class Form1 : Form
        {
    
            //Operationen festlegen
            public enum Operation
            {
                Addieren, Subtrahieren, Multiplizieren, Dividieren, Keine
            }
    
            //Zahlen,etc festlegen
            double? zahl1 = null, zahl2 = null;
            bool neueZahl = false;
            Operation op = Operation.Keine;
    
            public Form1()
            {
                InitializeComponent();
            }
    
            //Alle Zahlen Button
            private void btZahl_Click(object sender, EventArgs e)
            {
                if (neueZahl)
                {
                    this.txtErgebnis.Text = ((Button)sender).Text;
                    neueZahl = false;
    
                }
                else
                    this.txtErgebnis.Text += ((Button)sender).Text;
            }
    
            //Multiplizieren Button
            private void btMultiplizieren_Click(object sender, EventArgs e)
            {
                if (zahl1 == null)
                {
                    if (this.txtErgebnis.Text != "")
                        zahl1 = double.Parse(this.txtErgebnis.Text);
    
                    else
    
                        zahl1 = 0;
    
                }
                neueZahl = true;
                op = Operation.Multiplizieren;
    
            }
    
            //Dividieren Button
            private void btDividieren_Click(object sender, EventArgs e)
            {
                if (zahl1 == null)
                {
                    if (this.txtErgebnis.Text != "")
                        zahl1 = double.Parse(this.txtErgebnis.Text);
                    else
                        zahl1 = 0;
                }
                neueZahl = true;
                op = Operation.Dividieren;
            }
    
            //Subtrahieren Button
            private void btSubtrahieren_Click(object sender, EventArgs e)
            {
                if (zahl1 == null)
                    if (this.txtErgebnis.Text != "")
                        zahl1 = double.Parse(this.txtErgebnis.Text);
                    else
                        zahl1 = 0;
                neueZahl = true;
                op = Operation.Subtrahieren;
            }
    
            //Addieren Button
            private void btAddieren_Click(object sender, EventArgs e)
            {
                if (zahl1 == null)
                    if (this.txtErgebnis.Text != "")
                        zahl1 = double.Parse(this.txtErgebnis.Text);
                    else
                        zahl1 = 0;
                neueZahl = true;
                op = Operation.Addieren;
            }
    
            //Ausrechnung Button
            private void btIstGleich_Click(object sender, EventArgs e)
            {
                if (zahl1 != null && op != Operation.Keine)
    
                    zahl2 = double.Parse(this.txtErgebnis.Text);
    
                switch (op)
                {
                    case Operation.Addieren:
                        this.txtErgebnis.Text = (zahl1 + zahl2).ToString();
                        break;
                    case Operation.Subtrahieren:
                        this.txtErgebnis.Text = (zahl1 - zahl2).ToString();
                        break;
                    case Operation.Dividieren:
                    try
                                {
                                    this.txtErgebnis.Text = (zahl1 / zahl2).ToString();
                                }
                                catch (DivideByZeroException)
                                {
                                    MessageBox.Show("Division durch 0 nicht möglich");
                                }
                                break;
                    case Operation.Multiplizieren:
                        this.txtErgebnis.Text = (zahl1 * zahl2).ToString();
                        break;
                    case Operation.Keine:
                        break;
    
                }
                zahl1 = zahl2 = null;
                neueZahl = true;
            }
    
            //Textbox
            private void txtErgebnis_KeyUp(object sender, KeyEventArgs e)
            {
    
                String aa = txtErgebnis.Text;
                String bb = "";
                bool marker = false;
    
                foreach (char c in aa)
                {
                    if (c == '.' && !marker)
                    {
                        marker = true;
                    }
                    if (c == ',' && !marker)
                    {
                        marker = true;
                        bb += c;
                    }
                    if (c == '-' && !marker)
                    {
                        marker = true;
                        bb += c;
                    }
                    if (c == '+' && !marker)
                    {
                        marker = true;
                        bb += c;
                    }
                    if (char.IsDigit(c))
                    {
                        bb += c;
                    }
                }
    
                txtErgebnis.Text = bb; 
    
                if (e.KeyCode == Keys.Enter)
                {
                    {
                        if (zahl1 != null && op != Operation.Keine)
    
                            zahl2 = double.Parse(this.txtErgebnis.Text);
    
                        switch (op)
                        {
                            case Operation.Addieren:
                                this.txtErgebnis.Text = (zahl1 + zahl2).ToString();
                                break;
                            case Operation.Subtrahieren:
                                this.txtErgebnis.Text = (zahl1 - zahl2).ToString();
                                break;
                            case Operation.Dividieren:
                                try
                                {
                                    this.txtErgebnis.Text = (zahl1 / zahl2).ToString();
                                }
                                catch (DivideByZeroException)
                                {
                                    MessageBox.Show("Division durch 0 nicht möglich");
                                }
                                break;
                            case Operation.Multiplizieren:
                                this.txtErgebnis.Text = (zahl1 * zahl2).ToString();
                                break;
                            case Operation.Keine:
                                break;
                        }
                        zahl1 = zahl2 = null;
                        neueZahl = true;
                    }
    
                    {
                        if (e.KeyCode == Keys.Add)
                        {
                            /* Wenn Zahl eingeben in Textbox -> neue Zahl = false?
                            Wenn + - * / Taste gedrückt -> neue Zahl = true? */ 
                        }
    
                    }
                }
            }
    
            //Rücktaste Button
            private void btRücktaste_Click(object sender, EventArgs e)
            {
                if (this.txtErgebnis.Text.Length > 0)
                    this.txtErgebnis.Text = this.txtErgebnis.Text.Substring(0, this.txtErgebnis.Text.Length - 1);
            }
    
            //Neu Button
            private void btNeu_Click(object sender, EventArgs e)
            {
                if (txtErgebnis.GetType() == typeof(TextBox))
                {
                    ((TextBox)txtErgebnis).Clear();
                }
            }
    
            //Vorzeichen Button
            private void btVorzeichen_Click(object sender, EventArgs e)
            {
                    if (this.txtErgebnis.Text != "")
                        txtErgebnis.Text = Convert.ToString(double.Parse(this.txtErgebnis.Text) * -1);
            }
    
            //Komma Button
            private void btKomma_Click(object sender, EventArgs e)
            {
                if (this.txtErgebnis.Text != txtErgebnis + ",")
                {
                    txtErgebnis.AppendText(",");
                }
    
                }
    
            }
    
        }
    

    Weiß vielleicht einer wie ich das hinbekommen, dass wenn man Zahlen eingibt das die Zahl dann, wie bei durch drücken der Button's die erste Zahl weg geht und man eine neue eingeben kann? Und logischerweiße das man die Rechenart(+ - * /) vorher eingibt.



  • moin moin,

    einfach in

    private void txtErgebnis_KeyUp(object sender, KeyEventArgs e)
    

    eine neue if-verknüpfung(z.B. für Minus):

    if (e.KeyCode == Keys.Subtract)
    {
      txtErgebnis.Text="";
    }
    

    viel erfolg!


Anmelden zum Antworten