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

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

 

密码框继承于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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值