Autor Beitrag
Piellepalle
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 25.10.12 10:10 
Zeig dann was du bis dahin hast und dir kann geholfen werden.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4805
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Do 25.10.12 11:34 
Hallo Ralf,

ich habe das jetzt so gemacht:

ausblenden 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!?



user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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

ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Do 25.10.12 12:27 
Danke Ralf klappt super :D

Gruß
Piellepalle Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4805
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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