| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1017 人关注过本帖
标题: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
快速回复:Datagridview 上下文菜单
数据加载中...
 
   



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

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