Laden...

WinForms: Ergebnis einer Währungsrechnung in Textbox schreiben

Erstellt von Chipsland vor 8 Jahren Letzter Beitrag vor 8 Jahren 2.909 Views
C
Chipsland Themenstarter:in
2 Beiträge seit 2015
vor 8 Jahren
WinForms: Ergebnis einer Währungsrechnung in Textbox schreiben

Hallo,
ich bin neu hier und hab gleich mal von Anfang an eine Frage 😄.
Ich bin ein blutiger Anfänger und hab derzeit nicht wirklich viel Ahnung. Im Forum hab ich auch nichts passendes gefunden.
Ich arbeite derzeit an einem Währungsrechner in Windows Forms und habe folgendes Problem:
Er will mir einfach nicht das Ergebnis in meine textBox schreiben. Ausserdem wenn ich haben will, dass er mir eine Message gibt wenn ich zum Beispiel in meinen comboBoxen zweimal die gleiche Währung hab sagt er mir:
"Show" ist "Methodengruppe", daher ist die Zuordnung nicht möglich.
Hier mein 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 Währungsrechner
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            double Waehrung1 = Convert.ToDouble(textBox2.Text);
            double Ergebnis;

            if (comboBox1.SelectedText == "Euro")
            {
                if (comboBox2.SelectedText == "Euro")
                {
                    MessageBox.Show = "Sie haben zweimal die gleiche Währung ausgewählt";
                }
                else if (comboBox2.SelectedText == "")
                {
                    MessageBox.Show = "Sie haben keine Währung ausgewählt";
                }
            }
            if (comboBox1.SelectedText == "Euro")
            {
                if (comboBox2.SelectedText == "Dollar")
                {
                    Ergebnis = Waehrung1 * 1.1304;
                    textBox2.Text = Convert.ToString(Ergebnis);
                }
                else if (comboBox2.SelectedText == "Yen")
                {
                    Ergebnis = Waehrung1 * 7.0178;
                    textBox2.Text = Convert.ToString(Ergebnis);
                }
                else if (comboBox2.SelectedText == "JP Yen")
                {
                    Ergebnis = Waehrung1 * 138.8240;
                    textBox2.Text = Convert.ToString(Ergebnis);
                }
                else if (comboBox2.SelectedText == "Russischer Rubel")
                {
                    Ergebnis = Waehrung1 * 61.5894;
                    textBox2.Text = Convert.ToString(Ergebnis);
                }
                else if (comboBox2.SelectedText == "CA Dollar")
                {
                    Ergebnis = Waehrung1 * 1.3870;
                    textBox2.Text = Convert.ToString(Ergebnis);
                }
            }
        }

        }
    }

hier meine Projektmappe für die die sich das genauer ansehen wollen:

https://www.dropbox.com/s/3bww5lv38gcnepw/W%C3%A4hrungsrechner.rar?dl=0

Ich bedanke mich für jede Hilfe die ich kriegen kann 🙂

MfG
Chipsland

127 Beiträge seit 2015
vor 8 Jahren

Hallo und Willkommen,

das mit dem Fehler (Show ist Methodengruppe) ist einfach erklärt:
Show ist eine Methode.
Du verwendest Show aber wie eine Eigenschaft (Property).
Daran stört sich der Compiler denn er versteht nicht das du eigentlich die Show Methode aufrufen willst.
Methoden ruft man immer mit Klammern auf.
Also in deinem Fall:
MessageBox.Show("Sie haben zweimal die gleiche Währung ausgewählt");

