Windows 8 - 只接受数字的TextBox出错

时间:2012-12-02 19:51:53

标签: windows-8 textbox numbers

这是我用C#用Key Down事件处理程序

编写的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 个答案:

答案 0 :(得分:1)

您可以使用Char.IsDigit

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

但是在复制\粘贴的情况下,这对你没有多大帮助。

同时检查右侧的相关问题。例如Create WPF TextBox that accepts only numbers


更新

仅限信件尝试

e.Handled = Char.IsLetter(c);

答案 1 :(得分: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;
        }

尝试教你的用户美元符号现在是一个数字,这绝不是理想的,但更好!

答案 2 :(得分:0)

试试这段代码。但有时你会看到你按下的字符,它会被立即删除。不是最好的解决方案,但足够

private void TextBox_OnTextChanged(object sender, TextChangedEventArgs e)
{
    var textBox = sender as TextBox;
    if (textBox == null)
        return;

    if (textBox.Text.Length == 0) return;

    var text = textBox.Text;

    int result;
    var isValid = int.TryParse(text, out result);
    if (isValid) return;


    var selectionStart = textBox.SelectionStart;
    var resultString = new string(text.Where(char.IsDigit).ToArray());
    var lengthDiff = textBox.Text.Length - resultString.Length;

    textBox.Text = resultString;
    textBox.SelectionStart = selectionStart - lengthDiff;
}

答案 3 :(得分: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(".");
    }