Zum Inhalt springen

[C#/WPF] Taschenrechner (war: Anfähnger braucht eure Hilfe!)


Sepra

Empfohlene Beiträge

Hallo lieber Fachinformatiker user ;)

Ich bin momentan bei einem 3 wöchingen praktikum und ich beschäftige mich hier mit c# WPF.

Ich hab Vorher nie programmiert und hab deswegen leider 0 ahnung habe allerdings trozdem relativ schnell rausbekommen wie ich wenn ich auf nen button klick er mir etwas anzeigt etc.(Da ich Privat weitermachen möchte frage ich euch)

Mein problem ist jetz das ich auf der stelle stehe und nicht mehr vorran komme beim programmieren meines taschenrechners ich bin soweit das mir das label zahlen anzeigt und ich clearen kann rücktaste funktioniert auch schon relativ gut bis auf das mit der exception.

Nun arbeite ich daran das mein Taschenrechner + rechnen kann da ich nichts nach längere suche in Google (vllt mach ich was falsch) gefunden hab was mir weiterhilft würd ich euch doch mal um hilfe bitten.

Wenn ihr mir iwas posten könnt wo ich mir das mit dem + rechnen selbsterabeiten kann wäre ich dankbar.

Verbesserungs vorschläge an meinem Code nehm ich auch sehr gerne an

sowie den lösungsweg zu meinem problem

Schonmal im vorfeld

Danke ;)

namespace WpfApplication1

{

    /// <summary>

    /// Interaktionslogik für Window1.xaml

    /// </summary>

    public partial class Window1 : Window

    {

        private double Anzeige = 0.0;

        enum RechenOperation

        {

            Plus = 1,

            Minus = 2,

            Geteilt = 3,

            Mal = 4

    }

        private RechenOperation Rechnung; 





        private double Rechnen = 0.0;



        public Window1()

        {

            InitializeComponent();

        }


        private void Zahl1_Click(object sender, RoutedEventArgs e)

        {

            this.Anzeige = this.Anzeige * 10 + 1;

            Display.Content = this.Anzeige;

        }   


        private void Zahl2_Click(object sender, RoutedEventArgs e)

        {

            this.Anzeige = this.Anzeige * 10 + 2;

            Display.Content = this.Anzeige;

        }


        private void Zahl3_Click_1(object sender, RoutedEventArgs e)

        {

            this.Anzeige = this.Anzeige * 10 + 3;

            Display.Content = this.Anzeige;

        }


        private void Zahl4_Click(object sender, RoutedEventArgs e)

        {

            this.Anzeige = this.Anzeige * 10 + 4;

            Display.Content = this.Anzeige;


        }


        private void Zahl5_Click(object sender, RoutedEventArgs e)

        {

            this.Anzeige = this.Anzeige * 10 + 5;

            Display.Content = this.Anzeige;

        }


        private void Zahl6_Click(object sender, RoutedEventArgs e)

        {

            this.Anzeige = this.Anzeige * 10 + 6;

            Display.Content = this.Anzeige;

        }


        private void Zahl7_Click(object sender, RoutedEventArgs e)

        {

            this.Anzeige = this.Anzeige * 10 + 7;

            Display.Content = this.Anzeige;

        }


        private void Zahl8_Click(object sender, RoutedEventArgs e)

        {

            this.Anzeige = this.Anzeige * 10 + 8;

            Display.Content = this.Anzeige;

        }


        private void Zahl9_Click(object sender, RoutedEventArgs e)

        {

            this.Anzeige = this.Anzeige * 10 + 9;

            Display.Content = this.Anzeige;

        }


        private void Zahl0_Click(object sender, RoutedEventArgs e)

        {

            this.Anzeige = this.Anzeige * 10 + 0;

            Display.Content = this.Anzeige;

        }


        private void Komma_Click(object sender, RoutedEventArgs e)

        {


        }


        private void Clear_Click(object sender, RoutedEventArgs e)

        {

            this.Anzeige = 0.0;

            Display.Content = this.Anzeige;

        }


        private void Rücktaste_Click(object sender, RoutedEventArgs e)

        {

            this.Anzeige = Convert.ToDouble(Anzeige.ToString().Substring(0, Anzeige.ToString().Length - 1));

            Display.Content = this.Anzeige;


            {



            }   


        }


        private void Plus_Click(object sender, RoutedEventArgs e)

