重写C#的TextBox控件达到无法粘贴,无法输入特定字符功能

来源:互联网 发布:sql select 降序 编辑:程序博客网 时间:2024/06/09 11:06

QQ的登陆界面的那两个框,大家应该很熟悉了,QQ的密码框,无法复制和粘贴,其实实现起来也很简单。

这里就要用到控件重写。微笑打开Visual Studio 新建 类库  然后继承TextBox,重写消息循环WndProc,这里捕获WM_CHAR就能实现特定的字符能不能输入,捕获WM_PASTE就能实现粘贴时候的一些操作。

    public class Class1:TextBox    {        protected override void WndProc(ref Message m)        {            int charcode = (int)m.WParam;            switch (m.Msg)            {                case 0x0102://WM_CHAR                    if(charcode == 97)                    return;                    break;                case 0x0302://WM_PASTE                    IDataObject obj = Clipboard.GetDataObject();                    if (obj.GetDataPresent(DataFormats.Text))                    {                        String clip = (String)obj.GetData(DataFormats.Text);                    }                    if (obj != null)                        return;                    break;                default:                    break;            }            base.WndProc(ref m);        }    }

至于WM_PASTE或者WM_CHAR的值应该是什么大家可以查看MSDN。

然后大家新建一个Winform工程然后引用刚刚写好的dll,把控件拖到窗体上面试一下吧。