| Autor |
Beitrag |
Piellepalle
Hält's aus hier
Beiträge: 7
|
Verfasst: Do 25.10.12 07:37
Guten Morgen,
da ich noch etwas neu in der ganzen sache bin habe ich da gerade ein problem bei einem programm.
Ich möchte ein erstelltes formular in meiner windows form anwendung berechnen und ein teil der ergebnisse in einer datenbank ablegen.
der aufbau meiner anwendung sieht wie folgt aus:
[FELD-2] - [FELD-3] das ergebniss soll dann in [FELD-16] erscheinen.
[FELD-2] + [FELD-3] das ergebniss soll dann in [FELD-17] erscheinen.
[FELD-5] + [FELD-7] + [FELD-9] + [FELD-11] + [FELD-13] das ergebniss soll dann in [FELD18] erscheinen.
[FELD-2] - [FELD-3] - [FELD-5] - [FELD-7] - [FELD-9] - [FELD-11] - [FELD-13] - [FELD-14] + [FELD-15] das ergebniss soll dann in [FELD19] erscheinen.
die FELDER sind alles TextBoxes.
sollte es null werte in den feldern geben soll die anwendung einfach weiter rechnen ohne mir ein fehler auszugeben oder die anwendung abstürzen lassen.
dass ganze wird über einen butten "berechnen" errechnet. aber ich hätte das gerne nachher so, das sobald ich die werte in die felder eintrage meine anwendung die ergebniss felder automatisch ausfüllt. das ich nachher nur noch den button "übertragen" oder "drucken" klicken muss und nicht vorab "berechnen".
wäre cool wenn mir da wer weiterhelfen könnte.
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Do 25.10.12 08:44
Wo stehst du denn jetzt genau? Also was hast du schon und an welcher Stelle hängst du? Wir brauchen schon ein halbwegs konkretes Problem bei dem wir dir helfen können.
|
|
Piellepalle 
Hält's aus hier
Beiträge: 7
|
Verfasst: Do 25.10.12 09:44
Hi Ralf,
danke für die rasche antwort.
das ganze formular ist komplett fertig im design, alle textBoxen und labels sind bezeichnet damit ich das im code umrechnen kann. habe es mit dem direkten weg versucht:
C#-Quelltext 1: 2: 3: 4:
| private void btnFelderBerechnen_Click(object sender, EventArgs e) { txbFeld16.Text = Convert.ToString(Convert.ToInt32(txbFeld2.Text) - Convert.ToInt32(txbFeld3.Text)); } |
nur sobald ich alle rechenweg in die button_klick einbinden möchte streikt die anwendung ab der zweiten errechnung fangen die probleme an.
Beispiel:
[FELD-2](wert 100) + [FELD-3](wert 150) ist das ergebniss [FELD-17](wert 100150) statt (wert 250)
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Do 25.10.12 10:02
Convert.ToInt knallt wenn die Umwandlung nicht möglich ist. Sieh dir Int32.TryParse an das liefert dir gleichzeitig ob die Umwandlung funktioniert hat oder nicht. Dann kannst du darauf reagieren.
Und lagere die Berechnung in eine Methode aus die du von deinem Event aus aufrufen kannst. Du brauchst später eine einfache Methode die du aufrufen kannst sobald sich der Textbox Inhalt ändert.
|
|
Piellepalle 
Hält's aus hier
Beiträge: 7
|
Verfasst: Do 25.10.12 10:08
Danke ich werde das mal machen.
Sollte ich es nicht schaffen, könntest du mir da ein anstubs geben und ein kleines beispiel schreiben, an dem ich mich dann orientieren kann?
Gruß
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Do 25.10.12 10:10
Zeig dann was du bis dahin hast und dir kann geholfen werden.
|
|
Th69
      

