Autor Beitrag
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19313
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 01.01.09 19:09 
Dies ist eine Möglichkeit, ja. ;-)
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Do 01.01.09 19:12 
user profile iconilwaka hat folgendes geschrieben Zum zitierten Posting springen:
was soll den mit komma und dezimal punkt passieren.Klappt bei mir beides

Auf einem "deutschen" Rechner kann eine Eingabe wie "12.345" als 12345 (12 Tausend) interpretiert werden statt als 12 Komma 345.

user profile iconilwaka hat folgendes geschrieben Zum zitierten Posting springen:
ich würd sagen mit so einer while schleife...
die hab ich jetzt aus guide to C# kopiert aber so könnte es gehen

Das ist eine der vielen Möglichkeiten.

user profile iconilwaka hat folgendes geschrieben Zum zitierten Posting springen:
oder?

Bitte selbst ausprobieren!

Hast Du eigentlich schon den Debugger benutzt?

Gruß Jürgen
ilwaka Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 48

Win Vista
C# (VS 2008)
BeitragVerfasst: Do 01.01.09 20:59 
user profile iconJüTho hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconilwaka hat folgendes geschrieben Zum zitierten Posting springen:
was soll den mit komma und dezimal punkt passieren.Klappt bei mir beides

Auf einem "deutschen" Rechner kann eine Eingabe wie "12.345" als 12345 (12 Tausend) interpretiert werden statt als 12 Komma 345.







Ja bei mir geht das ..
Das mit der Schleife hab ich auch probiert und der Debugger läuft automatisch wenn ich das Programm kompiliere.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 01.01.09 21:18 
user profile iconJüTho hat folgendes geschrieben Zum zitierten Posting springen:
Das Programm wird nicht automatisch nach jeder Rechnung beendet, sondern erst durch Eingabe von Ctrl-C (das zu prüfen ist in der Console etwas schwieriger).
Ganz im Gegenteil, das sollte in der Konsole schon ohne eigenes Zutun funktionieren :zwinker: .

Ich bin mir gerade nicht sicher, ob ich ReadKey gut finde oder nicht, da die Eingabe damit sofort angenommen wird und der User sie nicht revidieren kann. Gut, es gibt Schlimmeres ;) .

Zitat:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
string zahl2;
zahl2 = (Console.ReadLine());
double number2;

possible = Double.TryParse(zahl2, out number2);
Wenn ein Variablenname schon belegt ist, würde ich nicht durch Zweisprachigkeit ausweichen ;) . Die erste Variable könnte man beispielsweise "input" nenne, oder - wenn dir das nicht zu verworren ist -
ausblenden C#-Quelltext
1:
2:
double number2;
possible = double.TryParse(Console.ReadLine(), out number2);

_________________
>λ=
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19313
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 01.01.09 21:20 
user profile iconilwaka hat folgendes geschrieben Zum zitierten Posting springen:
Das mit der Schleife hab ich auch probiert
Erfolgreich?

user profile iconilwaka hat folgendes geschrieben Zum zitierten Posting springen:
und der Debugger läuft automatisch wenn ich das Programm kompiliere.
Nicht wenn du das Programm kompilierst, sondern nachdem du es startest läuft der Debugger.
Und dann kannst du schrittweise durch dein Programm gehen und das Programm hält an Stellen an, an denen du Haltepunkte gesetzt hast.
ilwaka Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 48

Win Vista
C# (VS 2008)
BeitragVerfasst: Do 01.01.09 21:23 
Ja die Schleife funktioniert einwandfrei.
ICh meinte doch starten.Also der Debugger meldet nichts.
Wenn ich auf Debuggen starte klicke läuft das Programm und zwar einwandfrei
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19313
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 01.01.09 21:51 
user profile iconilwaka hat folgendes geschrieben Zum zitierten Posting springen:
Also der Debugger meldet nichts.
Wenn ich auf Debuggen starte klicke läuft das Programm und zwar einwandfrei
So sollte es ja auch sein, wenn alles richtig ist.

Die Frage sollte vermute ich mal ;-) darauf abzielen, ob du schon einmal z.B. einen Haltepunkt gesetzt und schrittweise geschaut hast, was ab da passiert. Denn so kannst du auch selbst Fehler finden und beheben. Und das ist neben dem Programmieren selbst eine der wichtigsten Fähigkeiten, die man sich aneignen muss. ;-)
ilwaka Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 48

Win Vista
C# (VS 2008)
BeitragVerfasst: Do 01.01.09 22:17 
ja ich habs gerade mal ausprobiert wie das geht...
Ich glaub ich mach mich mal daran die Consolen Anwendung in eine Windows Forms Anwendung umzubauen.
Ich werde dazu alles benutzen was ich bisher in dem Thread hier gelernt hab. :D
ilwaka Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 48

