Sepra Geschrieben 2. Februar 2009 Teilen Geschrieben 2. Februar 2009 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; } } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 3. Februar 2009 Teilen Geschrieben 3. Februar 2009 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Sepra Geschrieben 3. Februar 2009 Autor Teilen Geschrieben 3. Februar 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 3. Februar 2009 Teilen Geschrieben 3. Februar 2009 (bearbeitet) 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 3. Februar 2009 von TDM Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Sepra Geschrieben 3. Februar 2009 Autor Teilen Geschrieben 3. Februar 2009 Vielen dank für deine Schnelle uns ausführliche antwort. Ich werd mich wohl mal durcharbeiten und versuchen es auf die kette zu bekommen, VIelen dank! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 3. Februar 2009 Teilen Geschrieben 3. Februar 2009 Ich werd mich wohl mal durcharbeiten und versuchen es auf die kette zu bekommen, VIelen dank! Schön Bitte benutz beim nächsten Mal einen aussagekräftigen Threadtitel. Bei "Anfänger braucht eure Hilfe" weiß niemand, worum es geht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Argbeil Geschrieben 4. Februar 2009 Teilen Geschrieben 4. Februar 2009 Und beim nächsten mal bitte auch auf die Rechtschreibung achten. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.