        {

            this.Rechnen = this.Anzeige;

            this.Anzeige = 0.0;





         }

    }

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Naja,

Ich würde den Member Anzeige raushauen und dafür 2 implementieren:


private double var0 = 0.0;

private double var1 = 0.0;

Sobald eine Rechenoperation betätigt wird, den Wert dieser speichern, den Wert des Textfeldes nach double validieren/konvertieren und in var0 speichern, danach Bildschirm löschen und wieder Zahlen eingeben lassen, irgendwann drückt er dann mal auf "=", dann wird wieder validiert/konvertiert und in var1 gespeichert, dann je nach Rechenoperation das Ergebnis ausrechnen und anzeigen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstmal danke für deine Antwort.

Weiterhin hab ich zwar ungefähr verstanden wie du mir weiterhelfen möchtest aber die umsetzung ist doch etwas steinig.

Wenn du b.z.w. wer anders so nett wäre mir auf die sprünge zu helfen

(Tut mir leid wnen ich mich etwas dumm anstell aber ist halt mein erstes mal das ich selber programmiere)

Danke

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ist ja zum Glück nur ein kleines Beispiel.

Ich hab ein neues Projekt angelegt mit einer Textbox, paar Buttons usw.

Alle Zahlenbuttons senden an eine Funktion, wenn sie betätigt wurden.

Alle Operationbuttons ebenfalls.

Der "="-Button ist die eigentliche Berechnung (ich war zu faul, das noch schöner zu machen)


using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;


namespace Calculator

{

    public partial class frmCalculator : Form

    {

        private double m_var0 = 0.0;

        private double m_var1 = 0.0;


        private char m_operation = '\0';

        private bool m_isVar0 = true;


        public frmCalculator()

        {

            InitializeComponent();

        }


        private void btnNumN_Click(object sender, EventArgs e)

        {

            Button btn = sender as Button;

            if (btn != null)

                this.txtDisplay.Text += btn.Text;

        }


        private void clearDisplay()

        {

            this.txtDisplay.Text = string.Empty;

        }


        private void display(double param)

        {

            if (param != ((int)param))

            {

                this.txtDisplay.Text = param.ToString("#0.0#");

            }

            else

            {

                this.txtDisplay.Text = ((int)param).ToString();

            }

        }


        private void btnO_Click(object sender, EventArgs e)

        {

            if (this.m_isVar0)

                m_var0 = ConvertToDouble(txtDisplay.Text);


            Button btn = sender as Button;

            if (btn != null)

                m_operation = btn.Text[0];

            m_isVar0 = false;

            clearDisplay();

        }


        private double ConvertToDouble(string param)

        {

            double ret = 0.0;

            double.TryParse(param, out ret);

            return ret;

        }


        private void btnEquals_Click(object sender, EventArgs e)

        {

            switch (m_operation)

            {

                case '+':

                    m_var1 = ConvertToDouble(txtDisplay.Text);

                    m_var0 = m_var0 + m_var1;

                    display(m_var0);

                    break;

                case '-':

                    break;

                case '*':

                    break;

                case '/':

                    break;

                default:

                    //...

                    break;

            }

        }


        private void btnClear_Click(object sender, EventArgs e)

        {

            clearDisplay();

            m_isVar0 = true;

            m_operation = '\0';

        }

    }

}

Sollte ein Zahlbutton (welcher auch immer) gedrückt werden, wird sein Textwert (Ziffer) an den String einfach angehangen.

Drückt man auf eine Operation (z.B. +) wird der erste Char vom Text vom Button (da es bei mir eh nur das mathematische Zeichen ist) als operation gesetzt und wenn vorher noch keine Zahl eingegeben wurde, der Momentane Text als double in m_var0 gespeichert. Danach wird die Anzeige (txtDisplay) gelöscht.

Jetzt kann man wieder eine Zahl zusammenbasteln und klickt irgendwann auf =. Dann wird wieder der Wert vom Textfeld gespeichert (diesmal im 2. Operand), dann wird gerechnet, das Ergebnis zur Anzeige gebracht und im ersten Operand (zum Weiterrechnen) gespeichert.

[Edit]

Man beachte, dass das eine Windowsforms-Anwendung war, da die Logik aber in der Code-Behind-Datei steckt, sollte eine Portierung auf WPF nicht allzu schwer sein.

Bearbeitet von TDM
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...