Při vývoji softwaru je často nutné omezit vstup uživatele na určitá pole textových formulářů pouze na čísla. Může to být pole pro zadání telefonního čísla nebo pole pro zadání věku. V C# a při použití technologie WPF existuje několik způsobů, jak implementovat toto omezení.
Jedním z nejjednodušších způsobů je použití pravidelných výrazů. C# má třídy pro práci s pravidelnými výrazy, jako je Regex. Můžeme použít tuto třídu k ověření zadaných znaků a povolit pouze čísla. K tomu budeme potřebovat obslužnou rutinu události změny textu v textovém poli, která zkontroluje každý znak a v případě potřeby odstraní neplatné znaky.
Dalším způsobem je použití událostí psaní textu. Když uživatel stiskne klávesy na klávesnici, objeví se určité události, jako je KeyDown nebo PreviewKeyDown. Můžeme napsat zpracovatel události a v něm zkontrolovat, zda je zadaný symbol číslicí. V případě, že symbol není číslice, jednoduše Zrušíme provedení události, to znamená, že symbol nebude přidán do textového pole.
Možnost 1: použití třídy TextBox s omezením na zadávání pouze číslic
Níže uvedený příklad umožňuje zadat pouze čísla do Textboxu:
using System;using System.Windows;using System.Windows.Controls;using System.Windows.Input;namespace NumericTextBoxExampleprivate void NumericTextBox_PreviewTextInput(object sender, TextCompositionEventArgs e)>>>
V tomto příkladu je vytvořena vlastní třída NumericTextBox, která se dědí ze základní třídy TextBox. V nástroji Class se přihlásí k události PreviewTextInput, ke které dochází před zadáním textu do Textboxu.
Zpracovatel události zkontroluje, zda je zadaný symbol číslicí. Pokud symbol není číslice, pak je vlastnost Handled u argumentu události nastavena na hodnotu true. To způsobí, že se v Textboxu nezobrazí neplatný symbol.
Chcete-li použít tuto třídu v XAML, stačí přidat jmenný prostor a použít náš vlastní ovládací prvek:
V tomto příkladu se NumericTextBox používá jako ovládací prvek uvnitř prvku Grid. Udává šířku a výšku, ale to může být přizpůsobeno vašim potřebám.
Nyní můžete použít tento vlastní TextBox k omezení vstupu Vašich uživatelů pouze na čísla. To zajistí přesnější a spolehlivější zadávání číselných hodnot ve vaší aplikaci založené na WPF.
Možnost 2: Vytvoření vlastního uživatelského prvku pro zadávání pouze číslic
Pokud chcete v aplikaci WPF zadávat pouze čísla do textového pole, můžete pro tento účel vytvořit vlastní ovládací prvek (User Control).
Chcete-li začít, vytvořte ve Visual Studiu nový projekt WPF a přidejte nový ovládací prvek, který bude představovat vlastní TextBox.
V XAML označení vlastní položky identifikujte TextBox s vazbou na vlastnost s názvem " TextValue "a nastavte vlastnost" PreviewTextInput " pro zpracování textových událostí.
V kódu vlastní položky určete vlastnost závislosti "TextValue" pro uložení zadané hodnoty a způsob zpracování zadaných znaků.
Metoda zpracování zadaných znaků by měla zkontrolovat, zda je symbol číslicí, a pokud ne, zrušit událost. To lze provést pomocí metody" IsDigit "třídy " Char".
Po vytvoření vlastní položky ji můžete přidat do hlavního okna aplikace a použít ji k zadání pouze číslic.
Možnost 3: Použití události PreviewTextInput k omezení zadávání pouze číslic
Dalším způsobem, jak omezit vstup do textového pole pouze na čísla ve WPF, je událost PreviewTextInput. Tato událost se generuje při každém vstupu textu do textového pole. Můžeme tedy tuto událost použít k ověření každého zadaného symbolu a povolit pouze zadávání číslic.
Pro začátek musíme do našeho textového pole Přidat obslužnou rutinu události PreviewTextInput. Můžeme to udělat v kódu XAML následovně:
- Přidejte atribut PreviewTextInput do textového pole:
- Přidejte obslužnou rutinu události PreviewTextInput do kódu C#:
private void TextBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
// Zkontrolujte, zda je zadaný symbol číslicí
if (!char.IsDigit(e.Text, e.Text.Length - 1))
e. Handled = true; / / zrušení zpracování události a blokování vstupu nesprávného symbolu
V tomto příkladu kódu zkontrolujeme, zda je aktuální zadaný znak číslicí pomocí metody IsDigit ze třídy char. Pokud symbol není číslice, nastavíme vlastnost Handled objektu TextCompositionEventArgs na true. Tím se zruší zpracování události a zablokuje se vstup jakéhokoli nesprávného symbolu.
Nyní, když jsme přidali obslužnou rutinu události, naše textové pole umožní pouze zadávání číslic a jakákoli jiná hodnota bude blokována. Tento přístup je flexibilní a umožňuje nám reagovat na každý zadaný znak a kontrolovat vstup pouze hodnot, které potřebujeme.
Varianta 4: použití regulárních výrazů k ověření a validaci zadávání pouze číslic
Chcete-li vytvořit textbox pouze pro čísla v WPF, můžete použít regulární výrazy ke kontrole a validaci zadaných hodnot. Regulární výrazy vám umožňují nastavit šablonu pro text a zkontrolovat, zda tento text odpovídá šabloně.
Pro začátek přidáme zpracování události zadávání textu do našeho textboxu:
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)/ Валидация вводимого текста>
V rámci obslužné rutiny události použijeme k ověření textu regulární výraz, a pokud text neodpovídá šabloně, nastavíme zadaný text do prázdného řádku:
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)/ Проверка только для цифрstring pattern = "^[0-9]*$";Regex regex = new Regex(pattern);TextBox textBox = (TextBox)sender;if (!regex.IsMatch(textBox.Text))>
V tomto příkladu je regulární výraz" ^[0-9]* $ "kontroluje, že zadaný text se skládá pouze z číslic. Symbol ^ označuje začátek řádku, symbol $ je konec řádku. Znak [0-9] to znamená, že jsou povolena pouze čísla od 0 do 9. Znak * označuje, že číslice mohou být nula nebo více.
Pokud zadaný text neodpovídá regulárnímu výrazu, nastavíme zadaný text do prázdného řádku, čímž zakážeme zadávání nedigitálních znaků.
Nyní, když se uživatel pokusí zadat nedigitální znak do textboxu, bude tento symbol ignorován a nezobrazí se v okně aplikace.
Použití regulárních výrazů tedy usnadňuje implementaci pouze číslic do textboxu ve WPF. Tato metoda je také flexibilní a lze ji použít k validaci jiných typů dat v textboxu v závislosti na dané šabloně.
Možnost 5: použití knihovny MahApps.Metro pro omezení zadávání pouze číslic do Textboxu
Zde je příklad použití MahApps.Metro pro omezení zadávání pouze číslic do Textboxu:
- Nainstalujte balíček MahApps.Metro s nugetem.
- Importujte jmenný prostor MahApps.Metro ve vašem kódu:
using MahApps.Metro.Controls;
Knihovna MahApps.Metro poskytuje mnoho dalších funkcí pro přizpůsobení vzhledu a chování ovládacích prvků, takže můžete nastavit TextBox s digitálním vstupem podle vašich potřeb.
Využití knihovny MahApps.Metro pro omezení zadávání pouze číslic do Textboxu může být velmi pohodlným řešením, zvláště pokud již tuto knihovnu používáte ve svém projektu WPF.
Možnost 6: použití obslužného programu události KeyPress k omezení zadávání pouze číslic
Pokud potřebujete omezit zadávání pouze číslic do Textboxu na WPF pomocí C#, můžete použít obslužnou rutinu události KeyPress. Událost KeyPress nastane, když stisknete klávesu na klávesnici.
Chcete-li začít, přidejte TextBox do XAML značení vaší aplikace:
Poté v kódu C# identifikujte obslužnou rutinu události KeyPress:
private void numericTextBox_KeyPress(object sender, KeyPressEventArgs e)>
Přidejte tuto obslužnou rutinu události do Textboxu v kódu C#:
numericTextBox.KeyPress += numericTextBox_KeyPress;
Nyní, když stisknete klávesy, obsluha události KeyPress zkontroluje, zda je stisknutím klávesy číslice. Pokud stisknutí klávesy není číslice a není klávesou Backspace (klávesa pro odstranění symbolu), zpracovatel události zruší zpracování události a symbol nebude vložen do Textboxu.
Tímto způsobem můžete omezit zadávání pouze číslic do Textboxu ve své aplikaci WPF pomocí obslužné rutiny události KeyPress.