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

来源:互联网 发布:手机软件分类软件 编辑:程序博客网 时间:2024/05/14 18:05

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

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


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

 

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

        
// 然后取 m.WParam 进行判断 m.WParam 就是用户输入的字符的 int 表示方式
        
// 如果是被限制的字符 直接 Return
        
//不走 base.WndProc (ref m);
        break;

    
case APINameHelper.WM_PASTE:
        
string pasted = Text;
        
foreach (char c in pasted)
        
{
        
if (char.IsDigit(c))
            
continue;
        
else
        
{
            MessageBox.Show(tip);
            
return;
        }

        }

        
//判断剪贴板的数据是否是符合要求如果符合不做任何处理
        
//否则 Return 不走默然处理即可
        base.WndProc(ref m);
        
return;

        
break;

    
default:
        
break;

    }

    
    
base.WndProc(ref m); 
}
 

 

原创粉丝点击