日期:2014-05-17  浏览次数:20886 次

datagridview,鼠标在单元格内(单元格处于编辑状态),如何屏蔽掉系统的右键菜单
在一个窗体里面,加了一个DataGridView..
DataGridView 的ContextMenuStrip属性设置为contextMenuStrip1
,如果DataGridView的单元格不是处于编辑状态时,,点鼠标右键是会弹出contextMenuStrip1的右键菜单。。
但是如果DataGridView的单元格是处于编辑状态时,,点鼠标右键是弹出一个操作系统的右键菜单和contextMenuStrip1,但是
操作系统的右键把contextMenuStrip1的右键菜单给挡住 了。。

我想问的是,,怎么给屏蔽掉操作系统的右键菜单。。
找了好久都没有找到。。
------最佳解决方案--------------------
“操作系统的右键把contextMenuStrip1的右键菜单给挡住 了。。”,
我做了试验,根本没有出现你说的情况,鼠标一旦进入DataGridView里,它会优先处理针对它的所有鼠标事件,根本不会给其他窗体、系统机会的。

我试验是这样做的:

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

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

运行正常。

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

你可以先按我的方法测试一下,可能对你找问题有帮助。。。
------其他解决方案--------------------
LZ你说的这个问题应该不会存在啊 
就像楼上说的一样,
你最好截个图来看看

另外你的是不是在可编辑状态下  右键功能 是无效状态?
------其他解决方案--------------------
前提是单元格处于编辑状态,确实会被系统的右击菜单给挡住。
如果不是编辑状态,是没有问题的。
楼主,你这个问题解决了吗?
------其他解决方案--------------------
利用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