myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Kleiner Taschenrechner Projekt
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Kleiner Taschenrechner Projekt

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
ExilCoder ExilCoder ist männlich
myCSharp.de-Mitglied

Dabei seit: 09.07.2015
Beiträge: 28
Entwicklungsumgebung: Visual Studio
Herkunft: Deutschland


ExilCoder ist offline

Kleiner Taschenrechner Projekt

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi, ich lerne aktuell wieder etwas C# und dachte mir ich mache mir einen etwas besseren taschenrechner als mein letzter. also wollte ich nur 1 textfelt machen das gesteuert wird von der tastatur 0 - 9 nummern und * - + / ich bin dabei leider jetzt auf einen Fehler gestoßen den ich nicht verstehe, kann mir bitte jemand sagen wieso das nicht geht und wie ich das problem lösen kann?
bitte nichts weiteres spoilern, ich will alles andere gerne alleine machen :D

C#-Code:
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 Better_Calculator
{
    public partial class Form1 : Form
    {
        public int number1; //check
        public string divisor; //check
        public int number2;

        public int countspaces; //check

        public int result;

        public Form1()
        {
            InitializeComponent();
        }

        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {


            char choice = 'a';

            switch (choice)
            {
                case '+':
                    number1 = Convert.ToInt32(textBox1.Text);
                    divisor = "+";
                    break;

                case '-':
                    number1 = Convert.ToInt32(textBox1.Text);
                    divisor = "-";
                    break;

                case ':':
                    number1 = Convert.ToInt32(textBox1.Text);
                    divisor = ":";
                    break;

                case '*':
                    number1 = Convert.ToInt32(textBox1.Text);
                    divisor = "*";
                    break;
            }

        }

        private void button1_Click(object sender, EventArgs e)
        {
            spacecounting();

            textBox1.Text = textBox1.Text.Remove(0, countspaces);

            //irgendetwas passiert mit dem Textbox1.text so das es nicht das gleiche resultat ergibt
            //Program cannot convert the String into a int for some reason
            number2 = Convert.ToInt32(textBox1.Text);

            textBox1.Clear();

            //Inform yourself howw to replace the divisor with a variable
            result = number1 + number2;

            textBox1.Text = "Result: " + result;
        }

        public void spacecounting()
        {
            foreach (char av in textBox1.Text)
            {
                countspaces++;
            }
        }
    }
}

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von ExilCoder am 09.01.2019 22:04.

09.01.2019 20:09 Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.178
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Bitte Code Tags verwenden. Niemand hat Lust auf Plaintext-Code.
 [Hinweis] Wie poste ich richtig? Punkt 6

Convert.ToInt32(textBox1.Text) kann nur funktioneren, wenn in der TextBox auch nen Int ist.
Das kann man aber alles prinzipiell debuggen:
 [Artikel] Debugger: Wie verwende ich den von Visual Studio?
Für mich ist es ein Rätsel, was Du mit Spacecounting und dem Remove erreichen willst.
Die Methode macht alles - aber kein Space"counting". Sie erhöht einfach nur die Variable um die Länge der Eingabe. Spätestens bei der zweiten Eingabe muss das dermaßen knallen, dass die Korken fliegen.
Bezweifle, dass danach das in der Textbox steht, was drin stehen soll. Aber auch das siehst mit dem Debugger.

PS: Besser TryParse-Methoden (zB Int32.TryParse) statt die Convert-Methoden verwenden, wenn der Inhalt nicht garantiert von einem jeweiligen Datentypen ist.
Stichwort: defensive Programmierung.
09.01.2019 20:16 Beiträge des Benutzers | zu Buddylist hinzufügen
ExilCoder ExilCoder ist männlich
myCSharp.de-Mitglied

Dabei seit: 09.07.2015
Beiträge: 28
Entwicklungsumgebung: Visual Studio
Herkunft: Deutschland

Themenstarter Thema begonnen von ExilCoder

ExilCoder ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Das Programm funktioniert, es zeigt mir beim Convertieren nur ein fehler ZEICHEN an und keine deutliche andeutung wo der Fehler liegt, ich habe aber eine relativ gute idee was ich machen kann um es zu fixen da ich es davor zum laufen brachte und jetzt nach umschreiben des codes die funktion selbst nichtmehr funktioniert ... naja egal dachte hier hat jemand evtl. ein leichten lösungsweg der sauberer ist
10.01.2019 00:18 Beiträge des Benutzers | zu Buddylist hinzufügen
ThomasE. ThomasE. ist männlich
myCSharp.de-Mitglied

avatar-178.gif


Dabei seit: 26.11.2013
Beiträge: 444
Entwicklungsumgebung: Visual Studio 2015Pro/2017Ent


ThomasE. ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

was wohl gemeint ist, daß das Käse ist:

C#-Code:
        public void spacecounting()
        {
            foreach (char av in textBox1.Text)
            {
                countspaces++;
            }
        }

denn er berechnet keine spaces sondern nur die Textlänge.

Wenn ich mir das ansehe:

C#-Code:
textBox1.Text = textBox1.Text.Remove(0, countspaces);

