datagridview,鼠标在单元格内(单元格处于编辑状态),如何屏蔽掉系统的右键菜单

时间:2021-08-09 14:45:21
在一个窗体里面,加了一个DataGridView..
DataGridView 的ContextMenuStrip属性设置为contextMenuStrip1
,如果DataGridView的单元格不是处于编辑状态时,,点鼠标右键是会弹出contextMenuStrip1的右键菜单。。
但是如果DataGridView的单元格是处于编辑状态时,,点鼠标右键是弹出一个操作系统的右键菜单和contextMenuStrip1,但是
操作系统的右键把contextMenuStrip1的右键菜单给挡住 了。。

我想问的是,,怎么给屏蔽掉操作系统的右键菜单。。
找了好久都没有找到。。

10 个解决方案

#1


“操作系统的右键把contextMenuStrip1的右键菜单给挡住 了。。”,
我做了试验,根本没有出现你说的情况,鼠标一旦进入DataGridView里,它会优先处理针对它的所有鼠标事件,根本不会给其他窗体、系统机会的。

我试验是这样做的:

Form上拖一个DataGridView控件,在拖两个contextMenuStrip控件,

form1的ContextMenuStrip属性设置为contextMenuStrip1 ,
dataGridView1的ContextMenuStrip属性设置为contextMenuStrip2;

运行正常。

在同一窗体都没有这种现象,何况在一个系统里!
楼主,你是不是做了什么特殊处理,让系统截取鼠标邮件事件。

你可以先按我的方法测试一下,可能对你找问题有帮助。。。

#2


LZ你说的这个问题应该不会存在啊 
就像楼上说的一样,
你最好截个图来看看

另外你的是不是在可编辑状态下  右键功能 是无效状态?

#3


前提是单元格处于编辑状态,确实会被系统的右击菜单给挡住。
如果不是编辑状态,是没有问题的。
楼主,你这个问题解决了吗?

#4


利用API拦截来处理,也还是不行。
        #region 本程序中需声明的变量
        private const int WM_RBUTTONDOWN = 0x0204;//该变量表示鼠标右键的信息
        private const int WM_GETTEXT = 0x000d;//该变量表示从文本框中获取文本的信息
        private const int WM_CONTEXTMENU = 0x007B;//该变量表示右键菜单的信息
        #endregion

        protected override void WndProc(ref Message m)
        {
            if(m.Msg == WM_RBUTTONDOWN || m.Msg == WM_GETTEXT || m.Msg == WM_CONTEXTMENU)//当当前处理的信息为鼠标右键、从文本框中获取文本、右键菜单以及复制信息时
            {
                return;//直接返回,不进行处理
            }
            base.WndProc(ref m);//处理下一条信息
        }

#5


同问,我也想解决这个问题呀

#6


还没有解决吗?期待高手中!!!

#7


怎么还没解决?

#8


楼上的解决了吗,分享下可以不,我的邮箱304271331@qq.com

#9


在datagridview的EditingControlShowing事件中加上代码段就OK啦
 if (e.Control is DataGridViewTextBoxEditingControl)
                {
                    DataGridViewTextBoxEditingControl tb =
                        (DataGridViewTextBoxEditingControl)e.Control;
                    ContextMenuStrip contextMenuStrip1 = new ContextMenuStrip();
                 

                    tb.ContextMenuStrip = contextMenuStrip1;
                  
                }
            }
            else
            {
                ((DataGridViewTextBoxEditingControl)e.Control).ContextMenuStrip = null;
        很好使, 希望能够帮助到你哦! datagridview,鼠标在单元格内(单元格处于编辑状态),如何屏蔽掉系统的右键菜单   

#10



        private void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right && e.RowIndex > -1 && e.ColumnIndex > -1)
            {
                if (!dataGridView1[e.ColumnIndex, e.RowIndex].Selected)
                {
                    dataGridView1.ClearSelection();
                    dataGridView1.Rows[e.RowIndex].Selected = true;
                }
                dataGridView1.ContextMenuStrip = contextMenuStrip1;
            }
            else
                dataGridView1.ContextMenuStrip = null;
        }

        private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            e.Control.ContextMenuStrip = contextMenuStrip1;
        }

