近期在弄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. mysql enterprise backup入门使用

    **************************************************************--1.全备******************************** ...

  2. `Vue`中为什么访问不了以`$`和`_`开头的属性?

    Vue中为什么访问不了以$和_开头的属性? 背景:航班管家H5使用了Vue进行新版开发,预订流程逻辑copy参考了野鹅国际机票小程序,小程序中使用__开头的属性作为私有属性. 如题,在data中定义的 ...

  3. D07——C语言基础学PYTHON

    C语言基础学习PYTHON——基础学习D07 20180826内容纲要: 面向对象进阶学习 1 静态方法 2 类方法 3 属性方法 4 类的特殊成员方法(本节重点) 5 反射(本节重点) 6 异常(本 ...

  4. 【BZOJ3217】ALOEXT 分块

    题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3217 分块过掉辣!!!!!!$O(n^{1.5}+q\times \sqrt{n})$的 ...

  5. POJ 1270

    #include<iostream> #include<algorithm> #define MAXN 26 #define MAX 300 using namespace s ...

  6. js实现双向链表, 双向链表需要增加一个previous属性

    双向链表, 双向链表需要增加一个previous属性 /*双向链表 * */ function Node(element) { this.element = element; this.next = ...

  7. hive与hbase的整合

    Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行.其优点学习成本低,可以通过类S ...

  8. tensorflow进阶篇-4(损失函数1)

    L2正则损失函数(即欧拉损失函数),L2正则损失函数是预测值与目标函数差值的平方和.L2正则损失函数是非常有用的损失函数,因为它在目标值附近有更好的曲度,并且离目标越近收敛越慢: # L = (pre ...

  9. 过虑器应用之1-设置request编码

    一:设置Post编码 post请求接收中文,需要在Servlet里写上 request.setCharacterEncoding("UTF-8"); 否则默认以iso-8859-1 ...

  10. Spring统一异常处理

    1.为什么要用Spring的统一异常处理? 项目中无论是controller层.service层还是dao层都会有异常发生.每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量 ...