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]

[CSharp]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 : Forma
{

    //Opperationen festlegen
    public enum Opperation
    {
        Addieren, Subtrachieren, Multiplizerien, Dividieren, Keine
    }

    //Zahlen,etc festlegen
    double? zahl1 = null, zahl2 = null;
    bool neueZahl = false;
    Opperation op = Opperation.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 = Opperation.Multiplizerien;

    }

    //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 = Opperation.Dividieren;
    }

    //Subtrachiren Button
    private void btSubtrachiren_Click(object sender, EventArgs e)
    {
        if (zahl1 == null)
            if (this.txtErgebnis.Text != "")
                zahl1 = double.Parse(this.txtErgebnis.Text);
            else
                zahl1 = 0;
        neueZahl = true;
        op = Opperation.Subtrachieren;
    }

    //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 = Opperation.Addieren;
    }

    //Ausrechnung Button
    private void btIstGleich_Click(object sender, EventArgs e)
    {
        if (zahl1 != null && op != Opperation.Keine)

            zahl2 = double.Parse(this.txtErgebnis.Text);

        switch (op)
        {
            case Opperation.Addieren:
                this.txtErgebnis.Text = (zahl1 + zahl2).ToString();
                break;
            case Opperation.Subtrachieren:
                this.txtErgebnis.Text = (zahl1 - zahl2).ToString();
                break;
            case Opperation.Dividieren:
            try
                        {
                            this.txtErgebnis.Text = (zahl1 / zahl2).ToString();
                        }
                        catch (DivideByZeroException)
                        {
                            MessageBox.Show("Division durch 0 nicht möglich");
                        }
                        break;
            case Opperation.Multiplizerien:
                this.txtErgebnis.Text = (zahl1 * zahl2).ToString();
                break;
            case Opperation.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 != Opperation.Keine)

                    zahl2 = double.Parse(this.txtErgebnis.Text);

                switch (op)
                {
                    case Opperation.Addieren:
                        this.txtErgebnis.Text = (zahl1 + zahl2).ToString();
                        break;
                    case Opperation.Subtrachieren:
                        this.txtErgebnis.Text = (zahl1 - zahl2).ToString();
                        break;
                    case Opperation.Dividieren:
                        try
                        {
                            this.txtErgebnis.Text = (zahl1 / zahl2).ToString();
                        }
                        catch (DivideByZeroException)
                        {
                            MessageBox.Show("Division durch 0 nicht möglich");
                        }
                        break;
                    case Opperation.Multiplizerien:
                        this.txtErgebnis.Text = (zahl1 * zahl2).ToString();
                        break;
                    case Opperation.Keine:
                        break;
                }
                zahl1 = zahl2 = null;
                neueZahl = true;
            }

            {
                //Rechnen über Textbox (zum Test Taste Up genommen)
                if (e.KeyCode == Keys.Up)
                {

                  /* 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(",");
        }

        }

    }

}

[/CSharp]

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.

du musst das über das KeyEvent machen

Wie meinst du das?

Weil hab ja ein KeyUp - Event auf der TextBox und dann hald in dem Event drine, dass z.b. wenn Enter gedrückt wird … passiert

ja und statt Enter musst du jetzt auf 0-ß /*-+ reagieren

if (e.KeyCode == Keys.+) geht aber nicht, schmeißt er Errors

if (e.KeyCode == Keys.Add) <- das richtig?

das mit + ist klar
Add könnte es sein, einfach mal ausprobieren, ich weiß nicht obs das gibt aber vielleicht gibts was wie Plus

also Add geht leider nicht und mit Plus gibts leider auch nichts aber mir gehts erstmal da drum das die Funktion geht da kann ichs ya noch mit Enter testen will ya das 1 Zahl im Textfeld eingeben wird dann + und dann 2 Zahl und dann Enter das Ergebnis

Ich habe von C# zwar null Ahnung, aber … laut http://msdn.microsoft.com/en-us/library/xy8ebtbf(vs.71).aspx könnte es sowas wie
if (e.KeyCode == Keys.Oemplus) …
sein…