Das andere Problem das du keine Ausgabe in deine Textbox bekommst liegt daran das du leider die falsche Eigenschaft der ComboBoxen verwendest.
Die "SelectedText" Eigenschaft gibt zurück welcher Text wirklich im Feld "markiert" ist und nicht ausgewählt wie du es gerne hättest. (Irreführende Benennung wenn man Deutsch und Englisch übersetzt)
Die Eigenschaft der Combobox die du suchst für dein konkretes Programmbeispiel wäre "SelectedItem"
SelectedItem aber liefert dir den ausgewählten Listeneintrag als "Object" zurück. Das heißt du mußt das "Object" noch zu einem "String" "casten" um es vergleichen zu können.
String-Vergleiche macht man idealerweise mit der "Equals" Methode, da ich aber befürchte dich hier schon evtl. mit Komplexität abzuschrecken gebe ich dir einfach mal den Code wie er funktioniert und du versuchst ihn zu verstehen. (Verbessern im Sinne von "absolut sicher" machen wir später 😉 )

Du müßtest deinen Code wie folgt umbauen:


private void button1_Click(object sender, EventArgs e)
        {
            double Waehrung1 = Convert.ToDouble(textBox1.Text);
            double Ergebnis;

            if (comboBox1.SelectedItem.ToString() == "Euro")
            {
                if (comboBox2.SelectedItem.ToString() == "Euro")
                {
                    MessageBox.Show("Sie haben zweimal die gleiche Währung ausgewählt");
                }
                else if (comboBox2.SelectedItem.ToString() == "")
                {
                    MessageBox.Show("Sie haben keine Währung ausgewählt");
                }
            }
            if (comboBox1.SelectedItem.ToString() == "Euro")
            {
                if (comboBox2.SelectedItem.ToString() == "Dollar")
                {
                    Ergebnis = Waehrung1 * 1.1304;
                    textBox2.Text = Convert.ToString(Ergebnis);
                }
                else if (comboBox2.SelectedItem.ToString() == "Yen")
                {
                    Ergebnis = Waehrung1 * 7.0178;
                    textBox2.Text = Convert.ToString(Ergebnis);
                }
                else if (comboBox2.SelectedItem.ToString() == "JP Yen")
                {
                    Ergebnis = Waehrung1 * 138.8240;
                    textBox2.Text = Convert.ToString(Ergebnis);
                }
                else if (comboBox2.SelectedItem.ToString() == "Russischer Rubel")
                {
                    Ergebnis = Waehrung1 * 61.5894;
                    textBox2.Text = Convert.ToString(Ergebnis);
                }
                else if (comboBox2.SelectedItem.ToString() == "CA Dollar")
                {
                    Ergebnis = Waehrung1 * 1.3870;
                    textBox2.Text = Convert.ToString(Ergebnis);
                }
            }
        }

Übrigens: Die MSDN dürfte dir viel Kopfzerbrechen sparen.
Für deine Beispiele:
MessageBox.Show
MessageBox.Show-Methode

ComboBox SelectedText
ComboBox.SelectedText-Eigenschaft

ComboBox SelectedItem
ComboBox.SelectedItem

Wie schon gesagt, gäbe es noch diverse Veränderungen um das Programm noch "korrekter" zu machen, aber da du ja erst anfängst ist die absolute "korrektheit" noch nicht von größter Bedeutung.
Also, versuch erst meine genannten Veränderungen zu verstehen und dann machen wir weiter.
Wenn du Fragen oder Probleme hast, sag Bescheid!

16.834 Beiträge seit 2008
vor 8 Jahren

Denkt dran, dass .NET über die RegionInfo-Klasse die Währungen gemäß ISO 4217 bereits zur Verfügung stellt.

U
57 Beiträge seit 2013
vor 8 Jahren

Hallo Chipsland,

Du solltest auch Deine "Berechnung" überdenken:
Du hast sehr viele "Von-Nach" Berechnungsfälle in Deinem Code abgefangen.
(Besonders in Deinem anderen Thread, wo Du immer den "fast immer gleichen" Code schreibst. Sowas ist meist ein "Planungsfehler")
Diesen kannst du sehr einfach umgehen, wenn Du mit einer "BASISWährung" rechnest(z.B. EURO).