weiß ich sofort, daß du einfach nur die Leerzeichen entfernen möchtest, das geht einfacher:
 String.Replace

Somit könntest dir auch die Methode spacecounting sparen.

Die Eventmethode textBox1_KeyPress ist auch ein Stinkekäse, denn da wird immer mit dem char a geswitcht. Zudem bleibt in der Methode alles in der textBox1.Text drinnen stehen oder?
Z.Bsp.: 5 + 3
Das dann bei button1_Click in eine Nummer zu konvertieren geht natürlich nicht.

Grüße
10.01.2019 08:25 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.178
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von ThomasE.:
Wenn ich mir das ansehe:

C#-Code:
textBox1.Text = textBox1.Text.Remove(0, countspaces);

weiß ich sofort, daß du einfach nur die Leerzeichen entfernen möchtest

Nur, dass es einfach den kompletten String löscht.

countspaces ist hier die Länge des Strings (zumindest beim ersten Durchlauf).
Remove löscht damit von Position 0 bis countspaces alle Zeichen - und damit den gesamten String.

Im zweiten Durchlauf ist countspaces nicht die Länge des Strings der Textbox aus dem zweiten Durchlauf - sondern die Länge aus dem aktuellen wie auch alle vorherigen Durchläufen.
countspaces wird nirgends zurück gesetzt.
10.01.2019 11:30 Beiträge des Benutzers | zu Buddylist hinzufügen
ExilCoder ExilCoder ist männlich
myCSharp.de-Mitglied

Dabei seit: 09.07.2015
Beiträge: 28
Entwicklungsumgebung: Visual Studio
Herkunft: Deutschland

Themenstarter Thema begonnen von ExilCoder

ExilCoder ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich hätte das evtl erklären sollen, also die idee dahinter ist

numer1 wird eingegeben, danach wird der divisor eingegeben, bevor der divisor theoretisch in die dafür vorgesehene variable gespeichert wird wird die erste nummer gespeichert nach dem druck von "+ - : *" in dem beispiel divisor gennant wird jede vom nutzer geschriebene stelle mit "countspaces" funktion gezählt also ja da werden alle bis dahin eingegebenen stellen gezählt und dann auch später gelöscht, und dannach gibt der nutzer eine neue nummer ein die nummer2 die dann mit dem click auf zeige ergebnis oder hier result in int32 convertiert werden soll und in number2 gespeichert werden soll
10.01.2019 11:35 Beiträge des Benutzers | zu Buddylist hinzufügen
ExilCoder ExilCoder ist männlich
myCSharp.de-Mitglied

Dabei seit: 09.07.2015
Beiträge: 28
Entwicklungsumgebung: Visual Studio
Herkunft: Deutschland

Themenstarter Thema begonnen von ExilCoder

ExilCoder ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Bessere erklärung wie mein Programm funktioniert:

!WARNING! Alle Namen der Variablen vergessen, Sie haben absolut nichts zu bedeuten !WARNING!

In diesem Programm wird später nur 0 - 9 und (- + : *) eines dieser zeichen eintippbar sein, nichts anderes, auch keine leertaste.

C#-Code:
public int number1;
public string divisor;
public int number2;

// Hier erstelle ich eine Variable die später gefüllt wird mit der anzahl an getipten nummern UND das zeichen zb. 44566+ (6)  
public int countspaces; //check

        public int result;

I only show now one of the codes because the rest is irrelevant for what I am asking

C#-Code:
  private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {

            char choice = 'a';

            switch (choice)
            {
                case '+':
                    number1 = Convert.ToInt32(textBox1.Text);
                    divisor = "+";
                    break;
            }

        }

my friend called me his bird died, I complete this later

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von ExilCoder am 10.01.2019 15:30.

10.01.2019 15:14 Beiträge des Benutzers | zu Buddylist hinzufügen
ThomasE. ThomasE. ist männlich
myCSharp.de-Mitglied

avatar-178.gif


Dabei seit: 26.11.2013
Beiträge: 444
Entwicklungsumgebung: Visual Studio 2015Pro/2017Ent


ThomasE. ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

verwundert verwundert

Also space ist dann der falsche Ausdruck zu dem Sinn hier und die Spaghettischreibweise ist schwer zu lesen, tut mir leid Augenzwinkern

C#-Code:
textBox1.Text = textBox1.Text.Remove(0, countspaces);

countofspaces wird nie zurückgesetzt, was bedeuted, daß hier irgendwann mal eine Exception geworfen wird.

Wie schon gesagt, am Ende wirst du einen Leerstring in einen int konvertieren, was ebenfalls scheitert.

Zeig mal den aktuellen Code...

Grüße
10.01.2019 15:23 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
ExilCoder ExilCoder ist männlich
myCSharp.de-Mitglied

Dabei seit: 09.07.2015
Beiträge: 28
Entwicklungsumgebung: Visual Studio
Herkunft: Deutschland

Themenstarter Thema begonnen von ExilCoder

ExilCoder ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

habe es zum laufen gebracht, danke nochmal an alle die geposted haben ^-^
11.01.2019 03:35 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 10 Monate.
Der letzte Beitrag ist älter als 10 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 18.11.2019 11:44