用此代码 不管在不在编辑状态 都有右键菜单
同时不会出现系统右键菜单(即 剪切 复制 粘贴 等文本默认右键菜单
引用 9 楼 mei_1 的回复:
在datagridview的EditingControlShowing事件中加上代码段就OK啦
 if (e.Control is DataGridViewTextBoxEditingControl)
                {
                    DataGridViewTextBoxEditingControl tb =
                        (DataGridViewTextBoxEditingControl)e.Control;
                    ContextMenuStrip contextMenuStrip1 = new ContextMenuStrip();
                 

                    tb.ContextMenuStrip = contextMenuStrip1;
                  
                }
            }
            else
            {
                ((DataGridViewTextBoxEditingControl)e.Control).ContextMenuStrip = null;
        很好使, 希望能够帮助到你哦! datagridview,鼠标在单元格内(单元格处于编辑状态),如何屏蔽掉系统的右键菜单   

#1


“操作系统的右键把contextMenuStrip1的右键菜单给挡住 了。。”,
我做了试验,根本没有出现你说的情况,鼠标一旦进入DataGridView里,它会优先处理针对它的所有鼠标事件,根本不会给其他窗体、系统机会的。

我试验是这样做的:

Form上拖一个DataGridView控件,在拖两个contextMenuStrip控件,

form1的ContextMenuStrip属性设置为contextMenuStrip1 ,
dataGridView1的ContextMenuStrip属性设置为contextMenuStrip2;

运行正常。

在同一窗体都没有这种现象,何况在一个系统里!
楼主,你是不是做了什么特殊处理,让系统截取鼠标邮件事件。

你可以先按我的方法测试一下,可能对你找问题有帮助。。。

#2


LZ你说的这个问题应该不会存在啊 
就像楼上说的一样,
你最好截个图来看看

另外你的是不是在可编辑状态下  右键功能 是无效状态?

#3


前提是单元格处于编辑状态,确实会被系统的右击菜单给挡住。
如果不是编辑状态,是没有问题的。
楼主,你这个问题解决了吗?

#4


利用API拦截来处理,也还是不行。
        #region 本程序中需声明的变量
        private const int WM_RBUTTONDOWN = 0x0204;//该变量表示鼠标右键的信息
        private const int WM_GETTEXT = 0x000d;//该变量表示从文本框中获取文本的信息
        private const int WM_CONTEXTMENU = 0x007B;//该变量表示右键菜单的信息
        #endregion

        protected override void WndProc(ref Message m)
        {
            if(m.Msg == WM_RBUTTONDOWN || m.Msg == WM_GETTEXT || m.Msg == WM_CONTEXTMENU)//当当前处理的信息为鼠标右键、从文本框中获取文本、右键菜单以及复制信息时
            {
                return;//直接返回,不进行处理
            }
            base.WndProc(ref m);//处理下一条信息
        }

#5


同问,我也想解决这个问题呀

#6


还没有解决吗?期待高手中!!!

#7


怎么还没解决?

#8


楼上的解决了吗,分享下可以不,我的邮箱304271331@qq.com

#9


在datagridview的EditingControlShowing事件中加上代码段就OK啦
 if (e.Control is DataGridViewTextBoxEditingControl)
                {
                    DataGridViewTextBoxEditingControl tb =
                        (DataGridViewTextBoxEditingControl)e.Control;
                    ContextMenuStrip contextMenuStrip1 = new ContextMenuStrip();
                 

                    tb.ContextMenuStrip = contextMenuStrip1;
                  
                }
            }
            else
            {
                ((DataGridViewTextBoxEditingControl)e.Control).ContextMenuStrip = null;
        很好使, 希望能够帮助到你哦! datagridview,鼠标在单元格内(单元格处于编辑状态),如何屏蔽掉系统的右键菜单   

#10



        private void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right && e.RowIndex > -1 && e.ColumnIndex > -1)
            {
                if (!dataGridView1[e.ColumnIndex, e.RowIndex].Selected)
                {
                    dataGridView1.ClearSelection();
                    dataGridView1.Rows[e.RowIndex].Selected = true;
                }
                dataGridView1.ContextMenuStrip = contextMenuStrip1;
            }
            else
                dataGridView1.ContextMenuStrip = null;
        }

        private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            e.Control.ContextMenuStrip = contextMenuStrip1;
        }

用此代码 不管在不在编辑状态 都有右键菜单
同时不会出现系统右键菜单(即 剪切 复制 粘贴 等文本默认右键菜单
引用 9 楼 mei_1 的回复:
在datagridview的EditingControlShowing事件中加上代码段就OK啦
 if (e.Control is DataGridViewTextBoxEditingControl)
                {
                    DataGridViewTextBoxEditingControl tb =
                        (DataGridViewTextBoxEditingControl)e.Control;
                    ContextMenuStrip contextMenuStrip1 = new ContextMenuStrip();
                 

                    tb.ContextMenuStrip = contextMenuStrip1;
                  
                }
            }
            else
            {
                ((DataGridViewTextBoxEditingControl)e.Control).ContextMenuStrip = null;
        很好使, 希望能够帮助到你哦! datagridview,鼠标在单元格内(单元格处于编辑状态),如何屏蔽掉系统的右键菜单