2008-09-17 19 views
0

Wer weiß, warum Microsoft ein numerisches Textfeld mit seinem .NET-Framework z. ein Textfeld, das sicherstellen würde, dass die eingegebenen Zeichen immer eine gültige Nummer sind? Es ist etwas, das häufig für Anwendungen verschiedener Geschmacksrichtungen verwendet wird und in der Tat etwas, das die meisten GUI-Bibliotheken (na ja, die, die ich kenne) in irgendeiner Weise liefern. Während es nicht ist, dass schwierig ist, Ihr eigenes zu schreiben, ist es auch nicht trivial..NET NumericTextBox

Also, ich bin daran interessiert herauszufinden, ob jemand diese Unterlassung rationalisieren kann.

bearbeiten: Danke für die Vorschläge. Während maskierte Textfelder und numerische Up-Downs ihren Platz haben; Ich interessiere mich für ein Steuerelement, das wie ein Textfeld aussieht, aber beim Drücken der Taste automatisch überprüft, ob die Eingabe einer gültigen Nummer entspricht. In meiner (zugegebenermaßen begrenzten) Erfahrung ist dies etwas, das ziemlich oft benutzt wird (wir wollen nicht immer die statischen Beschränkungen, die durch maskierte Textfelder auferlegt werden, genauso wie wir nicht immer die Aufwärts-Abwärts-Steuerung an der Seite wollen) .

Es gibt viele Implementierungen mit unterschiedlichen Qualitätsstufen im Internet und tatsächlich gibt es sogar ein Beispiel dafür auf der MSDN.

edit2: Danke Leute, also klingt es wie das numerische up-down ist das .NET-Steuerelement nur für numerische Eingabe verwenden (und der Grund, warum wir nicht wirklich eine explizite numerische Textfeld-Steuerelement haben). Es wäre großartig gewesen, wenn die Eingabe nicht-numerischer Zeichen (beim Drücken, beim Einfügen usw.) automatisch nicht erlaubt wäre, aber ich denke, es ist gut genug, dass es die Überprüfung durchführt, wenn das Steuerelement den Fokus verliert. Und man könnte das auf Tastendruck tun, auf Paste Validierung, wenn man wirklich daran interessiert wäre ...

Antwort

4

Ich zweite Garry Shutters Empfehlung der Verwendung von NumericUpDown. Sie mögen die Hoch-Runter-Steuerungen vielleicht nicht, aber das ist das Standard-Aussehen eines numerischen Eintrags in Windows, und Sie sollten zweimal darüber nachdenken, ein anderes Aussehen zu verwenden.

Wenn Sie am Ende Ihre eigene Implementierung codieren (oder eine im Internet finden), sollten Sie auf einige Fehler achten. Denken Sie daran, dass es neben Tastenanschlägen viele Möglichkeiten gibt, einen Wert in ein Steuerelement zu bringen. Die in Ihrem Link auf MSDN überschreibt das Einfügen nicht einmal, so dass Sie einfach eine nicht numerische Zeichenfolge in das Steuerelement eingeben können.

3

Es gibt die NumericUpDown Steuerung, die speziell für die Eingabe von Zahlen gemacht wird und wie eine TextBox verwendet werden kann.

4

Sie ein 2.0 MaskedTextBox

+0

Erstellen Sie eine Instanz dieses Steuerelements und legen Sie ihre Mask-Eigenschaft wie hier dokumentiert fest: http://msdn.microsoft.com/en-us/library/system.windows.forms.maskedtextbox.mask.aspx ' – Gishu

3

Beginnend mit WinForms verwenden konnten, haben Sie eine MaskedTextBox. Sie können die Maske auf das einstellen, was Sie wollen, d. H. Für Zahlen verwenden Sie die Maske alle 0s.

0

Sie können auch die TextBox-Klasse ableiten und das Tastaturereignis erfassen und sicherstellen, dass nichts anderes als Zahlen geschrieben wird.

Wenn es eine Webseite wäre, wäre das gleiche mit einem HTML-Textfeld mit Javascript getan worden.

0

Microsoft überlassen es Dritten, die Lücken in Bezug auf fehlende Steuerelemente in der Toolbox zu füllen. Ich stelle mir vor, dass Zeit und Kosten in ihrer Logik enthalten sein würden.

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

1

Einige der .NET Framework-Steuerelemente weisen nicht alle Features der zugrunde liegenden Windows-Steuerelemente auf, die sie umbrechen.In diesem Fall wurde der Stil ES_NUMBER aus irgendeinem Grund nicht implementiert.

Sie könnten möglicherweise das HandleCreated-Ereignis behandeln (oder OnHandleCreated überschreiben, da TextBox nicht versiegelt ist) und SetWindowLong aufrufen, um den ES_NUMBER-Stil für das zugrunde liegende Edit-Steuerelement festzulegen. ES_NUMBER ist in WinUser.h als 0x2000 definiert.

0

auf dem zweiten bearbeiten Basierend:

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

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

Sie können das KeyPress-Ereignis des Textfeldes behandeln und wenn das übergebene Zeichen nicht akzeptabel ist, markieren Sie das Ereignisargument als Zeichen, dass das Zeichen behandelt wurde. Unten ist eine abgeleitete TextBox, die nur Ziffern (und Steuerzeichen wie Rücktaste, ...) akzeptiert. Obwohl das Snippet ein abgeleitetes Textfeld verwendet, ist es nicht erforderlich, da Sie den Handler einfach zu seinem übergeordneten Formular hinzufügen können.

Siehe FAQ für das Codebeispiel.