Win Vista
C# (VS 2008)
BeitragVerfasst: Fr 02.01.09 01:20 
so.. ich hab das ganze jetzt als grafische anwendung.
Hab noch wurzelziehen und Prozentrechnung dazugefügt.
klappt alles super.
Wenn man den Radiobutton wurzelziehen anklickt wechselt der status von Zahl2 auf enabled=false.
wenn man danach ein anders anklickt wirds wieder aktiviert.
hier mal ein screenshot
Einloggen, um Attachments anzusehen!
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Fr 02.01.09 12:00 
Hallo,

das sieht in der Tat schon nach etwas aus (für Deinen Kenntnisstand); auch die Idee mit dem Abschalten von Zahl2 ist gut. Ich vermisse eine TextBox für die Anzeige des Ergebnisses.

Damit wir Dir weiterhelfen können (mit Ratschlägen), ist aber der Quellcode wichtiger als der ScreenShot.

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Die Frage (zumDebugger) sollte vermute ich mal ;-) darauf abzielen, ob du schon einmal z.B. einen Haltepunkt gesetzt und schrittweise geschaut hast, was ab da passiert. Denn so kannst du auch selbst Fehler finden und beheben. Und das ist neben dem Programmieren selbst eine der wichtigsten Fähigkeiten, die man sich aneignen muss. ;-)

In der Tat, genau das meinte ich! :lol:

user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
Ganz im Gegenteil, das sollte in der Konsole schon ohne eigenes Zutun funktionieren :zwinker:

Da wirst Du recht haben. Ich hatte Ctrl-C als gängige Tastenkombination vorgeschlagen; aber das Prüfen einer (beliebigen) Kombination in der Console ist schwieriger als die einfache Abfrage nach ReadKey (darauf hatte ich hinweisen wollen). Aber das sollten wir nicht vertiefen.

user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ein Variablenname schon belegt ist, würde ich nicht durch Zweisprachigkeit ausweichen ;)

Ich möchte die Gelegenheit nutzen und von deutschsprachigen Bezeichnern grundsätzlich abraten: Eigentlich bevorzuge ich die (korrekte) Verwendung von deutschen Begriffen. Aber NET und die IDE arbeiten mit englischen Begriffen; spätestens wenn zu einem Control (z.B. der TextBox EingabeZahl1) ein EventHandler erstellt wird, kommt es zu schlimmem Mischmasch wie EingabeZahl1_Validating; und dieses Denglisch finde ich noch viel schlimmer als konsequentes Englisch.

Gruß Jürgen
ilwaka Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 48

Win Vista
C# (VS 2008)
BeitragVerfasst: Fr 02.01.09 13:11 
:D
Also bisher hab ich das Ergebnis in einer Messagebox ausgegeben.
Dann baue ich mal noch eine Textbox dazu.
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
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 WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            box2.Enabled = true;
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
           
            

                string Zahl1 = box1.Text;
                string Zahl2 = box2.Text;
                double Number1;
                double Ergebnis = 0;
                
                box3.Enabled = false;
                bool possible = double.TryParse(Zahl1, out  Number1);
                if (possible)
                    if (radioButton5.Checked)
                    {
                    Ergebnis=Math.Sqrt(Number1);
                    MessageBox.Show("" + Ergebnis + "");
                    }
                    else
                    {
                  if (possible)
                  {
                      {
                          double Number2;
                          possible = double.TryParse(Zahl2, out Number2);
                          if (possible)
                          {
                              if (radioButton1.Checked)
                              {
                                  Ergebnis = Number1 + Number2;



                              }
                              if (radioButton2.Checked)
                              {
                                  Ergebnis = Number1 - Number2;

                              }
                              if (radioButton3.Checked)
                              {
                                  Ergebnis = Number1 * Number2;
                              }
                              if (radioButton4.Checked)
                              {
                                  if (Number2 == 0)
                                  {
                                      possible = false;
                                      MessageBox.Show("Division durch Null unzulässig");
                                  }
                                  else
                                  {
                                      Ergebnis = (double)Number1 / (double)(Number2);
                                  }
                              }
                              if (radioButton6.Checked)
                              {
                                  double zwischensumme = Number1 / 100;
                                  Ergebnis = zwischensumme * Number2;
                              }
                          }
                      }

                      if (possible)
                      {
                          box3.Visible = true;
                          label3.Visible = true;
                          
                          box3.Text = ("" + Ergebnis + "");
                      }

                  }
                    else
                    {
                        MessageBox.Show("Zahl2 ist kein gültiger Double Wert.");
                    }
                }
                else
                {
                    MessageBox.Show("Zahl1 ist kein gültiger Double Wert.");
                }
                
        }

        private void radioButton5_CheckedChanged(object sender, EventArgs e)
        {
            box2.Enabled = false
                



        }

        private void radioButton2_CheckedChanged(object sender, EventArgs e)
        {
            box2.Enabled = true;
        }

        private void radioButton3_CheckedChanged(object sender, EventArgs e)
        {
            box2.Enabled = true;
        }

        private void radioButton4_CheckedChanged(object sender, EventArgs e)
        {
            box2.Enabled = true;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();  
        }

        private void radioButton6_CheckedChanged(object sender, EventArgs e)
        {
            box2.Enabled = true;
        }
    }
}

