1

これは、Key Down イベント ハンドラーを使用して C# で記述された TextBox です。

private void TextBox_KeyDown(object sender, Windows.UI.Xaml.Input.KeyRoutedEventArgs e)
{
        //ONLY ACCEPTS NUMBERS
        char c = Convert.ToChar(e.Key);
        if (!c.Equals('0') && !c.Equals('1') && !c.Equals('2') && !c.Equals('3') && !c.Equals('4') &&
            !c.Equals('5') && !c.Equals('6') && !c.Equals('7') && !c.Equals('8') && !c.Equals('9'))
        {
            e.Handled = true;
        }
}

a から z までの文字を防止します。ただし、!@#$%^&*()_+ のような記号を入力すると、それでも受け入れられます。私は何が欠けていますか?

4

4 に答える 4

1

Char.IsDigitを使用できます

e. Handled = !Char.IsDigit(c);

ただし、これはコピー/貼り付けの場合にはあまり役に立ちません。

右側の関連する質問も確認してください。たとえば、数値のみを受け入れる WPF TextBox を作成します。


アップデート

文字のみの場合

e.Handled = Char.IsLetter(c);
于 2012-12-02T20:02:53.427 に答える
0

キーダウンまたはキーアップイベントでこれを処理する信頼できる方法はありません。これは、何らかの奇妙な理由で $ 記号であるシフト 4 がキー値ではなく 4 を返すためです。

最善の回避策は、使用される前に値を取得し、それが数値であることを確認してから、ユーザーに警告することです。

var IsNumeric = new System.Text.RegularExpressions.Regex("^[0-9]*$");
        if (!IsNumeric.IsMatch(edtPort.Text))
        {
            showMessage("Port number must be number", "Input Error");
            return;
        }

決して理想的ではありませんが、ドル記号が数字であることをユーザーに教えようとする方が良いでしょう!

于 2014-05-17T18:28:12.097 に答える
0

これは役立つかもしれません、これは私が使用したものです。

    private void txtBoxBA_KeyDown(object sender, KeyRoutedEventArgs e)
    {
        // only allow 0-9 and "."
        e.Handled = !((e.Key.GetHashCode() >= 48 && e.Key.GetHashCode() <= 57));

        // check if "." is already there in box.
        if (e.Key.GetHashCode() == 190)
            e.Handled = (sender as TextBox).Text.Contains(".");
    }
于 2016-06-20T17:18:44.077 に答える