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这个。
那怎么修改,你帮我看看。
追答以下代码可以实现你需要的功能,但如果粘贴板中的内容含有字母,那么粘贴时并不能拦截,只能拦截键盘输入的非数字。
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();
}你那还是不行,我这样写就可以解决了。但是还是谢谢你。
呵呵,解决就好。不过这个代码我试验过的,是可以的。你这种方法也很好,我原来也像你那样用。两者的目的一样,实现手段不一样,一个是输入的时候拦截,一个是输入完验证。
本回答被提问者和网友采纳