Autor |
Beitrag |
jaenicke
      
Beiträge: 19313
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 01.01.09 19:09
Dies ist eine Möglichkeit, ja. 
|
|
JüTho
      
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
|
Verfasst: Do 01.01.09 19:12
ilwaka hat folgendes geschrieben : | 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.
ilwaka hat folgendes geschrieben : | 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.
ilwaka hat folgendes geschrieben : | oder? |
Bitte selbst ausprobieren!
Hast Du eigentlich schon den Debugger benutzt?
Gruß Jürgen
|
|
ilwaka 
      
Beiträge: 48
Win Vista
C# (VS 2008)
|
Verfasst: Do 01.01.09 20:59
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Do 01.01.09 21:18
|
|
jaenicke
      
Beiträge: 19313
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 01.01.09 21:20
ilwaka hat folgendes geschrieben : | Das mit der Schleife hab ich auch probiert |
Erfolgreich?
ilwaka hat folgendes geschrieben : | 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 
      
Beiträge: 48
Win Vista
C# (VS 2008)
|
Verfasst: 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
      
Beiträge: 19313
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 01.01.09 21:51
ilwaka hat folgendes geschrieben : | 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 
      
Beiträge: 48
Win Vista
C# (VS 2008)
|
Verfasst: 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. 
|
|
ilwaka 
      
Beiträge: 48
Win Vista
C# (VS 2008)
|
Verfasst: 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
      
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
|
Verfasst: Fr 02.01.09 12:00
|
|
ilwaka 
      
Beiträge: 48
Win Vista
C# (VS 2008)
|
Verfasst: Fr 02.01.09 13:11
Also bisher hab ich das Ergebnis in einer Messagebox ausgegeben.
Dann baue ich mal noch eine Textbox dazu.
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.
scheint doch noch sehr hoch zu sein.
|
|
jaenicke
      
Beiträge: 19313
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
      
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
|
Verfasst: Fr 02.01.09 14:17
jaenicke hat folgendes geschrieben : | 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!):
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:
C#-Quelltext 1: 2: 3:
| box3.Text = "(" + Ergebnis.ToString() + ")"; 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
      
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
|
Verfasst: Fr 02.01.09 14:43
Titel: RadioButton-GroupBox
Ich habe jetzt ein Verfahren für dieses Problem gesucht und gefunden:
JüTho hat folgendes geschrieben : | 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:
C#-Quelltext 1:
| char currentOperation = #0; |
3. CheckedChanged-Event einheitlich für alle diese RadioButtons:
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:
C#-Quelltext 1: 2: 3: 4:
| switch(currentOperation) { case '+': break; } |
Gruß Jürgen
|
|
ilwaka 
      
Beiträge: 48
Win Vista
C# (VS 2008)
|
Verfasst: 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
C#-Quelltext
oder überall
C#-Quelltext 1:
| box2.Enabled = radioButton1.Checked; |
vll verstech ich auch nicht.
ICh komm gerade irgendwie nicht weiter.
|
|
JüTho
      
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
|
Verfasst: Fr 02.01.09 16:46
|
|
ilwaka 
      
Beiträge: 48
Win Vista
C# (VS 2008)
|
Verfasst: 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
      
Beiträge: 19313
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 48
Win Vista
C# (VS 2008)
|
Verfasst: 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 
      
Beiträge: 48
Win Vista
C# (VS 2008)
|
Verfasst: 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.
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; bool possible = Double.TryParse(input1, out number1); bool notpossible = false; if(possible) { possible = Double.TryParse(input2, out number2); if (possible) { 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(); } } } |
|
|