so jetzt hab ich eine Textbox und in der wird das Ergebnis angezeigt.
Der Benutzer kann nicht reinschreiben weil die Box am anfag enabled=false kriegt.
Ich glaube das Projekt mit der Datenbank werde ich erstmal zurückstellen. :D
scheint doch noch sehr hoch zu sein.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19313
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 02.01.09 13:55 
Die ganzen Handler radioButton2_CheckedChanged usw., die alle das selbe tun, musst du auch nicht mehrfach schreiben. Es genügt, wenn du unter Ereignisse allen das selbe Ereignis zuweist. ;-)
Die anderen kannst du dann löschen.
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Fr 02.01.09 14:17 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Die ganzen Handler radioButton2_CheckedChanged usw., die alle das selbe tun, musst du auch nicht mehrfach schreiben.

Und es geht noch schöner (einheitlich für alle RadioButtons!):
ausblenden C#-Quelltext
1:
box2.Enabled = radioButton1.Checked;					

Die Fehlermeldungen könnten auch in einem Label ausgegeben werden. Ich finde es unpraktisch, wenn man eine Meldung immer wegklicken muss. (Aber das ist meine persönliche Meinung; die MessageBox ist leider Windows-Standard.)

Ich hatte Dir schon bei der Console-Version empfohlen, alle Meldungen in eine string-Variable zu setzen und nur von einer Stelle aus eine Meldung auszugeben; dann ist es leichter, zusätzliche Prüfungen und Meldungen hinzuzufügen.

Außerdem sollten Bezeichner wie box2 und radioButton5 verboten werden: Spätestens in zwei Wochen weißt auch Du nicht mehr, was wozu dient. Sprechende Namen sind dringend anzuraten!

Noch ein paar Anmerkungen:

box3.Enabled gehört in die Designer-Festlegung (im Eigenschaften-Fenster); denn das wird sich nie ändern.

Statt mehrfache einzelne if-Abfragen ist eine if-else if-else if-Konstruktion besser. Denn wenn die erste Abfrage positiv entschieden wird, müssen die anderen Abfragen nicht mehr durchlaufen werden. (Leider gibt es bei RadioButtons keine einfache Index-Abfrage; deshalb kann nicht einfach mit switch gearbeitet werden - anders als bei Delphi mit der RadioButtonGroup. Es gibt ein Ersatzverfahren; aber das muss ich erst noch suchen.)

Wenn das Ergebnis an die box3 übergeben wird, solltest Du so schreiben:
ausblenden C#-Quelltext
1:
2:
3:
box3.Text = "(" + Ergebnis.ToString() + ")"
// oder noch besser so:
box3.Text = String.Format("({0})", Ergebnis);

Ich habe zwar von Kha gelernt, dass ein Wert bei der String-Additon automatisch in einen String verwandelt wird; aber wenn man es selber schreibt, weiß man, was man tut. String.Format ist gut für das, wofür der Name steht, nämlich einen String zu formatieren. In beiden Varianten kannst Du auch die Art der Formatierung steuern.

Gruß Jürgen
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Fr 02.01.09 14:43 
Titel: RadioButton-GroupBox
Ich habe jetzt ein Verfahren für dieses Problem gesucht und gefunden:
user profile iconJüTho hat folgendes geschrieben Zum zitierten Posting springen:
Leider gibt es bei RadioButtons keine einfache Index-Abfrage; deshalb kann nicht einfach mit switch gearbeitet werden - anders als bei Delphi mit der RadioButtonGroup.

Weil dies etwas grundsätzlicher ist, gebe ich es als eigenen Beitrag weiter.

1. Vorbedingung: Bei jedem RadioButton muss das erste Zeichen eindeutig sein und möglichst dem Rechenverfahren entsprechen. Mit Ausnahme der Wurzel hast Du das schon so gelöst (aber es ist ja auch 'W' als Rechenzeichen für Wurzel denkbar).

2. Zusatzvariable im Formular einrichten:
ausblenden C#-Quelltext
1:
char currentOperation = #0;					


3. CheckedChanged-Event einheitlich für alle diese RadioButtons:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
private void OperationChanged(object sender, EventArgs e)
{
   RadioButton rb = sender as RadioButton;
   if (rb != null && rb.Checked)
      currentOperation = rb.Text[0];
}


