Zum Hauptinhalt springen

Wie mache ich eine Textbox nur für c# wpf-Zahlen

In der Softwareentwicklung besteht oft die Notwendigkeit, die Benutzereingabe in bestimmten Textformularfeldern auf nur Zahlen zu beschränken. Dies kann ein Feld zum Eingeben einer Telefonnummer oder ein Feld zum Eingeben eines Alters sein. In C# und mit der WPF-Technologie gibt es mehrere Möglichkeiten, eine solche Einschränkung zu implementieren.

Eine der einfachsten Methoden ist die Verwendung von regulären Ausdrücken. In C# gibt es Klassen zum Arbeiten mit regulären Ausdrücken wie Regex. Wir können diese Klasse verwenden, um die eingegebenen Zeichen zu überprüfen und nur Zahlen zuzulassen. Dazu benötigen wir einen Textänderungsereignishandler im Textfeld, der jedes Zeichen überprüft und ggf. ungültige Zeichen entfernt.

Eine andere Möglichkeit ist die Verwendung von Texteingabeereignissen. Wenn der Benutzer die Tasten auf der Tastatur drückt, treten bestimmte Ereignisse auf, z. B. KeyDown oder PreviewKeyDown. Wir können einen Ereignishandler schreiben und darin prüfen, ob das eingegebene Zeichen eine Ziffer ist. Falls das Zeichen keine Ziffer ist, werden wir das Ereignis einfach abbrechen, dh das Zeichen wird dem Textfeld nicht hinzugefügt.

Option 1: Verwenden der TextBox-Klasse mit einer Einschränkung für die Eingabe von Zahlen

Im folgenden Beispiel können Sie nur Zahlen in eine TextBox eingeben:

using System;using System.Windows;using System.Windows.Controls;using System.Windows.Input;namespace NumericTextBoxExampleprivate void NumericTextBox_PreviewTextInput(object sender, TextCompositionEventArgs e)>>>

In diesem Beispiel wird eine benutzerdefinierte NumericTextBox-Klasse erstellt, die von der Basisklasse TextBox erbt. Im Klassenkonstruktor wird das PreviewTextInput-Ereignis abonniert, das vor der Eingabe von Text in eine TextBox ausgelöst wird.

Der Ereignishandler überprüft, ob es sich bei dem eingegebenen Zeichen um eine Ziffer handelt. Wenn das Zeichen keine Ziffer ist, wird die Handled-Eigenschaft des Ereignisarguments auf true festgelegt. Dies führt dazu, dass das ungültige Zeichen nicht in der TextBox angezeigt wird.

Um diese Klasse in XAML zu verwenden, müssen Sie einfach einen Namespace hinzufügen und unser benutzerdefiniertes Steuerelement verwenden:

In diesem Beispiel wird NumericTextBox als Steuerelement innerhalb eines Grid-Elements verwendet. Es gibt Breite und Höhe an, aber es kann an Ihre Bedürfnisse angepasst werden.

Jetzt können Sie diese benutzerdefinierte TextBox verwenden, um die Eingabe Ihrer Benutzer auf nur Zahlen zu beschränken. Dadurch wird sichergestellt, dass numerische Werte in Ihrer WPF-basierten Anwendung genauer und zuverlässiger eingegeben werden.

Option 2: Erstellen Sie Ihr eigenes benutzerdefiniertes Element, um nur Zahlen einzugeben

Wenn Sie nur Zahlen in ein Textfeld in einer WPF-Anwendung eingeben müssen, können Sie zu diesem Zweck ein Benutzersteuerelement erstellen.

Erstellen Sie zunächst ein neues WPF-Projekt in Visual Studio, und fügen Sie ein neues Steuerelement hinzu, das eine benutzerdefinierte TextBox darstellt.

Definieren Sie im XAML-Markup eines benutzerdefinierten Elements eine TextBox, die an eine Eigenschaft mit dem Namen "textValue" gebunden ist, und legen Sie die Eigenschaft "PreviewTextInput" fest, um Textereignisse zu behandeln.

Definieren Sie im Code des benutzerdefinierten Elements die Abhängigkeitseigenschaft "textValue", um den eingegebenen Wert zu speichern, und definieren Sie eine Methode zum Verarbeiten der eingegebenen Zeichen.

Die Methode zur Verarbeitung der eingegebenen Zeichen sollte überprüfen, ob das Zeichen eine Ziffer ist, und wenn nicht, das Ereignis abbrechen. Dies kann mit der Methode "IsDigit" der Klasse "Char" erfolgen.

Nachdem Sie ein benutzerdefiniertes Element erstellt haben, können Sie es dem Hauptfenster Ihrer Anwendung hinzufügen und es verwenden, um nur Zahlen einzugeben.

Option 3: Verwenden des PreviewTextInput-Ereignisses, um die Eingabe nur auf Zahlen einzuschränken

Eine weitere Möglichkeit, die Eingabe in ein Textfeld auf Zahlen in WPF zu beschränken, ist das PreviewTextInput-Ereignis. Jedes Mal, wenn Sie Text in das Textfeld eingeben, wird dieses Ereignis ausgelöst. Daher können wir dieses Ereignis verwenden, um jedes eingegebene Zeichen zu überprüfen und nur die Eingabe von Ziffern zuzulassen.

Zuerst müssen wir unserem Textfeld einen PreviewTextInput-Ereignishandler hinzufügen. Wir können dies im XAML-Code wie folgt tun:

  • Fügen Sie dem Textfeld ein PreviewTextInput-Attribut hinzu:
  • Fügen Sie im C-Code einen PreviewTextInput-Ereignishandler hinzu#:

private void TextBox_PreviewTextInput(object sender, TextCompositionEventArgs e)

