[C#]Nach einem bestimmten Zeichen...

11/21/2012 19:59 Ŧ4๓4ђ#1
HeyHo,
eine kurze Frage, wie kann ich schreiben, dass nach dem Exponenten nur noch eine Zahl beispielweise unter der 19 erlaubt wird.
Sprich das man nicht mehr 19,20 etc. schreiben kann, nachdem man "E" geschrieben hat.
11/21/2012 21:25 Tasiro#2
C# ist eine .NET-Sprache, also bitte bei den [Only registered and activated users can see links. Click Here To Register...].

Zu deiner Frage: was willst du erreichen? Was ist die Eingabe, und was soll die Ausgabe sein? Möchtest du eine Funktion, die etwa wie folgt aussieht?
Code:
bool akzeptieren (string Text) { /* ... */ }
Sollte dem so sein, kannst du dir ja mal eine .NET-Version von Lex und Yacc ansehen. Wenn du dich aber nicht so sehr damit beschäftigen möchtest (was wohl leider so ist), würde ich vorschlagen, dass du deine Eingabe zeichenweise einliest und dann überprüfst.
11/22/2012 15:45 MrSm!th#3
#moved
11/24/2012 11:39 dasschild#4
Einfach bei OnKeyPress einen Eventhandler hinzufügen oder eine Custom Textbox class machen und die Funktion mit override überschreiben. Dann nimmst du eine bool. Bei jedem Keypress checkst du erstmal ob ein Komma dabei ist. Wenn es dabei war setzt du die bool true und wenn es entfernt wird einfach nach del oder backwardspace checken setzt du die bool false. Dann brauchst du nur noch den string nach dem komma in einen substring zu formen und gucken ob die zahlen im bereich sind.
11/24/2012 14:25 Tasiro#5
Ein eigenes Steuerelement nur dafür? Unnötig.
Du nähmest OnKeyPress? Dann nähme ich das Kontextmenü und wähle dort Einfügen und entfernte den Text erst, wenn ich mehrere Zeichen markiert habe. Es gibt aber ein Ereignis namens TextChanged, wie wäre es damit? Dann kannst du deine Validierungsfunktion den Text untersuchen lassen, soviel du willst.
11/24/2012 19:03 dasschild#6
Quote:
Originally Posted by Tasiro View Post
Ein eigenes Steuerelement nur dafür? Unnötig.
Du nähmest OnKeyPress? Dann nähme ich das Kontextmenü und wähle dort Einfügen und entfernte den Text erst, wenn ich mehrere Zeichen markiert habe. Es gibt aber ein Ereignis namens TextChanged, wie wäre es damit? Dann kannst du deine Validierungsfunktion den Text untersuchen lassen, soviel du willst.
Bei TextChanged musst du jedes mal den ganzen Text durchsuchen! Das wird ineffiktiv!
11/25/2012 11:20 qkuh#7
Nicht bei der Rechenleistung der heutigen PC's
11/26/2012 14:44 kissein#8
seit .net 2.0 gibts dafür MaskedTextbox
[Only registered and activated users can see links. Click Here To Register...]

die mask wäre dann wohl in etwa sowas
Code:
 this.maskedTextBox1.Mask = "0.0E0";
11/26/2012 23:55 Tasiro#9
Ineffektiv? In Ordnung, immerhin kommt es nicht zu inkorrektem Verhalten, der Nutzer ist schließlich äußerst kreativ und nutzt seine Anwendungen gerne unvorhergesehen. Aber Fehler möchte er trotzdem nicht.
Und wie lang, meinst du, muss die Eingabe sein, dass das Prüfen der gesamten Eingabe so lange dauert, dass der Nutzer überhaupt etwas davon merkt?

So, wie das Problem geschildert wurde, ist eine beliebige Zahl nicht akzeptabel. So muss die erste Nachkommastelle im Beispiel kleiner als zwei sein. Das ist bei deinem Beispiel nicht gewährleistet. Mit regulären Ausdrücken (siehe dazu bei weiterem Interesse auch reguläre Sprachen - deren Syntax lässt sich mit solchen vollständig beschreiben) ist dem leider nur in begrenztem Maße beizukommen, besonders dann, wenn die Größe des Maximums (hier 19) zur Compilierzeit unbekannt ist.
11/27/2012 13:57 kissein#10
@Tasiro stimmt
Ich habe die Fragestellung anders verstanden.