Testen wir es mal:

  • Wir haben 4 Währungen...(EUR, USD, YEN, RUB)

  • Wir haben somit 4 Wechselkurse
    EUR - WechselKurs: 1.0000 (BASIS-Währung. Hier nimm ich mal EUR, somit ist es 1.0000)
    USD - WechselKurs: 0.8000 (Hier die "richtigen" Kurse einfügen...
    YEN - WechselKurs: 1.5000 hab mal einfach "testKurse" genommen...
    RUB - WechselKurs: 0.3000 um die Berechnung zu Zeigen.)

  • DU Hast ja 2 ComboBoxen(nennen wir sie mal [cB_Von] und [cB_Nach])

  • Dort kannst Du die ausgewählten WechselKurse lesen...

  • Das "merke" Dir mal für später, falls Interesse besteht, Stichwort: "ComboBox.SelectedItem"

  • Stell Dir einfach erstmal vor, dass Du weist, wenn in:

  • [cB_Von], der "EUR" gewählt ist, Du auch einen Kurs von "1.0000" lesen kannst.

  • [cB_Nach] der "YEN" gewählt ist, Du auch einen Kurs von "1.5000" lesen kannst.

  • Oder wenn irgendwo "RUB" gewählt ist, Du einen Kurs von "0.3000" lesen kannst)...usw.
    (wir wollen ja erstmal Dein "MatheProblem lösen 😉)

NUN ZUM TEST:

Formel:
// WICHTIG...
EingabeWert / [cB_Von].Kurs * [cB_Nach].Kurs
// WICHTIG...

TestFall A:
-Du hast die Berechnung von [EUR) nach [USD] eingestellt und z.B. 1 EUR eingetippt.
= [Eingabe] DURCH [EURKurs] MAL [USDKurs] GLEICH [ERGEBNIS]
: [1] / [1.0000] * [0.8000] == [0.8000] // 1 durch 1 mal 0,8 gleich 0,8 (1 EUR == 0,8 USD)

TestFall B:
-Du hast die Berechnung von [USD) nach [EUR] eingestellt und z.B. 1 USD eingetippt.
= [Eingabe] DURCH [USDKurs] MAL [EURKurs] GLEICH [ERGEBNIS]
: [1.0000] / [0.800] * [1.0000] == [1.2500] // 1 durch 0,8 mal 1,0 gleich 1,25 (0,8 USD == 1 EUR)

TestFall C: (jetzt wirr gemixt)
(es steht IMMER NOCH eine 1 ein der EingabeBox)
-Du stellst die Berechnung von [YEN) nach [RUB](somit ist die "1" in der eingabeBox ja nun 1 YEN).
= wie immer die gleiche Formel: [Eingabe] DURCH [YENKurs] MAL [RUBKurs] GLEICH [ERGEBNIS]
: [1.0000] / [1.500] * [0.3000] == [0.2000] // 1 durch 1,5 mal 0,3 gleich 0,2 ((1 YEN DURCH DURCH 1,5 == EUR] * 0,3[RUB] == [RUB] )

TestFall D: (jetzt wirr gemixt)
(es steht IMMER NOCH eine 1 ein der EingabeBox)
-Du stellst die Berechnung von [EUR) nach [RUB](somit ist die "1" in der eingabeBox ja nun 1 EUR).
= wie immer die gleiche Formel: [Eingabe] DURCH [EURKurs] MAL [RUBKurs] GLEICH [ERGEBNIS]
: [1.0000] / [1.000] * [0.3000] == [0.3000] // 1 durch 1 mal 0,3 gleich 0,3 ((1 EUR DURCH DURCH 1,0 == EUR] * 0,3[RUB] == [RUB] )
^^hoffe ich hab keinen "Vertipper" drin 😃

Wie gesagt, DAS soll NUR Dein "Matheproblem" lösen...
DANACH kommt die C# Technik...
Viel Spaß beim "ab s tra hie ren" 😃)

Viele Grüße
UltraEdit...