使用WM_CHAR消息来限制用户的输入

在做管理系统的时候,经常要限制用户的输入,如,只可以输入数字,等等

net 下限制用户输入,很多人是在键盘,或 textBox 的 TextChanged 事件里
这样做
1.不能限制用户的粘贴
2.严重干扰数据绑定等操作
3.有时还需要备份原始数据进行还原
限制输入的时机是在,windows 消息 WM_CHAR 触发时
但.net 恰恰没有提供这个消息的事件映射.
 
 继承TextBox 重写 WndProc 函数 (优点点oo编程的优点我不说了)


这里我们就捕获系统中的WM_CHAE消息来检测用户的输入

 

使用WM_CHAR消息来限制用户的输入 public class cxyTextBox : TextBox
使用WM_CHAR消息来限制用户的输入使用WM_CHAR消息来限制用户的输入
...{
使用WM_CHAR消息来限制用户的输入
private const string tip = "这个输入框只允许输入数字";
使用WM_CHAR消息来限制用户的输入
protected override void WndProc(ref Message m)
使用WM_CHAR消息来限制用户的输入使用WM_CHAR消息来限制用户的输入
...{
使用WM_CHAR消息来限制用户的输入    
switch (m.Msg)
使用WM_CHAR消息来限制用户的输入使用WM_CHAR消息来限制用户的输入    
...{
使用WM_CHAR消息来限制用户的输入    
case  APINameHelper.WM_CHAR:
使用WM_CHAR消息来限制用户的输入        
char inputchar = (char)m.WParam;
使用WM_CHAR消息来限制用户的输入        
if (char.IsDigit(inputchar))
使用WM_CHAR消息来限制用户的输入使用WM_CHAR消息来限制用户的输入        
...{
使用WM_CHAR消息来限制用户的输入        
base.WndProc(ref m);
使用WM_CHAR消息来限制用户的输入        
return;
使用WM_CHAR消息来限制用户的输入        }
 
使用WM_CHAR消息来限制用户的输入        
else
使用WM_CHAR消息来限制用户的输入使用WM_CHAR消息来限制用户的输入        
...{
使用WM_CHAR消息来限制用户的输入        MessageBox.Show(tip);
使用WM_CHAR消息来限制用户的输入        
return;
使用WM_CHAR消息来限制用户的输入        }

使用WM_CHAR消息来限制用户的输入        
// 然后取 m.WParam 进行判断 m.WParam 就是用户输入的字符的 int 表示方式
使用WM_CHAR消息来限制用户的输入        
// 如果是被限制的字符 直接 Return
使用WM_CHAR消息来限制用户的输入        
//不走 base.WndProc (ref m);
使用WM_CHAR消息来限制用户的输入
        break;
使用WM_CHAR消息来限制用户的输入
使用WM_CHAR消息来限制用户的输入    
case APINameHelper.WM_PASTE:
使用WM_CHAR消息来限制用户的输入        
string pasted = Text;
使用WM_CHAR消息来限制用户的输入        
foreach (char c in pasted)
使用WM_CHAR消息来限制用户的输入使用WM_CHAR消息来限制用户的输入        
...{
使用WM_CHAR消息来限制用户的输入        
if (char.IsDigit(c))
使用WM_CHAR消息来限制用户的输入            
continue;
使用WM_CHAR消息来限制用户的输入        
else
使用WM_CHAR消息来限制用户的输入使用WM_CHAR消息来限制用户的输入        
...{
使用WM_CHAR消息来限制用户的输入            MessageBox.Show(tip);
使用WM_CHAR消息来限制用户的输入            
return;
使用WM_CHAR消息来限制用户的输入        }

使用WM_CHAR消息来限制用户的输入        }

使用WM_CHAR消息来限制用户的输入        
//判断剪贴板的数据是否是符合要求如果符合不做任何处理
使用WM_CHAR消息来限制用户的输入        
//否则 Return 不走默然处理即可
使用WM_CHAR消息来限制用户的输入
        base.WndProc(ref m);
使用WM_CHAR消息来限制用户的输入        
return;
使用WM_CHAR消息来限制用户的输入
使用WM_CHAR消息来限制用户的输入        
break;
使用WM_CHAR消息来限制用户的输入
使用WM_CHAR消息来限制用户的输入    
default:
使用WM_CHAR消息来限制用户的输入        
break;
使用WM_CHAR消息来限制用户的输入
使用WM_CHAR消息来限制用户的输入    }

使用WM_CHAR消息来限制用户的输入    
使用WM_CHAR消息来限制用户的输入    
base.WndProc(ref m); 
使用WM_CHAR消息来限制用户的输入}
 

 

上一篇:JAVA水晶报表从环境搭建到创建动态水晶报表


下一篇:sqlserver插入测试数据语句