Frage

Weiß jemand, warum Microsoft nicht ein numerisches Textfeld mit seinen .NET-Framework versenden z.B. ein Textfeld, das, dass die eingegebenen Zeichen sind immer eine gültige Zahl sicherstellen würde? Es ist etwas, das üblicherweise für Anwendungen verschiedenen Aromen verwendet wird, und in der Tat etwas, das die meisten GUI-Bibliotheken (na ja, diejenigen, die ich kenne) in irgendeiner Art und Weise liefern. Es ist zwar nicht , die schwierig, Ihre eigenen zu schreiben, ist es entweder nicht trivial.

Also, ich bin daran interessiert, herauszufinden, ob jemand diese Unterlassung rationalisieren können.

edit: Danke für die Vorschläge. Während maskierte Textfelder und numerische up-downs haben ihren Platz; Ich bin in einer Steuer interessiert, das wie ein Textfeld aussieht, sondern führt automatisch Validierung auf Tastendruck, dass die Eingabe in eine gültige Zahl entspricht. In meiner (zugegebenermaßen begrenzten) Erfahrung ist dies etwas, was ziemlich viel verwendet wird (wir wollen nicht immer die statischen Einschränkungen durch maskierte Textfelder auferlegt, so wie wir wollen nicht immer die up-down Regler an der Seite) .

Es gibt viele Implementierungen mit unterschiedlichem Grad der Qualität dieses auf dem Netz variiert und in der Tat gibt es sogar ein Beispiel dafür auf dem MSDN .

edit2: Danke Jungs, so klingt es wie die numerische up-down die NET-Steuerung ist nur für numerische Eingabe verwendet werden (und den Grund, warum wir nicht wirklich ein explizites numerischen Textfeld-Steuerelement haben). Es wäre toll gewesen, wenn es automatisch die Eingabe von nicht-numerischen Zeichen (auf Tastendruck, die Paste usw.) nicht erlaubt, aber ich denke, es ist gut genug, dass es die Validierung durchführt, wenn das Steuerelement des Fokus verliert. Und könnte man das tut auf Tastendruck, die Paste Validierung wenn man gerade sehr daran interessiert ...

War es hilfreich?

Lösung

Ich zweite Garry Shutlers Empfehlung von NumericUpDown verwenden. Sie könnten die up-down-Kontrollen nicht wie, aber das ist das Standard-Aussehen einer numerischen Eingabesteuerung in Windows, und Sie sollten zweimal darüber nachdenken, einen anderen Blick mit.

Wenn Sie eine eigene Implementierung am Ende Codierung (oder der Suche nach einer auf dem Netz), gibt es einige Fallstricke zu achten ist. Denken Sie daran, dass es viele Möglichkeiten für einen Wert sind in eine Steuer neben Drücken von Tasten zu bekommen. Die in Ihrem Link auf MSDN nicht einmal Einfügen außer Kraft setzen, so können Sie einfach Strg-V eine nicht-numerische Zeichenfolge in die Steuerung.

Andere Tipps

könnten Sie ein MaskedTextBox

Es ist die NumericUpDown Steuer die speziell für die Eingabe von Zahlen gemacht wird und kann wie ein TextBox verwendet werden.

Beginnend mit WinForms 2.0, haben Sie eine MaskedTextBox. Sie können die Maske auf, was Sie wollen, das heißt für die Zahlen die Maske alle 0s verwenden.

Einige der .NET Framework-Steuerelemente seltsam Bestrahlung alle Funktionen der zugrunde liegenden Windows-steuern, dass sie wickeln. In diesem Fall aus irgendeinem Grunde der ES_NUMBER Stil nicht implementiert wurde.

Sie könnten möglicherweise das Handle Ereignis (oder außer Kraft setzen OnHandleCreated, wie TextBox nicht abgedichtet ist) handhaben und rufen Sie SetWindowLong den ES_NUMBER Stil auf dem darunterliegenden Edit-Steuerelement zu setzen. ES_NUMBER ist definiert als 0x2000 in Winuser.h.

Sie können auch, leiten die TextBox-Klasse und die Tastatur Veranstaltung packen und sicherstellen, dass nichts anderes als Zahlen geschrieben.

Wenn es sich um eine Web-Seite wäre, hätte das gleiche zu einer HTML-Textfeld mit Javascript geschehen.

Microsoft es zu 3.en Parteien verlassen, um in den Lücken in Bezug auf fehlende Kontrollen in der Toolbox zu füllen. stelle ich mir Zeit und Kosten würden verfügen in ihrer Begründung.

In diesem Fall jedoch, glaube ich, dass das FilteredTextBox bietet die Funktionalität, die Sie beschreiben.

Auf der Grundlage des zweiten edit:

Die Windows Forms FAQ Sie, wie Sie Zeichen in einem Textfeld beschränken in Frage 26.12 :

26.12 Wie kann ich die Zeichen beschränken, die meine Textbox kann akzeptieren?

können Sie den KeyPress-Ereignis des Textes behandeln und wenn das nicht akzeptabel gab char ist, markieren Sie die Ereignisse Argument als das Zeichen zeigt, behandelt wurde. Unten ist ein Textfeld abgeleitet, die nur Ziffern (und Steuerzeichen wie Backspace, ...) übernimmt. Auch wenn das Snippet eine abgeleitete Textbox verwendet, ist es nicht notwendig, da Sie nur die Handler an ihre Mutterform hinzufügen können.

Sehen Sie die FAQ für das Codebeispiel.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top