WPF文本框不允许空格

4

我希望在文本框中只允许用户输入数字(0-9)。 我正在使用以下代码防止用户输入字母和其他字符,但无法防止用户在文本框中使用空格。

private void CheckIsNumeric(TextCompositionEventArgs e)
{
    int result;

    if (!(int.TryParse(e.Text, out result)))
    {
       e.Handled = true;
       MessageBox.Show("!!!no content!!!", "Error", 
                       MessageBoxButton.OK, MessageBoxImage.Exclamation);
    }
}

我已经尝试使用类似的方法

if (Keyboard.IsKeyDown(Key.Space))
{ //...}

但是并没有成功。

感谢您的帮助。


我也尝试过,它也允许空格。 - Morris
在重复的问题中,对于被接受的答案进行的评论解决并支持了这个问题:“[空格]不会触发PreviewTextInput事件”。你是从哪个事件中调用你的CheckIsNumeric方法的? - Cee McSharpface
1
哦,抱歉,我可能忽略了那个。 我正在使用PreviewTextInput事件,这可能是问题所在。 我通过textbox.Text.Replace(" ","")绕过了我的问题。所以现在所有的空格都被删除了,对我来说已经足够好了。 - Morris
如果您已将TextBox的Text属性绑定到视图模型中的属性,则可以让该属性的setter执行以下操作:set { _foo = value.Replace(" ", ""); } - Iain Holder
我不知道为什么这个问题被关闭为重复。它与引用的问题有关,但非常具体,应该被保留。 - Iain Holder
2个回答

0

在检查之前,请检查空格是否分开,或者只是纠正空格。这样用户就可以随心所欲地添加空格而不会改变任何内容。

private void CheckIsNumeric(TextCompositionEventArgs e)
{
    int result;
  string removedSpaces =  e.Text.Replace(" ","");
    if (!(int.TryParse(removedSpaces, out result)))
    {
       e.Handled = true;
       MessageBox.Show("!!!no content!!!", "Error", 
                       MessageBoxButton.OK, MessageBoxImage.Exclamation);
    }
}

1
感谢您的回答,但这并没有改变任何事情。正如我所听说的,PreviewTextInput事件无法响应空格,因此我需要采取完全不同的方法。 - Morris
我们唯一可以限制的方式是使用KeyDown事件 e.Handled=e.Key==Key.Space. - Sunny

0
注册KeyPress事件到您的文本框中并添加以下代码。
private void textBox_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar != '.'))
    {
        e.Handled = true;
    }

    // If you want to allow decimal numeric value in you textBox then add this too 
    if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1))
    {
        e.Handled = true;
    }
}

1
WPF的TextBox没有KeyPress方法... - PeterPazmandi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接