我用C#写了一个Wince智能设备程序 让TextBox只能输入数字 代码如下:
privatevoidtextBox1_KeyPress(objectsender,KeyPressEventArgse){if((e.KeyChar<48||e.Key...
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if ((e.KeyChar < 48 || e.KeyChar > 57) && e.KeyChar != 8)
e.Handled = true;
}
问题来了 下断点调试时(分别在大括号开头和e.Handled下断点) 用虚拟键盘输入数字字母都不进函数 但是退格键是进函数的
并且我在KeyDown里面检测并监视KeyValue值 数字和字母键值总是 229 求解
上下左右各种符号也能检测到,就是字母数字不行、、、但是输入框输入什么字母就显示什么字母输入什么数字就显示什么数字 输入符号程序进e.Handled,会忽略 .. 展开
{
if ((e.KeyChar < 48 || e.KeyChar > 57) && e.KeyChar != 8)
e.Handled = true;
}
问题来了 下断点调试时(分别在大括号开头和e.Handled下断点) 用虚拟键盘输入数字字母都不进函数 但是退格键是进函数的
并且我在KeyDown里面检测并监视KeyValue值 数字和字母键值总是 229 求解
上下左右各种符号也能检测到,就是字母数字不行、、、但是输入框输入什么字母就显示什么字母输入什么数字就显示什么数字 输入符号程序进e.Handled,会忽略 .. 展开
展开全部
使用键盘输入的char值来判断是一种控制输入的做法,但是对于目前的软件开发来说,并不是最好的。
我之前也做过类似的ce和mobil设备开发,使用 keychar几个问题,
一、是虚拟键盘,(就是你碰到的这个问题),虚拟键盘输入的char和实体键盘输入的char值并不完全对应, 而且不同的机器输入同一个数字的char值都不一样,这个可能是系统二次开发导致的,
二、扫描识别码(条形码、二维码),如果一个文本框既要允许用户手动输入,又要兼容扫描,那么这个文本框判断同样不能用keychar,因为扫描二维码的时候,keychar也是会完全乱掉,(我做过的大部分国内手持机都这样)。
三、用户复制了一个值进去,keychar肯定不对。
所以更好的做法是控制textbox的TextChange事件,每当文本框内的文本变化,使用
int.TryParse(Textbox1.Text,out result) 来判断文本是否为数字类型(int32),这样是最准确的,并且兼容了大多数录入方式。
当然也有更好的方法,比如重写控件,使用钩子等等,就比较复杂了。
我之前也做过类似的ce和mobil设备开发,使用 keychar几个问题,
一、是虚拟键盘,(就是你碰到的这个问题),虚拟键盘输入的char和实体键盘输入的char值并不完全对应, 而且不同的机器输入同一个数字的char值都不一样,这个可能是系统二次开发导致的,
二、扫描识别码(条形码、二维码),如果一个文本框既要允许用户手动输入,又要兼容扫描,那么这个文本框判断同样不能用keychar,因为扫描二维码的时候,keychar也是会完全乱掉,(我做过的大部分国内手持机都这样)。
三、用户复制了一个值进去,keychar肯定不对。
所以更好的做法是控制textbox的TextChange事件,每当文本框内的文本变化,使用
int.TryParse(Textbox1.Text,out result) 来判断文本是否为数字类型(int32),这样是最准确的,并且兼容了大多数录入方式。
当然也有更好的方法,比如重写控件,使用钩子等等,就比较复杂了。
追问
没有TryParse 只有Parse 输入字母报应用程序错误 怎么解决
追答
你的ce版本有点低,,
使用try来判断
try{
int result = int.Parse(textbox.Text);
}
catch{
Messagebox.Show("请输入数字");
return;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询