Windows 8 - TextBox只接受数字的文本框出现问题

16 浏览
0 Comments

Windows 8 - TextBox只接受数字的文本框出现问题

这是我用C#编写的TextBox,具有KeyDown事件处理程序。

在这个事件处理程序中,我只接受数字。我通过将按键转换为字符来判断输入的字符是否为数字。如果输入的字符不是0到9之间的数字,则将e.Handled属性设置为true,以阻止输入。

这段代码确实可以阻止从a到z的字母输入。然而,如果我输入像!@#$%^&*()_+这样的符号,它仍然会接受它们。我错过了什么?

0
0 Comments

问题的原因是代码中的逻辑错误,导致在输入非数字字符时会立即删除该字符。解决方法是在判断输入是否为数字之后,重新设置文本框的内容和光标位置。

具体解决方法如下:

1. 在文本框的TextChanged事件处理方法中,添加以下代码:

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;
}

通过以上代码,可以实现在文本框中只接受数字输入的功能,并且能够正确处理输入非数字字符的情况。

0
0 Comments

在Windows 8中,有一个问题是文本框只能接受数字,但是在按下键或松开键的事件处理中,没有一种可靠的方法来处理这个问题,因为奇怪的是,shift 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;
}

这种方法并不完美,但比教用户美元符号现在是一个数字要好。

0
0 Comments

问题的原因是在Windows 8中,使用Char.IsDigit的方法可以限制TextBox只接受数字输入,但是在复制粘贴时无法起作用。此外,在网站的相关问题中还提到了如何创建一个仅接受数字输入的WPF TextBox。

解决方法是使用Char.IsDigit方法限制只接受数字输入,并在复制粘贴时进行处理。另外,还可以使用Char.IsLetter方法限制只接受字母输入,但是这种方法会忽略数字键盘的输入。

以下是解决问题的代码示例:

// 限制只接受数字输入
e.Handled = !Char.IsDigit(c);
// 限制只接受字母输入
e.Handled = Char.IsLetter(c);

希望以上内容对解决Windows 8中TextBox只接受数字输入的问题有所帮助。

0