Beiträge: 4805
Erhaltene Danke: 1061
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Do 25.10.12 11:28
Hallo,
und wenn du direkt auf Änderungen in den TextBoxen reagieren willst, dann verwende das TextChanged Ereignis (oder wenn nur bei Fokuswechsel eine Berechnung stattfinden soll das Leave Ereignis).
|
|
Piellepalle 
Hält's aus hier
Beiträge: 7
|
Verfasst: Do 25.10.12 11:34
Hallo Ralf,
ich habe das jetzt so gemacht:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| private void btnBetragBerechnen_Click(object sender, EventArgs e) { int zahl = int.Parse(FELD2.Text); int zahl1 = int.Parse(FELD3.Text); int zahl2 = int.Parse(FELD5.Text); int zahl3 = int.Parse(FELD7.Text); int zahl4 = int.Parse(FELD9.Text); int zahl5 = int.Parse(FELD11.Text); int zahl6 = int.Parse(FELD13.Text); int zahl7 = int.Parse(FELD15.Text); int summe = zahl - zahl1; int summe1 = zahl + zahl1; int summe2 = zahl2 + zahl3 + zahl4 + zahl5 + zahl6; int summe3 = zahl7 + summe - summe2; FELD16.Text = summe.ToString(); FELD17.Text = summe1.ToString(); FELD18.Text = summe2.ToString(); FELD19.Text = summe3.ToString(); } |
Das klappt alles prima, nur das problem jetzt ist wenn FELD5,FELD7,FELD9,FELD11 und FELD13 werden nicht immer gefüllt.
Wenn das der fall ist dann wars das...
Wie kann ich in meiner rechnung sagen, wenn das FELD-XY nicht ausgefüllt ist vergebe ein null-wert. Dann müsste er doch weiter machen!?
Th69 hat folgendes geschrieben : | Hallo,
und wenn du direkt auf Änderungen in den TextBoxen reagieren willst, dann verwende das TextChanged Ereignis (oder wenn nur bei Fokuswechsel eine Berechnung stattfinden soll das Leave Ereignis). |
Danke Th69 daran habe ich nicht gedacht.
Gruß
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Do 25.10.12 12:19
int.Parse ist letztlich das gleiche wie Convert.ToInt. Ich hatte TryParse empfohlen das auch unsinnige Eingabe abfängt. Was passiert zum Beispiel jetzt wenn du Buchstaben eingibst?
null ist übrigens ein schlechter Begriff in diesem Kontext. Meinst du NULL oder 0
Bei deinem Problem könnt es reichen den Wert auf 0 zu setzen.
Also z.B. ein
C#-Quelltext 1: 2:
| int zahl = 0; Int32.TryParse(FELD.Text, out zahl); |
je Feld. Dann wäre auch jede andere unsinnige Eingabe, nicht nur leer, abgefangen un dwürde als 0 gewertet.
Wenn du explizit auf Leer testen willst kannst du den Textinhalt auch mit den string.IsNullOrEmpty oder string.ISNullOrWhitspace testen und dann entsprechend auf 0 setzen.
Für diesen Beitrag haben gedankt: Piellepalle
|
|
Piellepalle 
Hält's aus hier
Beiträge: 7
|
Verfasst: Do 25.10.12 12:27
Danke Ralf klappt super
Gruß
|
|
Piellepalle 
Hält's aus hier
Beiträge: 7
|
Verfasst: Do 25.10.12 17:18
Nabend Ralf sry das ich nochmal nerve,
alles klappt prima. Jetzt habe ich das Problem, das er sobald ich eine zahlenstelle mit , eingeben rechnet er sie nicht.
Meine fragen ist, ob du mir sagen könntest wie ich das simple meine programm beibringen kann.
Gruß
|
|
Th69
      

Beiträge: 4805
Erhaltene Danke: 1061
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Do 25.10.12 18:03
Tipp: such mal nach dem Begriff 'Fließkommazahlen' in deinem C#-Buch...
Für diesen Beitrag haben gedankt: Piellepalle
|
|