如何在C# winform中使TEXTBOX只能输入数字,并支持Ctrl+V粘贴?

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == '\r' || (e.KeyChar >= '0' && e.KeyChar <= '9') || e.KeyChar == 8 || e.KeyChar == 46 || e.KeyChar == 0x08)
{
e.Handled = false;
}
else
{
e.Handled = true;
MessageBox.Show("不能输入中文状态下的数字,解决方法:把输入法关了,重新输入数字。");
return;
}
}

上面的能限制只输入数字,但是不支持Ctrl+V粘贴,请问如何解决。

其实你用不着这么麻烦的。

同样是输入框,作用仅仅是采集数据而已。

 

MaskedTextBox 控件能非常方便地控制可输入的字符格式。

根据你上面的需求,用 MaskedTextBox控件代替TextBox控件。

1.设置Mask属性为999999999999 (代表只能输入数字,且位数为12。你有多少个9就代表能输入多少个数字,随便你设置)

 

2.设置 PromptChar 属性的值为空字符,即一个空格(注意:如果不设置默认为下划线,会影响美观)。也可以编码实现,如下:

 

// 设置占位符

this.maskedTextBox1.PromptChar = ' '; 

 

 

做完以上操作,你的需求就算满足了。

只能输入数字,且可以粘贴(只有数字才粘得进去,自动过滤)

 

 

 

图中红框中的控件就是 MaskedTextBox ,其余两个输入框是TextBox。从外观上看,没有任何区别。

追问

我只用TextBox这个。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-12-15
keypress 不支持组合键,你的Ctrl+V是组合键。把代码放到keydown或keyup里面,并允许ctrl+v组合键通过。追问

那怎么修改,你帮我看看。

追答

以下代码可以实现你需要的功能,但如果粘贴板中的内容含有字母,那么粘贴时并不能拦截,只能拦截键盘输入的非数字。
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (!(Char.IsNumber((char)e.KeyValue)) && e.KeyValue != 13 && e.KeyValue != (char)8 && !(e.KeyCode==Keys.V && e.Control ))
{
e.SuppressKeyPress =true ;
}
}
---------------------------------------------------------------------------------------------------------------------------
C#没有可以直接读取剪贴板内容的函数或类,如果要读取,必须再继续编写很多代码,如果你感兴趣,可以查阅相关资料。

追问

try {
float aa = float.Parse(textBox1.Text);
textBox2.Focus();
}
catch
{
MessageBox.Show("旧编码不能是中文数字,请切换到英文状态下的数字或关闭输入法再输入。");
textBox1.Text = "";
textBox1.Focus();
}你那还是不行,我这样写就可以解决了。但是还是谢谢你。

追答

呵呵,解决就好。不过这个代码我试验过的,是可以的。你这种方法也很好,我原来也像你那样用。两者的目的一样,实现手段不一样,一个是输入的时候拦截,一个是输入完验证。

本回答被提问者和网友采纳
第2个回答  2013-03-17
很简单,因为你弄错了一个函数,你用val(text1.text)<10的本意可能是想检测小于10位的录入数字吧,但是用错了,因为你随便录入到第二个数字时就可能已经>10了,所以下面的语句不会生效了,TEXT1里也就没有数字显示,你要改用LEN来检测长度就行。正确的语句是:
Dim cleardisplay As Boolean

Private Sub Command1_Click(Index As Integer)
If cleardisplay Then
Text1.Text = ""
clesrdisplay = False
End If

If Len(Text1.Text) < 10 Then
Text1.Text = Text1.Text + Command1(Index).Caption
End If
End Sub
还不错,希望你采纳。
第3个回答  2013-03-16
用正则匹配,选择控件的匹配属性可以设置

