标题:Datagridview 上下文菜单
只看楼主
习惯被动
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:139
专家分:144
注 册:2012-3-5
结帖率:84.62%
已结贴  问题点数:20 回复次数:7 
Datagridview 上下文菜单
我想给datagridview添加一个上下文菜单(ContextMenuStrip),可以冻结,隐藏或者显示一些列。我想要的效果是只有右击列头时才弹出上下文菜单,并能真正按要求对右击时所在的列进行操作。我现在遇到的问题有:1、目前的效果是只要在datagridview中右击都会显示上下文菜单,不能实现只有在右击时才显示上下文菜单;2、执行的列索引是当前活动索引(currentCell),不是我右击时所在的列。求大神指导指导。
搜索更多相关主题的帖子: 上下文 
2014-06-23 17:47
习惯被动
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:139
专家分:144
注 册:2012-3-5
得分:0 
没人回答?
2014-06-24 11:26
xydddaxia
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:33
帖 子:466
专家分:2307
注 册:2009-3-20
得分:10 
假设dataGridView1的右键菜单是contextMenuStrip1
增加事件处理:
程序代码:
private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
{
    //如果点击无效区域,返回,不弹出菜单
    Point gdvPoint = this.dataGridView1.PointToScreen(new Point(0, 0));
    int totalWidth = 0;
    foreach (DataGridViewColumn col in this.dataGridView1.Columns)
    {
        totalWidth += col.Width;
    }
    if (totalWidth > this.dataGridView1.Width - this.dataGridView1.RowHeadersWidth)
    {
        totalWidth = this.dataGridView1.Width - this.dataGridView1.RowHeadersWidth;
    }
    if (MousePosition.X < gdvPoint.X + this.dataGridView1.RowHeadersWidth || MousePosition.X > (gdvPoint.X + this.dataGridView1.RowHeadersWidth + totalWidth) ||
        MousePosition.Y < gdvPoint.Y || MousePosition.Y > (gdvPoint.Y + this.dataGridView1.ColumnHeadersHeight))
    {
        e.Cancel = true;
    }
}

站在春哥的肩膀上
2014-06-24 16:11
习惯被动
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:139
专家分:144
注 册:2012-3-5
得分:0 
回复 3 楼 xydddaxia
这样是能做到在单击列标题是才显示上下文菜单了,不过第二个问题不能解决。我想过通过鼠标的位置和列宽来计算单击时的列数,不过代码在对datagridview的列进行操作时是包含隐藏的列的,所以这个方法行不通。请问版主有什么好的方法吗?
2014-06-24 17:45
xydddaxia
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:33
帖 子:466
专家分:2307
注 册:2009-3-20
得分:10 

 Point gdvPoint = this.dataGridView1.PointToScreen(new Point(0, 0));

 int clickColumnIndex = this.dataGridView1.HitTest(MousePosition.X - gdvPoint.X, MousePosition.Y - gdvPoint.Y).ColumnIndex;

站在春哥的肩膀上
2014-06-25 08:24
习惯被动
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:139
专家分:144
注 册:2012-3-5
得分:0 
回复 5 楼 xydddaxia
完全正确。版主很好很强大
2014-06-25 15:04
习惯被动
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:139
专家分:144
注 册:2012-3-5
得分:0 
回复 5 楼 xydddaxia
完全正确。版主很好很强大
2014-06-25 15:04
jczhijia
Rank: 1
来 自:江苏无锡
等 级:新手上路
帖 子:1
专家分:0
注 册:2014-6-30
得分:0 
不会帮顶可以吗?
2014-06-30 18:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-433285-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.670611 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved