实现不能粘贴和复制的密码框

因项目中要求密码框不能复制或粘贴内容,也不允许右键菜单,故做此文。

密码框继承于TextBox。

不能复制,粘贴和右键菜单的需求利用Textbox现有的属性无法实现或完全实现,即使ToolStripMenu为空,系统也会自己给添加一个具备 复制粘贴的右键菜单。

针对复制,粘贴和剪切,需要对在消息循环中进行拦截,然后将其处理事件置空。代码如下所示:

 1       protected  override void WndProc(ref Message m)
 2        {
 3            //阻止粘贴,复制,剪切
 4           if (m.Msg!=WinApi.WM_PASTE &&
 5               m.Msg!=WinApi.WM_COPY && 
 6               m.Msg!=WinApi.WM_CUT) 
 7           {
 8               base.WndProc(ref m);
 9           }
10        }

针对右键菜单,可以拦截消息循环,也可以将其默认菜单设置为没有菜单项的菜单,我采用了第二种方法:

  ContextMenuStrip defaultMenu;
 1    public override ContextMenuStrip ContextMenuStrip
 2       {
 3           get
 4           {
 5               if (base.ContextMenuStrip == null)
 6               {
 7                   base.ContextMenuStrip = this.defaultMenu;
 8               }
 9               return base.ContextMenuStrip;
10           }
11           set
12           {
13               if (base.ContextMenuStrip == null)
14               {
15                   base.ContextMenuStrip = this.defaultMenu;
16               }
17           }
18       }


在该TextBox的构造函数或Load事件中,将defaultMenu赋值给ContextMenuStrip即可。

文中若有漏洞或有更好的方法,请喷完后再多多指教;

邮箱:pengcwl@163.com

原文地址:https://www.cnblogs.com/pengcwl/p/3407158.html