如何在C# winform中使TEXTBOX只能输入数字,并支持Ctrl+V粘贴?
1.设置Mask属性为999999999999 (代表只能输入数字,且位数为12。你有多少个9就代表能输入多少个数字,随便你设置)2.设置 PromptChar 属性的值为空字符,即一个空格(注意:如果不设置默认为下划线,会影响美观)。也可以编码实现,如下:\/\/ 设置占位符 this.maskedTextBox1.PromptChar = ' ';做完以...

C#如何限制Textbox文本框只能输入数字
选择文本框的事件窗口,找到按键输入的方法KeyPress,双击建立新的方法。在按键方法中添加文本框只能输入数字的代码。新增日志输出方法output,可以将过程日志进行输出。生成exe文件进行测试。在文本框中输入数字【138】,可正常输入,在日志中也提示输入成功。在文本框中输入数字【abc】等字母,无法输入,日志...

C#winform中Textbox.text中让输入的信息只能是数字
简单的说用一个异常捕获就可以了。比如文本框名为txtnumber;用一个int类型的变量去接受文本框中的值 try { int number = int.Parse(txtnumber.Text);\/\/如果不能被转换,将引发异常。} catch (Exception ex){ \/\/MessageBox.Show(ex.Message);MessageBox.Show("请输入数字");\/\/这样别人看得懂些 ...

C#中如何限制Textbox控件中只能输入数字,要能用退格的
在Winform(C#)中要实现限制Textbox只能输入数字,一般的做法就是在按键事件中处理,判断keychar的值。限制只能输入数字,小数点,Backspace,del这几个键。数字0~9所对应的keychar为48~57,小数点是46,Backspace是8。拖一个Textbox到窗体上,添加OnKeyPress事件,在事件写判断的代码,只要判断不是这些...

C#如何让textbox里只能输入数字
找到要限制的textbox按F4找到属性栏,然后找到属性栏最上面,有个闪电的图标, 那就是事件,点击,找到KeyPress双击,或的自己注册事件:this.textBox1.KeyPress += new KeyPressEventHandler(this.textBox1_KeyPress);委托函数:if (!(e.KeyChar >= '0' && e.KeyChar <= '9' || e.Key...

c#中如何控制文本框中输入字符的范围
在定制的TextBox控件中,如果只允许输入数字,需要考虑如下三种情况:正常按键输入的字符,包括西文、中文字符等 通过键盘快捷键方式贴入的文本,即Ctrl+V操作 通过上下文关联菜单的Mouse操作贴入的文本,即”粘贴“操作 在探讨的同类文章中,多数只考虑了第1种情况,忽略得了第2、3种常见的操作。本文探讨...

C#中如何限制textbox只能输入英文和数字
Regex.IsMatch(pattern1,textbox1.text) || !Regex.IsMatch(pattern2,textbox1.text)) { MessageBox.Show("只能输入英文或者数字");return; }

C#的winform中如何控制TextBox中只能输入数字,包括0
Regex(@"^[-]?[1-9]{1}\\d*$|^[0]{1}$");bool ismatch=reg1.IsMatch(str);if(!ismatch)MessageBox.Show("您输入的数字不是整数!", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);return ismatch;} 注意,这里调用了MessageBox对象,必须在引用时引用Windows.form ...

c# 如何让textbox只能输入小数(只能两位)
\/\/只能输入2位,将ponit设为3将只能输入3位 var ponit= 2 ;if(testValue.value.substring(testValue.value.indexOf(".")+1,testValue.value.length).length>=ponit){ testValue.value = ForDight( parseFloat(testValue.value),ponit);} } \/\/数字只能在0-1直接 if( parseFloat(testValue.value...

c#里面使textbox里面只能输入数字,或者小数点的代码
只能输入数字符号什么的实现起来是不可能的,只能通过对他输入的数字判断是不是数字 try { int no1= int.parse(textbox1.text);\/\/float f=float.parse(textbox2.text);} catch (Exception){ .MessageBox.Show("请输入合法数字");} + - * \/ 建议你用下拉列表 ...

相似回答