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

原创 2007年10月14日 17:48:00

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

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); 
}
 

 

基于MFC对话框的键盘消息响应 WM_KEYDOWN WM_CHAR消息

PreTranslateMessage作用和使用方法          PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数本窗口的消息都要通...
  • huanglei1989
  • huanglei1989
  • 2013年08月29日 00:13
  • 1606

关于WM_CHAR 消息的解读

一直都以为OnChar消息函数 或者 说 WM_CHAR 可以处理所有的按键信息。原来是错误的,WM_CHAR 对应的只是字符而不是按键。其中,字符是指的0-127内的ASCII码。具体的说明参照以下...
  • daiyutage
  • daiyutage
  • 2013年02月06日 12:50
  • 17914

vc+如何实现模拟键盘输入,自动输入文字(创世纪篇)

点击打开原文链接  键盘对于每个操作电脑的人员来说是最熟悉不过的了。键盘上的按键可分为两类: 按下后会在电脑的输入窗口上出现对应字符的按键,如字母键和数字键等,我们称之为字符键;按下后虽然看不到...
  • cswhit
  • cswhit
  • 2016年08月09日 11:13
  • 3258

使用WM_PASTE 和 WM_CHAR 消息时中文乱码总结

当我们需要设置编辑框显示文本的时候,如果其它方式无法实现,可以试试WM_PASTE 和 WM_CHAR。 但使用这两种消息很容易出现中文乱码的情况,这一般是编码问题。 1,中文应采用UNICO...
  • justhxy
  • justhxy
  • 2016年07月24日 11:32
  • 1046

WM_CHAR消息分析

博客转移:http://vivianke.blog.163.com/blog/static/297152712007529113537994/   WM_CHAR消息分析 应用程序中键盘消息...
  • vivianke
  • vivianke
  • 2011年10月31日 21:15
  • 286

wm_keydown 和vm_char 区别以及 mfc DiapatchMessage派送消息返回之前的过程解析

WM_KEYDOWN和WM_CHAR 事件WM_KEYDOWN和WM_CHAR都是键盘消息,如果要对这两个有消息有所响应的话,就需要实行以下代码:  while(GetMessage(&Msg,NUL...
  • tangyanzhi1111
  • tangyanzhi1111
  • 2014年01月19日 10:35
  • 1542

MFC——12.话框中对键盘消息的响应处理&&如何响应wm_char消息

本文为转载文章,讲解了如何解决在对话框对应的类里添加消息响应函数的方法。...
  • u010757264
  • u010757264
  • 2016年04月17日 12:22
  • 859

WM_COMMAND user message macroWM_COMMAND用户消息宏(5KB)

  • 2006年02月23日 09:05
  • 6KB
  • 下载

使用WM_COPYDATA消息完成进程间通信

源地址:http://www.cnblogs.com/morewindows/archive/2011/09/23/2186294.html 发送WM_COPYDATA消息: SendMe...
  • lmxmx
  • lmxmx
  • 2012年02月02日 11:31
  • 361

使用WM_COPYDATA消息在C++和C#程序之间互传数据

【网通】点击此处下载源程序                         【电信、网通】点击此处下载源程序 【网通】点击此处下载演示程序                     【电信、网通】点击...
  • pengqianhe
  • pengqianhe
  • 2012年09月27日 11:22
  • 2996
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用WM_CHAR消息来限制用户的输入
举报原因:
原因补充:

(最多只允许输入30个字)