DataGridView 的ContextMenuStrip属性设置为contextMenuStrip1
,如果DataGridView的单元格不是处于编辑状态时,,点鼠标右键是会弹出contextMenuStrip1的右键菜单。。
但是如果DataGridView的单元格是处于编辑状态时,,点鼠标右键是弹出一个操作系统的右键菜单和contextMenuStrip1,但是
操作系统的右键把contextMenuStrip1的右键菜单给挡住 了。。
我想问的是,,怎么给屏蔽掉操作系统的右键菜单。。
找了好久都没有找到。。
10 个解决方案
#1
“操作系统的右键把contextMenuStrip1的右键菜单给挡住 了。。”,
我做了试验,根本没有出现你说的情况,鼠标一旦进入DataGridView里,它会优先处理针对它的所有鼠标事件,根本不会给其他窗体、系统机会的。
我试验是这样做的:
Form上拖一个DataGridView控件,在拖两个contextMenuStrip控件,
form1的ContextMenuStrip属性设置为contextMenuStrip1 ,
dataGridView1的ContextMenuStrip属性设置为contextMenuStrip2;
运行正常。
在同一窗体都没有这种现象,何况在一个系统里!
楼主,你是不是做了什么特殊处理,让系统截取鼠标邮件事件。
你可以先按我的方法测试一下,可能对你找问题有帮助。。。
我做了试验,根本没有出现你说的情况,鼠标一旦进入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);//处理下一条信息
}
#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;
很好使, 希望能够帮助到你哦!
if (e.Control is DataGridViewTextBoxEditingControl)
{
DataGridViewTextBoxEditingControl tb =
(DataGridViewTextBoxEditingControl)e.Control;
ContextMenuStrip contextMenuStrip1 = new ContextMenuStrip();
tb.ContextMenuStrip = contextMenuStrip1;
}
}
else
{
((DataGridViewTextBoxEditingControl)e.Control).ContextMenuStrip = null;
很好使, 希望能够帮助到你哦!
#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;
}
用此代码 不管在不在编辑状态 都有右键菜单
同时不会出现系统右键菜单(即 剪切 复制 粘贴 等文本默认右键菜单
#1
“操作系统的右键把contextMenuStrip1的右键菜单给挡住 了。。”,
我做了试验,根本没有出现你说的情况,鼠标一旦进入DataGridView里,它会优先处理针对它的所有鼠标事件,根本不会给其他窗体、系统机会的。
我试验是这样做的:
Form上拖一个DataGridView控件,在拖两个contextMenuStrip控件,
form1的ContextMenuStrip属性设置为contextMenuStrip1 ,
dataGridView1的ContextMenuStrip属性设置为contextMenuStrip2;
运行正常。
在同一窗体都没有这种现象,何况在一个系统里!
楼主,你是不是做了什么特殊处理,让系统截取鼠标邮件事件。
你可以先按我的方法测试一下,可能对你找问题有帮助。。。
我做了试验,根本没有出现你说的情况,鼠标一旦进入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);//处理下一条信息
}
#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;
很好使, 希望能够帮助到你哦!
if (e.Control is DataGridViewTextBoxEditingControl)
{
DataGridViewTextBoxEditingControl tb =
(DataGridViewTextBoxEditingControl)e.Control;
ContextMenuStrip contextMenuStrip1 = new ContextMenuStrip();
tb.ContextMenuStrip = contextMenuStrip1;
}
}
else
{
((DataGridViewTextBoxEditingControl)e.Control).ContextMenuStrip = null;
很好使, 希望能够帮助到你哦!
#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;
}
用此代码 不管在不在编辑状态 都有右键菜单
同时不会出现系统右键菜单(即 剪切 复制 粘贴 等文本默认右键菜单