4. switch benutzen bei der Ausführung der gewünschten Operation:
ausblenden C#-Quelltext
1:
2:
3:
4:
switch(currentOperation) {
   case '+':  // Addition
      break;  // usw.
}


Gruß Jürgen
ilwaka Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 48

Win Vista
C# (VS 2008)
BeitragVerfasst: Fr 02.01.09 14:49 
Wenn ich versuche das in einem zentralen string zu packen die meldungen schaffs ich nicht.
Ich mach irgendwas falsch.
was ist denn jetzt der Unterschied ob ich jetzt über all
ausblenden C#-Quelltext
1:
box2.Enabled = false;					

oder überall
ausblenden C#-Quelltext
1:
box2.Enabled = radioButton1.Checked;					

vll verstech ich auch nicht.
ICh komm gerade irgendwie nicht weiter.
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Fr 02.01.09 16:46 
user profile iconilwaka hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich versuche das in einem zentralen string zu packen die meldungen schaffs ich nicht.
Ich mach irgendwas falsch.

Wie ich schon bei der Console-Version sagte, muss dann die Reihenfolge von Deklaration, Prüfungen und Ausgabe angepasst werden. Aber Genaueres kann ich nur zu Code sagen. (Bitte nicht alles kopieren, nur die relevanten Teile.)

user profile iconilwaka hat folgendes geschrieben Zum zitierten Posting springen:
was ist denn jetzt der Unterschied ob ich jetzt über all
ausblenden C#-Quelltext
1:
box2.Enabled = false;					

oder überall
ausblenden C#-Quelltext
1:
box2.Enabled = radioButton1.Checked;					

Inhaltlich ist es überhaupt kein Unterschied, aber von der "Schönheit der Programmierung" her: Bei der ersten Variante musst Du 1x "true" und (n-1)x "false" zuordnen. Wenn Du einen weiteren RadioButton hinzufügen willst, muss wiederum "false" hinzugefügt werden. Andererseits wird "true" hier abgeleitet von "1 Checked" und "false" von "1 not checked"; also kann man das auch verbinden.

Noch deutlicher wird die "Schönheit" dann, wenn man richtige Namen benutzt.

Gruß Jürgen
ilwaka Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 48

Win Vista
C# (VS 2008)
BeitragVerfasst: Fr 02.01.09 16:50 
naja ich habe jetz den genauen code nicht mehr.
Aber kann ich das jetzt nicht einfach mal so lassen bei diesen Prog jetzt und mir dann beim nächsten Prog überlegen wie ich es von
anfang an einbaue.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19313
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 02.01.09 17:17 
Das musst du ja selbst wissen, nur wirst du vermutlich bei einem neuen Programm dann das genauso machen wie du es jetzt gemacht hattest, wenn du das gar nicht ausprobierst. ;-)
ilwaka Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 48

Win Vista
C# (VS 2008)
BeitragVerfasst: Fr 02.01.09 17:44 
das ist gemein:D
naja ich glaube ich lasse diesen rechner jetzt erstmal vll komme ich späterem(höherem?)leistungsstand noch einmal darauf zurück.
jezt hab ich erstmal ein kleins projekt
ich will eine kleine windows anwendung machen die bin zahlen in dezimal zahlen umwandelt.
Vielen Dank für die Hilfe die ich hier bisher hatte...
Ich hab das Gefühl voll viel gelenrt zu haben
ilwaka Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 48

Win Vista
C# (VS 2008)
BeitragVerfasst: Sa 03.01.09 23:02 
juhu;D

ich habe heute einen Zinsrechner programmiert.
ich habe diesmal alle fehlermeldungen als variable gemacht und an einer zentralen stelle ausgegeben.
also so wie ihr mir das vorgeschlagen habt.
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
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 WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            
        }

        public void button1_Click(object sender, EventArgs e)
        {
            string Message = ("");
            string input1 = textBox1.Text;
            string input2 = textBox2.Text;
            double number1 = 0;
            double number2 = 0;
            //das kapital wird von string zu double gewandelt
            bool possible = Double.TryParse(input1, out number1);
            bool notpossible = false;
            if(possible)
            {
                
                //prozent wird in double konvert,also auch komma
                possible = Double.TryParse(input2, out number2);
                if (possible)
                {
                   // hier wird gerechnet
                    
                    double ergebnis = (number1 * number2) / 100;
                    textBox3.Text = ("" + ergebnis + "");
 
                }
                else
                {
                     notpossible = true;
                     possible = false;
                     Message = ("Zahl 2 ist keine gültige Zahl");

                }
            }
            else
            {
                 notpossible = true;
                 possible = false;
                Message=("Zahl1 ist keine gültige Zahl");
                
            }
            if (notpossible)
            {
                MessageBox.Show(""+Message+"");
            }
            

            
            }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        }
    }