Hallo, ich habe mir mal in C# einen kleinen Taschenrechner programmiert. Allerdings klappt es noch nicht so wie bei dem Windows Rechner, dass ich zur Laufzeit die Zahl im Textbox in Dezimal bzw. Binärumwandeln kann. Ich habe eine RadioButton mit dem ich die Zahl in der TextBox in eine Dezimalzahl bzw Binärwert umwandeln kann. Ich möchte mein Programm so haben, dass wenn ich einen RadioButton aktiviere, dass der Wert in der TextBox dementsprechen umgewandelt wird.
Hallo :) Nunja - ich kann dir zu einem raten (ich habs mir nicht genauer angesehen). Lasse im Hintergrund immer eine Zahl (von mir aus Double) mitlaufen, die sagt, welcher Wert gerade im Feld steht. Die Ausgabe nach Tastendruck oder eben auch nach Ändern des Darstellungsmodus kannst du einfach mittels: string x = zahl.ToString("X"); für hexadezimalen Output hier findest du mögliche format - strings: http://alexonasp.net/samples/stringformatting/
Hi Thomas. Hmm meinst du damit wird es gehen. Was meinst du damit: Nunja - ich kann dir zu einem raten (ich habs mir nicht genauer angesehen). Lasse im Hintergrund immer eine Zahl (von mir aus Double) mitlaufen, die sagt, welcher Wert gerade im Feld steht.
Ich habs mir ehrlich gesagt nicht genau angesehen ... Was ich mit dem Absatz sagen wollte: Es wäre eine Möglichkeit, die internen Daten von den angezeigten zu trennen, so musst du nicht dauernd unterscheiden, was denn nun gerade angezeigt wird :) Wenn du konkrete Fragen hast -> Mail an somnaticuser@hotmail.com :)
Also mit meinem Rechner bin ich noch nicht weitergekommen. Wie gesagt der Rechner sollte sich so verhalten wie der von Windows. Ich kann ohne Probleme einen Binärwert in Hex oder Dezimal umwandeln und umgekehrt. Nur wenn ich zum Beispiel Dez angewählt habe und gebe anschließend eine Zahl ein und diese soll dann in Bin während der Programmlaufzeit umgewandelt werden, dann funzt das nicht. Im Anhang befindet sich die C# Datei. Was müsste ich in meinem Programm andern damit die so funktioniert?
Hallo Hsch Ich habe dir schnell eine Beispiel - Applikation geschrieben. Sie ist sicher nicht perfekt - mir fallen da auf der Stelle ein paar Dinge ein die man besser machen sollte, z.b. das Initialisieren der Buttons usw. - aber sie funktioniert. Ausserdem kann sie noch nicht rechnen, aber auch das sollte nicht allzuschwer sein zu implementieren (alten Wert bei Buttonklick speichern, display rücksetzen, neuen Wert speichern und bei klick auf den nächsten *,+,/,- oder = button den alten mit dem neuen mit der entsprechenden Operation verknüpfen. Sieh dir das mal an. Das Prinzip ist das, welches ich pben geschrieben habe. Im Hintergrund läuft andauernd ein Integer mit, welcher den aktuellen Wert speichert. Dieser wird nun je nach eingestelltem Modus in einen String derjenigen Repräsentation umgewandelt (Convert.ToString(int i, int basis)) und dann in der textBox dargestellt. Viel Spass :)
Hallo Thomas, erstmal recht herzlichen Dank für deine Unterstützung. Ich habe mir mal den Code angeschaut. Leider kann ich das Projekt nicht öffnen, da ich nur die Version 7.1 von Microsoft Visual Studio .NET habe. Wie kann ich trotz all dem das Projekt mit meiner Entwicklungsumgebung öffnen?
lade dir von Microsoft.com die Visual Studio 2005 C# Express Edition herunter. Ist gratis ..
Hi! Gibt es in C# eine Funktion mit der man, wenn man einen Button drückt, z.B. voher war in der Integer Variable "678", eine Stelle löschen/streichen kann? So dass die Integer Variable nur noch "67" enthält?
2 Möglichkeiten: * durch 10 dividieren und dann Math.Floor darauf aufrufen (das liefert das ganzzahlige Ergebnis). * In einen String Konvertieren und dann den Substring nehmen von der ersten bis zur vorletzten Stelle. Dann wieder in einen Int Parsen (Int32.Parse())
Ok super ! Das werd ich mal versuchen. Die nachfolgenden Funktion Funktion ohne Problem. Jetzt möchte ich aber nicht einen Int Wert in einen String umwandeln, sonder einen Double Wert(Kommazahl) in einen String. Wie könnte ich dies realisieren? Die benötige ich weil ich möchte mit dem Rechner auch Kommazahlen eingeben können. public int MakeIntFromString(string s, int basis) { try { return Convert.ToInt32(s, basis); } catch { return 0; } } public string MakeStringFromInt(int i, int basis) { try { return Convert.ToString(i, basis); } catch { return ""; } }
genau gleich ... double d = 2.4; return Convert.ToString(d); die frage ist jetzt halt was du anzeigen lassen willst wenn man auf hex umschaltet ... beispielsweise machts der Windows Rechner so, dass er einfach auf die nächste Ganzzahl kürzt.
ja das funktioniert auch prima. Nur lese ich meine Zahlen mit diese Funktion ein. Mit Int Werten funktioniert es super, nur mit den Kommazahlen, da weiss ich nicht wie man dies damit lösen könnte. private void buttonPressed(char c) { // A button has been pressed ... if (Dez_radioButton.Checked) { string s = MakeStringFromInt(curValue, 10); s += c; curValue = MakeIntFromString(s); textBox1.Text = MakeStringFromInt(curValue, 10); } else if (Bin_radioButton.Checked) { string s = MakeStringFromInt(curValue, 2); s += c; curValue = MakeIntFromString(s); textBox1.Text = MakeStringFromInt(curValue, 2); } else if (Hex_radioButton.Checked) { string s = MakeStringFromInt(curValue, 16); s += c; curValue = MakeIntFromString(s); textBox1.Text = MakeStringFromInt(curValue, 16); } }
du könntest es so machen, dass die Variable die im Hintergrund mitläuft ein double und kein int ist ... beim Umschalten wird dann zuerst der Double in einen Int umgewandelt und dann entsprechend dargestellt ..
Hi Tom, so ich habe mir nun mal die Gratis Version Visual Studio 2005 C# Express Edition heruntergeladen. Die Datei ist ja nur ungefähr 3MB groß. Das Programm müsste doch sehr viel großer sein oder? Fehlen da noch einige Dinge? Ist diese version ohne einschränkungen?
Ich komme nochmal auf das andere Problem zurück. Und zwar müsste ich dann die Variable curValue in eine double umändern. Wie müsste ich dann dies in diese Funktion unterbringen? private void buttonPressed(char c) { // A button has been pressed ... if (Dez_radioButton.Checked) { string s = MakeStringFromInt(curValue, 10); s += c; curValue = MakeIntFromString(s); textBox1.Text = MakeStringFromInt(curValue, 10); } else if (Bin_radioButton.Checked) { string s = MakeStringFromInt(curValue, 2); s += c; curValue = MakeIntFromString(s); textBox1.Text = MakeStringFromInt(curValue, 2); } else if (Hex_radioButton.Checked) { string s = MakeStringFromInt(curValue, 16); s += c; curValue = MakeIntFromString(s); textBox1.Text = MakeStringFromInt(curValue, 16); } }
Das mit den Kommazahlen will einfach nicht funktionieren. private void button12_Click(object sender, System.EventArgs e) { buttonPressed('.'); } Wenn ich den Button (button12) drücke, dann soll das Komma mit eingefügt werden. Aber es klappt über haupt nicht.
Ich kann da machen was ich will, ich bekomme kappier es nicht warum dies nicht so geht. Ich verweifle noch!
Ja und noch was, wenn ich dies so mache wie Tom beschrieben hat, das geht doch nicht. Weil wenn ich eine Kommazahl dann in eine Int umwandle dann ist es ja gar keine Kommazahl. Das verstehe ich überhaupt nicht. Ich brächte nur mal eine ANregung wie genau ich die Funktion private void buttonPressed(char c) abändern muss!
Die Funktion Button Pressed, musst du gar nicht ändern - ich kann mir diese Woche den Source Code nicht ansehen, erst nächste Woche wieder. Im Prinzip basiert alles darauf, dass das Programm nicht das anzeigt, was es intern speichert (angezeigt wird ein String, gespeichert ein Double - in der alten Version halt noch ein Int). Je nachdem was du machen willst, musst du den String dementsprechend darstellen lassen. Kann es sein, dass du noch nicht allzuviel Programmiererfahrung hast - denn hier gehts ja gerade um die kompletten Basics.
private void button12_Click(object sender, System.EventArgs e) { buttonPressed('.'); } Wenn ich diese Funktion ausführe indem ich den button12 drücke, dann sollte doch das eigentlich funktionieren. Und zwar wird dann die Funktion buttonPressed ausgeführt. Und dieser Funktion wird dann dieses Zeichen '.' übergeben. Daraufhin müsste doch dann ein Komme im String vorhanden sein oder ? Oder müsste ich in der Funktion buttonPressed diesen Eintrag abändern String s = MakeStringFromInt(curValue, 10);
Du könntest das Ganze schrittweise debuggen, dann siehst du sofort, wo der . verloren geht.
Hallo, endlich habe ich mein großes Problem gelöst bekommen. Jetzt funzt alles mal soweit. Allerdings bei der Verwendung von Hex gibt es noch ein kleines Problem. Wenn ich z.B. den Button für den Buchstaben "a" drücke, denn soll die Funktion buttonPressed diese auch verarbeiten. Wenn ich dann auf Dez umstelle erscheint in der TextBox1 "0". Wahrscheinlich geht der Buchstabe "a" hier curDoubleValue = System.Convert.ToDouble(curStringValue); verloren. private void bB_Click(object sender, System.EventArgs e) { buttonPressed('b'); } private void buttonPressed(char c) { try { string s = curStringValue + c; curStringValue +=c; textBox1.Text = curStringValue; curDoubleValue = System.Convert.ToDouble(curStringValue); curIntValue = System.Convert.ToInt32(curDoubleValue); } catch { } i = false; }
ich schätze eher dass eine Exception auftritt, die zwar abgefangen, aber nicht behandelt wird. Das Problem ist: Es steht dort: du tippst ein: a der string ist dann "a". Ein ToDouble von "a" gibt es nicht. -> Exception Wenn du im Hex oder Binary Modus auch Kommazahlen willst, erfordert das einiges an Zusatzaufwand - nicht umsonst ist es im Windows Rechner nicht möglich :) - Klar - es geht, aber ist es dir das wert ?
Hi ToM, ja wie würdest du dieses Problem angehen? Also bei String do Double gibt es jetzt Probleme mit dem umwandeln von "a" "b" usw.
Keine Ahnung - Überleg dir halt mal wie ein Double als String im Hexadezimalen Format aussehen müsste. Trennen beim Kommapunkt ?
Hi, ich habe da noch ein Problem und zwar komme ich da nicht weiter beim umwandeln. Wenn ich zwei mal den Button A drücke, dann soll dieser Wert in Dezimal umgewandelt werden. Wie konnte ich dies in C# realisieren?
Da ich die Funktion "buttonPressed(char c)" verwende, werden erstmal alle Wert in dieser Funktion gesammelt. Wie könnte ich dann eine Hex Zahl z.B. AA hex in einen Integer bzw. Double Wert umweandeln/verarbeiten?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.