屏蔽TextBox控件上默认的右键菜单-C#学习进阶

当在上网时,有些平台右键点击网络资源,什么弹出提示都没有,这是由于屏蔽了鼠标右键菜单所导致的。本实例模拟该功能实现在TextBox控件上屏蔽右键菜单,实例运行结果如图:

屏蔽TextBox控件上默认的右键菜单-C#学习进阶

技术要点

本实例主要用到自定义类CustomTextBoxGroup。

实现过程

(1)创建一个项目,将其命名为ShieldRightKeyCarte,修改默认窗体为ShieldRightKeyCarte。

(2)主要程序代码。

本程序在加载窗体时,声明一个自定义类CustomTextBoxGroup的对象,并为其指定父容器,然后在当前窗体中添加该控件。代码如下:

System.Windows.Forms.TextBox RightKeyCarte;                    //声明一个自定义类CustomTextBoxGroup的对象

private void ShieldRightKeyCarte_Load(object sender,EventArgs e)

{

   this.RightKeyCarte = new CustomTextBoxGroup();             //实例化该类的对象

   this.RightKeyCarte.Parent = this;    //设定自定义控件的父容器为当前窗口

   this.Controls.Add(this.RightKeyCarte);   //在当前窗体中添加自定义控件

}


在自定义类CustomTextBoxGroup的构造函数中,定义控件的位置和大小。代码如下:

public CustomTextBoxGroup()

{

    this.Top = 75;                           //设定自定义控件上边缘与其容器的工作区上边缘之间的距离

    this.Left = 115;                         //设定自定义控件左边缘与其容器的工作区左边缘之间的距离

    this.Width = 180;                        //设定自定义控件的宽度

    this.Height = 50;                          //设定自定义控件的高度

}


重载Windows处理消息的函数WndProc,截获有关粘贴的信息进行屏蔽。代码如下:

protected override void WndProc(ref Message m)

{

    const int WM_RBUTTONDOWN = 0x0204;                     //该变量表示鼠标右键的信息

    const int WM_GETTEXT = 0x000d;    //该变量表示从文本框中获取文本的信息

    const int WM_CONTEXTMENU = 0x007B;                     //该变量表示右键菜单的信息

    //当当前处理的信息为鼠标右键、从文本框中获取文本以及右键菜单信息时

if(m.Msg == WM_RBUTTONDOWN || m.Msg == WM_GETTEXT || m.Msg == WM_CONTEXTMENU)

  {

        return;                               //直接返回,不进行处理

    }

    base.WndProc(ref m);                 //处理下一条信息

}