Taschenrechnerprogramm Visualisierung



  • Guten Tag,

    mit einem Tutorial lernte ich ein paar triviale Dinge in C sharp.

    Somit habe ich ein kleines Taschenrechnerprogramm geschrieben.
    Dies sieht aus wie folgt:

    {
                double dblErgebnis = 0;
                string strRepeat;
                Console.WriteLine("Wilkommen im Taschenrechner.\n\n");
    
                do
                {
    
                    Console.WriteLine("Bitte geben Sie nun die erste Zahl ein.");
                    double dblZahl1 = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("\nNun wählen Sie bitte die Rechenart:");
                    Console.WriteLine("+    für eine Addition");
                    Console.WriteLine("-    für eine Subtraktion");
                    Console.WriteLine("*    für eine Multiplikation");
                    Console.WriteLine("/    für eine Division\n");
                    string strRart = Console.ReadLine();
                    Console.WriteLine("\nGeben Sie nun bitte die zweite Zahl ein.");
                    double dblZahl2 = Convert.ToInt32(Console.ReadLine());
    
                    switch(strRart)
                    {
                        case "+" : dblErgebnis = dblZahl1 + dblZahl2;
                        break;
                        case "-" : dblErgebnis = dblZahl1 - dblZahl2;
                        break;
                        case "*" : dblErgebnis = dblZahl1 * dblZahl2;
                        break;
                        case "/" : dblErgebnis = dblZahl1 / dblZahl2;
                        break;
                    }
                    Console.WriteLine("\n{0} {1} {2} = {3}\n\n\n",dblZahl1,strRart,dblZahl2,dblErgebnis);
    
                    Console.WriteLine("Möchten Sie noch eine Rechnung vornehmen?\nJ  -  Ja\nN  -  Nein");
                    strRepeat = Console.ReadLine().ToUpper();
                    if (strRepeat == "J")
                    {
                        Console.Clear();
                        continue;
                    }
                    else
                        Console.Clear();
                        break;
                }
                while (true);
    
                Console.WriteLine("Drücken Sie eine beliebige Taste um das Programm zu beenden.");
                Console.Read();
            }
    

    Dieses Programm wollte ich visualisieren wie folgt:

    private void InitializeComponent()
            {
                this.textBox1 = new System.Windows.Forms.TextBox();
                this.plus = new System.Windows.Forms.Button();
                this.minus = new System.Windows.Forms.Button();
                this.mal = new System.Windows.Forms.Button();
                this.geteilt = new System.Windows.Forms.Button();
                this.gleich = new System.Windows.Forms.Button();
                this.textBox2 = new System.Windows.Forms.TextBox();
                this.label1 = new System.Windows.Forms.Label();
                this.label2 = new System.Windows.Forms.Label();
                this.SuspendLayout();
                // 
                // textBox1
                // 
                this.textBox1.Location = new System.Drawing.Point(35, 27);
                this.textBox1.Name = "textBox1";
                this.textBox1.Size = new System.Drawing.Size(220, 20);
                this.textBox1.TabIndex = 0;
                this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
                // 
                // plus
                // 
                this.plus.Font = new System.Drawing.Font("Microsoft Sans Serif", 30.25F);
                this.plus.ForeColor = System.Drawing.SystemColors.ControlDarkDark;
                this.plus.Location = new System.Drawing.Point(35, 53);
                this.plus.Name = "plus";
                this.plus.Size = new System.Drawing.Size(50, 50);
                this.plus.TabIndex = 1;
                this.plus.Text = "+";
                this.plus.UseVisualStyleBackColor = true;
                this.plus.Click += new System.EventHandler(this.plus_Click);
                // 
                // minus
                // 
                this.minus.Font = new System.Drawing.Font("Microsoft Sans Serif", 30.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                this.minus.ForeColor = System.Drawing.SystemColors.ControlDarkDark;
                this.minus.Location = new System.Drawing.Point(91, 53);
                this.minus.Name = "minus";
                this.minus.Size = new System.Drawing.Size(50, 50);
                this.minus.TabIndex = 2;
                this.minus.Text = "-";
                this.minus.TextAlign = System.Drawing.ContentAlignment.TopCenter;
                this.minus.UseVisualStyleBackColor = true;
                this.minus.Click += new System.EventHandler(this.minus_Click);
                // 
                // mal
                // 
                this.mal.Font = new System.Drawing.Font("Microsoft Sans Serif", 30.25F);
                this.mal.ForeColor = System.Drawing.SystemColors.ControlDarkDark;
                this.mal.Location = new System.Drawing.Point(148, 54);
                this.mal.Name = "mal";
                this.mal.Size = new System.Drawing.Size(50, 50);
                this.mal.TabIndex = 3;
                this.mal.Text = "*";
                this.mal.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
                this.mal.UseVisualStyleBackColor = true;
                this.mal.Click += new System.EventHandler(this.mal_Click);
                // 
                // geteilt
                // 
                this.geteilt.Font = new System.Drawing.Font("Microsoft Sans Serif", 30.25F);
                this.geteilt.ForeColor = System.Drawing.SystemColors.ControlDarkDark;
                this.geteilt.Location = new System.Drawing.Point(205, 54);
                this.geteilt.Name = "geteilt";
                this.geteilt.Size = new System.Drawing.Size(50, 50);
                this.geteilt.TabIndex = 4;
                this.geteilt.Text = "\\";
                this.geteilt.UseVisualStyleBackColor = true;
                this.geteilt.Click += new System.EventHandler(this.geteilt_Click);
                // 
                // gleich
                // 
                this.gleich.Font = new System.Drawing.Font("Microsoft Sans Serif", 40.25F, System.Drawing.FontStyle.Bold);
                this.gleich.ForeColor = System.Drawing.SystemColors.ControlDarkDark;
                this.gleich.Location = new System.Drawing.Point(35, 131);
                this.gleich.Name = "gleich";
                this.gleich.Size = new System.Drawing.Size(220, 50);
                this.gleich.TabIndex = 5;
                this.gleich.Text = "=";
                this.gleich.TextAlign = System.Drawing.ContentAlignment.TopCenter;
                this.gleich.UseVisualStyleBackColor = true;
                this.gleich.Click += new System.EventHandler(this.gleich_Click);
                // 
                // textBox2
                // 
                this.textBox2.Location = new System.Drawing.Point(35, 210);
                this.textBox2.Name = "textBox2";
                this.textBox2.Size = new System.Drawing.Size(220, 20);
                this.textBox2.TabIndex = 6;
                // 
                // label1
                // 
                this.label1.AutoSize = true;
                this.label1.Location = new System.Drawing.Point(35, 8);
                this.label1.Name = "label1";
                this.label1.Size = new System.Drawing.Size(46, 13);
                this.label1.TabIndex = 7;
                this.label1.Text = "Eingabe";
                // 
                // label2
                // 
                this.label2.AutoSize = true;
                this.label2.Location = new System.Drawing.Point(35, 188);
                this.label2.Name = "label2";
                this.label2.Size = new System.Drawing.Size(48, 13);
                this.label2.TabIndex = 8;
                this.label2.Text = "Ergebnis";
                // 
                // Form1
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(292, 266);
                this.Controls.Add(this.label2);
                this.Controls.Add(this.label1);
                this.Controls.Add(this.textBox2);
                this.Controls.Add(this.gleich);
                this.Controls.Add(this.geteilt);
                this.Controls.Add(this.mal);
                this.Controls.Add(this.minus);
                this.Controls.Add(this.plus);
                this.Controls.Add(this.textBox1);
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
                this.MaximizeBox = false;
                this.Name = "Form1";
                this.Text = "Taschenrechner";
                this.Load += new System.EventHandler(this.Form1_Load);
                this.ResumeLayout(false);
                this.PerformLayout();
    
            }
    
            #endregion
    
            private System.Windows.Forms.TextBox textBox1;
            private System.Windows.Forms.Button plus;
            private System.Windows.Forms.Button minus;
            private System.Windows.Forms.Button mal;
            private System.Windows.Forms.Button geteilt;
            private System.Windows.Forms.Button gleich;
            private System.Windows.Forms.TextBox textBox2;
            private System.Windows.Forms.Label label1;
            private System.Windows.Forms.Label label2;
    

    Es ist eben ein Text "Eingabe", darunter ein Input Feld,
    Die rechenarten-buttons, ein "=" button und ein text "ausgabe" plus ein ausgabefeld.

    Ich weiß jedoch jetzt nicht, wie ich mit den Buttons arbeite und wie ich eingaben einlese.

    Kann mir da jemand helfen?
    Da wäre ich sehr dankbar.

    MFG Simon, der Anfänger 🤡



  • In dem Designer auf die Button doppelklicken und dann in der frisch erstellte Methode die Berechnungen einfügen.

    Die einzelnen Eingaben erhälst du über textBox?.Text und ähnlich schreibst du auch in das Label (label?.Text = /.../).

    Außerdem brauchst du die Gleichheitszeichen-Schaltfläche nicht, da du Multiplizieren, Addieren etc. und nicht vergleichen möchtest.



  • Achja und bitte fürs nächste mal merken:Nur relevante Codeausschnitte posten und nicht alles was dir in die Finger kommt.Das macht die Sache übersichtlicher für uns 😉



  • Die jeweiligen Berechnungen sind das kleinere Problem.

    Mehr interessiert mich, wie ich eine Eingabe einlesen kann?
    Ich kenne nur die ReadLine Methode, aber hier habe ich ja die using Klausel Console nicht.

    Ich müsste wissen wie ich im ersten text feld etwas einlese, wie ich die zweite zahl nach dem klicken der rechenoperation einlese und wie ich das ergebnis im zweiten text feld ausgebe.

    Danke für die Hilfe



  • Das hat "Rhombi..." dir doch schon geschrieben, mittels Zugriff auf die Eigenschaft 'Text' der entsprechenden TextBox.

    In GUI-Anwendungen wird ereignisorientiert programmiert (intern werden Window Messages gesendet), d.h. du brauchst nicht mehr eine ReadLine()-Methode aufrufen, sondern in den entsprechenden Ereignissen (z.B. Click, TextChanged etc.) greift man dann auf die Eigenschaften (Properties) der Controls zu.



  • Jetzt bekomme ich nur Probleme mit der Konvertierung.
    Wenn ich über TextBox1.Text den Wert in eine Variable einlese kann dies nur eine String variable sein.
    mit dieser String variable kann ich aber die rechenoperation nicht durchführen.

    Int oder Double Variablen kann ich dann auch wieder nicht mit TextBox.Text ausgeben.

    Wie wird dies gemacht?



  • Dazu gibt es die Methoden 'Parse' bzw. 'TryParse' für den jeweiligen Datentyp, z.B. Int32 oder Double.

    string text = "42";
    
    int x1 = Int32.Parse(text); // liefert aber eine Exception bei fehlerhafter Umwandlung (falls keine Zahl vorhanden)
    
    //bzw.
    int x2;
    if(Int32.TryParse(text, out x2))
    {
      // Wert steht in x2
    }
    else
    {
      // Fehler bei Umwandlung
    }
    

    Und bzgl. Exceptions schau dir mal die Schlüsselwörzter 'try' und 'catch' in der Hilfe an.

    Und die umgekehrte Umwandlung (Zahl -> String) ist auch ganz einfach:

    int zahl = 42;
    string text = zahl.ToString();
    

    (das sollte aber in jedem Buch stehen -)

    P.S: Sehe gerade, daß du ja auch im Konsolenprogramm schon "Convert.ToInt32" benutzt hast (aber anscheinend nicht verstanden). Diese Methode sollte jedoch nicht benutzt werden, sondern statt dessen eben "Parse" bzw. noch besser "TryParse".



  • eben das im konsolenprogramm benutzte convert.toint funktionierte in der applikation nicht.

    ich werde deine variante sofort probieren 🙂

    ein wenig später:
    und es funktioniert. danke für die hilfe.

    kann mir jetzt noch jemand sagen, wie ich ein textfeld einer textbox wieder loeschen kann?
    ich versuchte es mit textBox1.clear(); jedoch brachte das nicht den erwuenschten effekt.



  • Textbox.Text = "";
    :p



  • Das hatte ich probiert.
    da ich den eingelesenen wert ja in einen double umgewandelt habe, bringt er mir bei dem versuch den Text auf "" zu setzen einen laufzeitfehler mit der nachricht "Die Eingabezeichenfolge hat das falsche Format."
    Überschrift ist "Format Exception wurde nicht behandelt"

    was kann man dagegen tun?



  • Nein beim setzen des TExtbox Textes sollte da eigentlich kein Laufzeitfehler kommen NUR beim wieder auslesen in einen double oder so.Zeig doch mal den Codeausschnitt bitte her.



  • Das ist das Einlesen der Eingabe:

    private void textBox1_TextChanged(object sender, EventArgs e)
            {
                stra = textBox1.Text;
                a = Double.Parse(stra);
    
            }
    

    löschen der textbox sollte sein:

    private void clear_Click(object sender, EventArgs e)
            {
                textBox1.Text = "";
    
            }
    

    doch da bekomme ich den oben genannten fehler und das programm hängt sich auf.



  • Dann lies dir noch mal meinen Beitrag "genau" durch!

    Und TextChanged ist ein ungünstiges Ereignis, um die Konvertierung (String->Zahl) durchzuführen, da dieses bei jeder Änderung aufgerufen wird.

    Mach dies erst beim Button-Click...

    P.S. "das programm hängt sich auf. " -> nein, sondern es zeigt eine "Exception" (Stichwort!) an!



  • Okay danke für die Hilfe.
    Wenn ich die Umwandlung erst beim Button Click auf die jeweilige rechenoperation mache klappt das 🙂
    danke.



  • zudem sei auf dem TryParse aufmerksam gemacht (wie es hier schon wurde)

    private void Calc()
    {
        double number = 0;
        if (double.TryParse(textBox1.Text, out number))
            Calc(number);
        else
        {
            MessageBox.Show("Bitte nur zahlen eingeben");
            textBox1.Text = "";
        }
    }
    

    // tags vergessen



  • Ich versuche gerade dem Taschenrechnerprogramm noch einen kleinen Währungsrechner hinzuzufügen.

    da arbeite ich mit comboboxen.
    durch if/else wollte ich abfragen, welcher Index in der ComboBox gewählt wurde.

    wie wird der index vergeben?
    ich habe drei zeilen in die auflistung gebracht.
    welchen index haben die jeweiligen zeilen?

    danke im voraus
    mfg simon



  • von 0 aufseigend - wie bei einem normalen array
    steht aber auch in der msdn {o;



  • Oder einfach mal selber ausprobieren und den aktuell ausgewählten index ausgeben.

    🙄 🙄


Anmelden zum Antworten