// Überprüfen Sie, ob das eingegebene Zeichen eine Ziffer ist

if (!char.IsDigit(e.Text, e.Text.Length - 1))

e.Handled = true; // Abbrechen der Ereignisbehandlung und Sperren der Eingabe eines falschen Zeichens

In diesem Codebeispiel überprüfen wir, ob das aktuell eingegebene Zeichen eine Zahl ist, indem wir die IsDigit-Methode aus der char-Klasse verwenden. Wenn das Zeichen keine Ziffer ist, setzen wir die Handled-Eigenschaft des TextCompositionEventArgs-Objekts auf true. Dadurch wird die Verarbeitung des Ereignisses abgebrochen und die Eingabe eines falschen Zeichens blockiert.

Nachdem wir nun einen Ereignishandler hinzugefügt haben, erlaubt unser Textfeld nur die Eingabe von Zahlen und jeder andere Wert wird gesperrt. Dieser Ansatz ist flexibel und ermöglicht es uns, auf jedes eingegebene Zeichen zu reagieren und die Eingabe von genau den Werten zu steuern, die wir benötigen.

Option 4: verwenden regulärer Ausdrücke zum Validieren und Validieren von nur Ziffern Eingaben

Um eine Textbox nur für Zahlen in WPF zu erstellen, können Sie reguläre Ausdrücke verwenden, um die eingegebenen Werte zu validieren und zu validieren. Mit regulären Ausdrücken können Sie eine Vorlage für Text festlegen und prüfen, ob dieser Text mit einer Vorlage übereinstimmt.

Fügen Sie zunächst die Verarbeitung des Texteingabeereignisses zu unserer Textbox hinzu:

private void TextBox_TextChanged(object sender, TextChangedEventArgs e)

Innerhalb des Ereignishandlers verwenden wir einen regulären Ausdruck, um den Text zu überprüfen, und wenn der Text nicht mit dem Muster übereinstimmt, setzen wir den eingegebenen Text auf eine leere Zeichenfolge:

private void TextBox_TextChanged(object sender, TextChangedEventArgs e)

In diesem Beispiel ist der reguläre Ausdruck "^[0-9]*$" überprüft, ob der eingegebene Text nur aus Ziffern besteht. Das Zeichen ^ steht für den Anfang der Zeile, das Zeichen $ steht für das Ende der Zeile. Symbol [0-9] bedeutet, dass nur die Ziffern 0 bis 9 zulässig sind. Das Zeichen * zeigt an, dass die Ziffern Null oder mehr sein können.

Wenn der eingegebene Text nicht mit dem regulären Ausdruck übereinstimmt, setzen wir den eingegebenen Text auf eine leere Zeichenfolge, wodurch die Eingabe nicht numerischer Zeichen verhindert wird.

Wenn der Benutzer nun versucht, ein nicht numerisches Zeichen in die Textbox einzugeben, wird dieses Zeichen ignoriert und wird nicht im Anwendungsfenster angezeigt.

Die Verwendung von regulären Ausdrücken macht es daher einfach, nur Zahlen in einer Textbox in WPF zu implementieren. Diese Methode ist ebenfalls flexibel und kann verwendet werden, um andere Datentypen in einer textbox zu validieren, abhängig von der angegebenen Vorlage.

Option 5: Verwenden der MahApps-Bibliothek.Metro, um die Eingabe nur von Ziffern in der TextBox einzuschränken

Hier ist ein Beispiel für die Verwendung von MahApps.Metro, um die Eingabe nur von Ziffern in der TextBox einzuschränken:

  1. Installieren Sie das MahApps-Paket.Metro mit NuGet.
  2. Importieren Sie den MahApps-Namespace.Metro in Ihrem Code:

using MahApps.Metro.Controls;

Die MahApps-Bibliothek.Metro bietet viele andere Funktionen zum Anpassen des Aussehens und Verhaltens von Steuerelementen, sodass Sie die TextBox mit digitaler Eingabe an Ihre Bedürfnisse anpassen können.

Verwenden der MahApps-Bibliothek.Metro, um die Eingabe nur von Zahlen in eine TextBox einzuschränken, kann eine sehr praktische Lösung sein, insbesondere wenn Sie diese Bibliothek bereits in Ihrem WPF-Projekt verwenden.

Option 6: Verwenden des KeyPress-Ereignishandlers, um die Eingabe nur auf Zahlen einzuschränken

Wenn Sie die Eingabe von Zahlen in einer TextBox in WPF mit C# einschränken müssen, können Sie einen KeyPress-Ereignishandler anwenden. Das KeyPress-Ereignis tritt auf, wenn Sie eine Taste auf der Tastatur drücken.

Fügen Sie zunächst eine TextBox zum XAML-Markup Ihrer Anwendung hinzu:

Definieren Sie dann im C# -Code einen KeyPress-Ereignishandler:

private void numericTextBox_KeyPress(object sender, KeyPressEventArgs e)>

Fügen Sie diesen Ereignishandler der TextBox im C-Code hinzu#:

numericTextBox.KeyPress += numericTextBox_KeyPress;

Wenn Sie nun die Tasten drücken, prüft der KeyPress-Ereignishandler, ob es sich bei der gedrückten Taste um eine Ziffer handelt. Wenn die gedrückte Taste keine Ziffer ist und keine Rücktaste (Zeichenlöschtaste) ist, bricht der Ereignishandler die Verarbeitung des Ereignisses ab und das Zeichen wird nicht in die TextBox eingefügt.

Daher können Sie die Eingabe von Zahlen in die TextBox in Ihrer WPF-Anwendung einschränken, indem Sie den KeyPress-Ereignishandler verwenden.