C# 格式化文本框以仅接受数字、空格和加号

C# 格式化文本框以仅接受数字、空格和加号,c#,.net,winforms,C#,.net,Winforms,我正在尝试创建一个只接受数字、空格和加号的文本框 目前我在文本框的KeyPressEvent中做过类似的事情 if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar) &&!char.IsWhiteSpace(e.KeyChar)) { e.Handled = true; } 我也想接受+符号 更新 我确实处理了!char.IsSymbol(e.KeyCh

我正在尝试创建一个只接受数字、空格和加号的
文本框

目前我在
文本框的
KeyPressEvent
中做过类似的事情

if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar) &&!char.IsWhiteSpace(e.KeyChar))
    {
                e.Handled = true;
    }
我也想接受
+
符号

更新

我确实处理了
!char.IsSymbol(e.KeyChar)
但它将接受
=
符号以及
+

任何帮助


谢谢

严格来说,您可以附加

     && !e.KeyChar == '+' 

根据您的标准,它应该在键盘输入方面起作用,但如果目标是只允许数字输入,.net控件库还包含一个数字上下控件,可以实现这一功能。

严格来说,您可以附加

     && !e.KeyChar == '+' 
根据您的标准,它应该在键盘输入方面起作用,但如果目标是只允许数字输入,.net控件库还包含一个数字上下控件,可以实现此功能。

对于“输入期间”控件和验证控件,您可以这样做

但是你的文本框中有很多东西(1+++++2 34+),这并不意味着很多

textBox.KeyDown += (sender, e) =>
                               {
                                   if (!(
                                       //"+
                                       e.KeyCode == Keys.Add || 
                                       //numeric
                                       (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9) || 
                                       //space
                                       e.KeyCode == Keys.Space))
                                   {
                                       e.Handled = true;
                                   }
                               };
textBox.Validating += (sender, eventArgs) =>
                                  {
                                      var regex = new Regex(@"[^0-9\+ ]+");
                                      textBox.Text = regex.Replace(textBox.Text, string.Empty);
                                  };
textBox.KeyDown+=(发件人,e)=>
{
如果((
//"+
e、 KeyCode==键。添加| |
//数字的
(e.KeyCode>=Keys.NumPad0和&e.KeyCode
{
var regex=新的regex(@“[^0-9\+]+”);
textBox.Text=regex.Replace(textBox.Text,string.Empty);
};
对于“输入期间”控件和验证控件,您可以这样做

但是你的文本框中有很多东西(1+++++2 34+),这并不意味着很多

textBox.KeyDown += (sender, e) =>
                               {
                                   if (!(
                                       //"+
                                       e.KeyCode == Keys.Add || 
                                       //numeric
                                       (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9) || 
                                       //space
                                       e.KeyCode == Keys.Space))
                                   {
                                       e.Handled = true;
                                   }
                               };
textBox.Validating += (sender, eventArgs) =>
                                  {
                                      var regex = new Regex(@"[^0-9\+ ]+");
                                      textBox.Text = regex.Replace(textBox.Text, string.Empty);
                                  };
textBox.KeyDown+=(发件人,e)=>
{
如果((
//"+
e、 KeyCode==键。添加| |
//数字的
(e.KeyCode>=Keys.NumPad0和&e.KeyCode
{
var regex=新的regex(@“[^0-9\+]+”);
textBox.Text=regex.Replace(textBox.Text,string.Empty);
};
已添加

var reg=new Regex(@“^\+?(\d[\d-.]+)?(\([\d-.]+\)?[\d-.]+\d$”);

添加了正则表达式

var reg=new Regex(@“^\+?(\d[\d-.]+)?(\([\d-.]+\)?[\d-.]+\d$”);


作为正则表达式,这对我来说很好:

if (!(char.IsLetter(e.KeyChar) && (!char.IsControl(e.KeyChar) 
    && !char.IsDigit(e.KeyChar) && !(e.KeyChar == '.'))
{
    e.Handled = true;
}

我添加了char.IsControl,因为它允许您在类型错误情况下使用退格。

这对我来说很好:

if (!(char.IsLetter(e.KeyChar) && (!char.IsControl(e.KeyChar) 
    && !char.IsDigit(e.KeyChar) && !(e.KeyChar == '.'))
{
    e.Handled = true;
}

我添加了CAR.ISCONTROL,因为它允许您在Type错误情况下使用退格。

在什么面向最终用户的技术中?Win Frase:html?如果有人试图从剪贴板粘贴?您应该考虑使用验证事件。OARD?你应该考虑使用验证事件。查阅NavigiUpDead不允许+或空白。真的,我在回复中看到目标是一个电话号码。MaskDeTrbox可以做到这一点,但它会限制格式,所以我认为这也不够。电话号码?他说空白和+我希望人们WO。我会问他们真正想要回答的问题…Numericupdown不允许+或空格。是的,我在回答中读到目标是电话号码。maskedtextbox可以做到这一点,但它会限制格式,所以我认为这也不够。电话号码?他说是空格+我希望人们能问这个问题他们真的想要回答的问题…谢谢你的回答,实际上我正在尝试使这个文本框接受电话号码,然后在验证事件中生成一个“true”正则表达式,不应该太难谢谢你的回答,实际上我正在尝试使这个文本框接受电话号码,然后生成一个“true”验证事件中的正则表达式不应该太难