我希望接受数字和小数点,但没有符号。
我已经看过使用Windows窗体中的NumericUpDown控件的示例,以及来自微软的这个NumericUpDown自定义控件的示例。但到目前为止,似乎NumericUpDown (WPF是否支持)不会提供我想要的功能。我的应用程序是这样设计的,任何头脑正常的人都不会想弄乱箭头。在我的应用程序中,它们没有任何实际意义。
所以我正在寻找一个简单的方法,使一个标准的WPF文本框只接受我想要的字符。这可能吗?实用吗?
我希望接受数字和小数点,但没有符号。
我已经看过使用Windows窗体中的NumericUpDown控件的示例,以及来自微软的这个NumericUpDown自定义控件的示例。但到目前为止,似乎NumericUpDown (WPF是否支持)不会提供我想要的功能。我的应用程序是这样设计的,任何头脑正常的人都不会想弄乱箭头。在我的应用程序中,它们没有任何实际意义。
所以我正在寻找一个简单的方法,使一个标准的WPF文本框只接受我想要的字符。这可能吗?实用吗?
当前回答
如果你不想写很多代码来做一个基本的函数(我不知道为什么人们要写很长的方法),你可以这样做:
添加命名空间: 使用包含; 在XAML中,设置TextChanged属性: <TextBox x:Name="txt1" TextChanged="txt1_TextChanged"/> 在WPF的txt1_TextChanged方法下,添加Regex。替换: private void txt1_TextChanged(对象发送者,TextChangedEventArgs e) { txt1。Text = Regex.Replace(txt1. replace)Text, "[^0-9]+", ""); }
其他回答
添加一个验证规则,以便在文本更改时检查数据是否是数字,如果是,则允许继续处理,如果不是,则提示用户该字段中只接受数字数据。
请参阅Windows演示基础中的验证
e.Handled = (int)e.Key >= 43 || (int)e.Key <= 34;
在预览文本框的按键事件。
如果你不想写很多代码来做一个基本的函数(我不知道为什么人们要写很长的方法),你可以这样做:
添加命名空间: 使用包含; 在XAML中,设置TextChanged属性: <TextBox x:Name="txt1" TextChanged="txt1_TextChanged"/> 在WPF的txt1_TextChanged方法下,添加Regex。替换: private void txt1_TextChanged(对象发送者,TextChangedEventArgs e) { txt1。Text = Regex.Replace(txt1. replace)Text, "[^0-9]+", ""); }
对于希望文本字段只接受无符号数字(如套接字端口等)的开发人员:
WPF
<TextBox PreviewTextInput="Port_PreviewTextInput" MaxLines="1"/>
C#
private void Port_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
e.Handled = !int.TryParse(e.Text, out int x);
}
对于那些寻找一个快速和非常简单的实现这种类型的问题,只使用整数和小数,在你的XAML文件,添加一个PreviewTextInput属性到你的textbox,然后在你的XAML .cs文件使用:
private void Text_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
e.Handled = !char.IsDigit(e.Text.Last()) && !e.Text.Last() == '.';
}
每次都检查整个字符串有点多余,除非像其他人提到的那样,你正在使用科学符号(尽管,如果你添加某些字符,如'e',一个添加符号/字符的简单正则表达式非常简单,并在其他答案中说明)。但是对于简单的浮点值,这个解决方案就足够了。
编写为带有lambda表达式的一行代码:
private void Text_PreviewTextInput(object sender, TextCompositionEventArgs e) => e.Handled = !char.IsDigit(e.Text.Last() && !e.Text.Last() == '.');