日期:2014-05-19  浏览次数:20698 次

关于KeyPress事件的一个问题
我的目的是只允许在文本框中输入数字和退格键并且输入长度超过了18位就不能再输入。请看我的源代码:
private   void   txtCardNO_KeyPress(object   sender,   System.Windows.Forms.KeyPressEventArgs   e)
{
int   iKeyAscii;
iKeyAscii   =   (int)e.KeyChar;
if(iKeyAscii   <   49   ||   iKeyAscii   >   57   ||   txtCardNO.Text.Trim().Length   >   18)
{
e.Handled   =   true;
}
if(iKeyAscii   ==   8)
{
e.Handled   =   false;
}
}
上面的代码我在.NET2003当中编写,当我关闭中文输入法的时候可以屏蔽掉除了数字和退格键以外的其它键。但是当我打开中文输入法(是微软拼音输入法)时就无法屏蔽掉这些字符了。怎么办?
我逐行调试时发现即时打开中文输入法当输入了字母的字符时也会执行e.Handled=true这句话。但是还是可以输入字母。该怎么解决阿?实在着急着急,谢谢大虾了阿。我会在线等。问题解决马上给分。

------解决方案--------------------
长度通过设置MaxLength属性来实现,不在程序里写
输入法的问题,可以通过设置ImeMode属性为Disable来解决

但是这样做效果并不好,无法解决粘贴问题
限制输入数字的一些方法,参考一下这个帖子吧
http://community.csdn.net/Expert/topic/5386/5386616.xml?temp=.4437525
------解决方案--------------------
试试
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (!char.IsDigit(e.KeyChar) && e.KeyChar != 8)//如果输入的不是数字也不是退格键
{
e.Handled = true;
}
}