近期在弄ArcgisAE实习,其中有一个功能是需要操作图层的属性字段的,为了方便操作图层的属性,最好是在图层的属性表中,也就是在显示图层属性的DataGirdView控件的头部添加一个右键菜单来实现相应的功能。

  在c#中有个有一个右键菜单的组建contextMenuStrip,在这个控件里面可以添加一些处理属性字段的功能,然后将这个控件赋予给DataGirdViewcontextMenuStrip属性就可以了,然而这种方式在DataGirdView控件的任何地方都会将这个右键菜单显示出来,在行中,列中都会显示出来,这样就没有达到我们预期想要的效果。

  于是自己再MSDN随意的查看DataGirdView各种属性和事件,终于发现了一个可以拼凑的方式实现DataGirdView列的右键菜单的方法。

  DataGirdView控件有一个ColumnHeaderMouseClick这样的事件,这个事件只在单击DataGirdView控件的头部即我们想要的地方时候才会触发该事件,并且该事件还有一个点击在列的一个列索引。

  原理如下:

      1、不使用该控件的contextMenuStrip属性

      2、利用DataGirdView控件的ColumnHeaderMouseClick事件,在每次触发事件的时候在鼠标单击的地方将右键菜单用代码的方式显示出来

  具体代码如下所示

      1、添加一个右键菜单控件

      2、在DataGirdView控件的ColumnHeaderMouseClick写如下的代码

      

        //MousePostion是相对于屏幕来的,而右键菜单的Show方法也是相对屏幕坐标的
// MessageBox.Show(e.Location.ToString());
if (e.Button == MouseButtons.Right)
{
//可以获取单击的列的索引
int index = e.ColumnIndex;
this.contextMenuStrip1.Show(MousePosition.X, MousePosition.Y);
}

      这样就可以实现DataGirdView控件中头部(列名处)的右键菜单了。

      ps:有几种方式可以获取鼠标坐标的方式,但是各自的具体含义或者说是参照原点不一样

      1、MousePosition类有一个静态的X,Y属性,它获取的坐标是相对于屏幕的坐标原点来的,也就是左上角。

      2、任何控件的鼠标事件有个一个参数e,e有两个X,Y数据,这个坐标是相对于该控件的坐标原点的。

      3、Cursor类有个静态属性Position,代表鼠标当前的位置,该方式获取的坐标和MousePosition方式是一样的,都是相对于屏幕的坐标原点的。

      

c#如何仅在datatgirdview控件的头部(列名处)添加右键菜单的更多相关文章

  1. =WM_VSCROLL(消息反射) 和 WM_VSCROLL(消息响应)的区别(控件拥有者自己不处这个理消息,而是反射给控件对象本身来处理这个消息)

    =WM_VSCROLL(消息反射) 和 WM_VSCROLL(消息响应)的区别 所谓消息反射就是控件拥有者自己不处这个理消息,而是反射给控件对象本身来处理这个消息 1.“=WM_VSCROLL”是消息 ...

  2. 仅在TabControl中的Tab中添加右键菜单

    若想实现仅在TabControl中的Tab中添加右键菜单,可在XAML中通过使用样式得到: <TabControl> <TabControl.ItemContainerStyle&g ...

  3. sencha touch 自定义cardpanel控件 模仿改进NavigationView 灵活添加按钮组,导航栏,自由隐藏返回按钮(废弃 仅参考)

    最新版本我将会放在:http://www.cnblogs.com/mlzs/p/3382229.html这里的示例里面,这里不会再做更新 代码: /* *模仿且改进NavigationView *返回 ...

  4. Winform 获取当前单击的控件名称 和 向窗体添加控件

    Winform如何获取当前单击的控件名称,比如有100个Button 和一个button_Click()的按钮事件 ,分别点击不同按钮后显示所点击的按钮名称?private void button_C ...

  5. .Net语言 APP开发平台——Smobiler学习日志:用MenuView控件仿钉钉APP的首页菜单

    最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的”Smobil ...

  6. dataGridView控件--未将对象引用设置添加到对象的实例

    上篇博客中我完成了如何将控件中的数据导出到excel中dataGridView控件--导出Excel,当我成功导出后,又再次遇到了新问题---未将对象引用设置添加到对象的实例 解决办法:  1 .将代 ...

  7. android中RecyclerView控件实现长按弹出PopupMenu菜单功能

    之前写过一篇文章:android中实现简单的聊天功能 现在是在之前功能的基础上,添加一个长按聊天记录,删除对应聊天记录的功能 RecyclerView控件,没有对应的长按事件,我们需要自己手工添加,修 ...

  8. DevExpress的下拉框控件LookUpEdit的使用、添加item选项值、修改默认显示值

    场景 Winform控件-DevExpress18下载安装注册以及在VS中使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1 ...

  9. WPF中TreeView控件数据绑定和后台动态添加数据(二)

    写在前面:在(一)中,介绍了TreeView控件MVVM模式下数据绑定的方法.在这篇文章中,将总结给节点添加事件的方法,这样说有些不对,总之实现的效果就是点击某个节点,将出现对应于该节点的页面或者数据 ...

随机推荐

  1. 网站引入外部js

    有时想看某个网站下一些数据,需要用到js做一个实时的筛选,却又苦于该网站没用jQuery导致想使用jQuery时,还无法下手,那么下面这段js或许可以帮助你.1.打开我们的chrome调试工具,切换到 ...

  2. jQuery.cookie的使用指南

    一个轻量级的cookie 插件,可以读取.写入.删除 cookie. 配置 首先包含jQuery的库文件,在后面包含 jquery.cookie.js 的库文件. <script type=&q ...

  3. easyui页面上字段排序并与后台交互

    在开始对easyui里面页面上进行排序,感觉应该不怎么难,但是在操作的时候并没有那么简单,上网也查了很多进行排序的方法,最终总结出这个方法,供大家参考使用: 一.在easyui里面上只需 1.将要进行 ...

  4. JSP知识汇总

    JSP知识汇总 一.简介 > HTML - HTML擅长显示一个静态的网页,但是不能调用Java程序. > Servlet - Servlet擅长调用Java程序和后台进行交互,但是它不擅 ...

  5. POJ 2390

    import java.util.*; public class Main { public static void main(String args[]){ double interest; Sca ...

  6. Python基础3:字符编码

    http://www.jb51.net/article/64917.htm Python 编码为什么那么蛋疼? https://i.cnblogs.com/EditPosts.aspx?postid= ...

  7. (转)教你手工mysql拆库

    原文:http://www.cnblogs.com/cchust/p/3859967.html 互联网网站应用大多采用mysql作为DB存储,限于mysql单机性能的瓶颈,为了支撑更大容量和更大的访问 ...

  8. Eclipse及IDEA插件开发

    https://github.com/eclipse/eclipse.jdt.ui http://www.eclipse.org/jdt/ui/ https://www.cnblogs.com/xin ...

  9. MySQL的Sleep进程占用大量连接解决方法

    第一部分为产生大量sleep进程的原理及对应解决方法第二部分为设置wait_timeout值,有效减少sleep进程 ========================================= ...

  10. C语言初学

    输出控制符 输出控制符 含义 %d int 整型数 %ld long int %c char 一个字符 %f float 浮点数,整数/整数=整数,整数/小数=小数 %lf double %x %X ...