(1)首先,我们创建 frmAttribute 类,即存储 属性信息 的对话框

private AxMapControl m_Mapctr;

private ILayer m_pLyr;

public frmAttribute(AxMapControl pMapCtr,ILayer pLyr)   //该类创建时,接受参数 "所在地图(pMapCtr)","所在图层(pLyr)"
        {
            InitializeComponent();
            m_Mapctr = pMapCtr;
            m_pLyr = pLyr;
        }

private void frmAttribute_Load(object sender, EventArgs e)
        {
            try
            {
                ILayer pLayer;
                pLayer = m_pLyr;
                IFeatureLayer pFLayer = pLayer as IFeatureLayer;
                IFeatureClass pFC = pFLayer.FeatureClass;

ILayerFields pLayerFields = pFLayer as ILayerFields;
                DataSet ds = new DataSet("dsTest");
                DataTable dt = new DataTable(pFLayer.Name);
                //获取列名
                DataColumn dc = null;
                for (int i = 0; i < pLayerFields.FieldCount; i++)
                {
                    dc = new DataColumn(pLayerFields.get_Field(i).Name);
                    dt.Columns.Add(dc);
                    dc = null;
                }

//获取属性表

IFeatureCursor pFCursor = pFC.Search(null, false);
                IFeature pFeature = pFCursor.NextFeature();
                while (pFeature != null)
                {
                    DataRow dr = dt.NewRow();

for (int j = 0; j < pLayerFields.FieldCount; j++)
                    {
                        if (pLayerFields.FindField(pFC.ShapeFieldName) == j)
                        {
                            dr[j] = pFC.ShapeType.ToString();
                        }
                        else
                        {
                            dr[j] = pFeature.get_Value(j).ToString();
                        }
                    }
                    dt.Rows.Add(dr);

pFeature = pFCursor.NextFeature();
                }

//显示信息

dataGridView1.DataSource = dt;
            }
            catch(Exception exception)
            {
                MessageBox.Show("读取属性表失败:" + exception.Message);
            }

}

(2) TOC 的右键菜单弹出时,记录选择的信息:

//为了配合toc右键菜单
        private esriTOCControlItem toccItem = esriTOCControlItem.esriTOCControlItemNone;
        private IBasicMap pBasicMap = null;

private ILayer pLayer = null;

//点击toc的图层时弹出右键菜单

private void axTOCControl1_OnMouseDown(object sender, ITOCControlEvents_OnMouseDownEvent e)
        {
            object unk = null;
            object data = null;
            if (e.button == 2)
            {

//这个函数最为关键,它找到了鼠标点击 "位置(e.x , e.x.y)" "图层(pLayer)" "类型(toccItem )"
                axTOCControl1.HitTest(e.x, e.y, ref toccItem, ref pBasicMap, ref pLayer, ref unk, ref data);       
                if (toccItem == esriTOCControlItem.esriTOCControlItemLayer)
                {
                    pFLayer = pLayer as IFeatureLayer;
                    pFC = pFLayer.FeatureClass;
                    contextMenuStrip2.Show(axTOCControl1, new System.Drawing.Point(e.x, e.y));
                }
                else if (toccItem == esriTOCControlItem.esriTOCControlItemMap)
                {
                    contextMenuStrip2.Show(axTOCControl1, new System.Drawing.Point(e.x, e.y));
                }
            }
        }

补充:private esriTOCControlItem toccItem = esriTOCControlItem.esriTOCControlItemNone;

这里的 toccItem  有很多类型:  esriTOCControlItemHeading(标题处)  ,  esriTOCControlItemMap(地图名称处)  ,

esriTOCControlItemLayer(图层名称处)  ,  esriTOCControlItemLegendClass(图层图例处)   ,

esriTOCControlItemNone(TOC中heading,map,layer,legend之外所剩余的空白区域)

(3)最后一步,在 Form1 中创建 frmAttribute 实例:

private void 属性ToolStripMenuItem_Click(object sender, EventArgs e)//在Toc上打开属性窗口
        {
            frmAttribute frm = new frmAttribute(axMapControl1,pLayer);
            frm.ShowDialog();
        }

转载于:https://www.cnblogs.com/ycbfish333/archive/2008/08/25/1275810.html

在TOC中添加右键查看属性信息菜单相关推荐

  1. 对于“优盘变成了RAW的文件系统,双击提示需要格式化,右键查看属性是0字节,也无法打开”的解决办法

    对于"优盘变成了RAW的文件系统,双击提示需要格式化,右键查看属性是0字节,也无法打开"的解决办法 现象分析: 前几天我的优盘在学校机房的电脑上使用了一下,不知怎的文件复制到一半的 ...

  2. 在(CListView)列表视图中添加右键菜单的方法

    使用弹出式菜单(PopMenu) 弹 出式菜单(PopMenu)大家都熟悉,在WIN98的桌面上单击鼠标右键弹出的菜单就是弹出式菜单.通常情况下,弹出式菜单在鼠标右键单击时弹出,当 然,也可以根据需要 ...

  3. win7计算机属性后没反应,win7系统计算机右键查看属性时没有反应的应对方案

    win7系统计算机右键查看属性时没有反应的应对方案 更新时间:2016-07-13 14:29:48 阅读:200 作者:win7旗舰版系统下载 当用户查看Win7系统属性时,直接右键"计算 ...

  4. 计算机属性无法查看无反应,解决win7系统计算机右键查看属性时没有反应的方法有哪些...

    当用户查看win7系统属性时,直接右键"计算机"选择"属性"就可快速查看.但有用户遇到了没有反应的问题.其实一般是由于注册表中有数据遭到破坏的原因,下面下载之家 ...

  5. python在子类中添加新的属性_pycharm实现在子类中添加一个父类没有的属性

    我就废话不多说了,还是直接看代码吧! class Car(): """一次模拟汽车的简单尝试""" def __init__(self, m ...

  6. JS向对象中添加和删除属性

    向对象中添加属性 语法: 对象.属性名 = 属性值; 对象["属性名"] = 属性值; //这种方式能够使用特殊的属性名 对象的属性名没有任何要求,不需要遵守标识符的规范,但是在开 ...

  7. Cesium 对象Entity点击查看属性信息

    点击entity实体查看当前entity的属性信息 1.效果图 2.示例代码 <!DOCTYPE html> <html> <head lang="en&quo ...

  8. python在子类中添加新的属性_python - 如何创建类属性?

    python - 如何创建类属性? 在python中,我可以使用@classmethod装饰器向类添加方法. 是否有类似的装饰器向类中添加属性? 我可以更好地展示我在说什么. class Exampl ...

  9. Linux中使用命令查看目录信息、查看当前目录路径、清楚终端内容

    查看目录命令 文章目录 查看目录命令 1. 查看目录命令的使用 2. 查看当前目录路径 3. 清除终端内容 4. 小结 学习目标 能够使用Linux命令查看目录信息 1. 查看目录命令的使用 命令 说 ...

最新文章

  1. 生物信息学基本知识笔记
  2. JNI调用(github有代码可下载)
  3. Java对存储过程的调用方法
  4. 一个Web Project引用多个Java Project在Eclipse下的配置--转载
  5. 直播报名 | 官方解读NVIDIA黑科技:StyleGAN的架构与实现
  6. threadx 信号量 应用_操作系统及ThreadX简介.ppt
  7. 取消搜索状态_百度搜索引擎全网推广通常有哪些账户?
  8. UI素材模板|app ui界面的导航设计都有哪些?
  9. Struts2 xml配置
  10. iOS启动页广告XHLaunchAd
  11. python100天发音_GitHub - hhttss999/Python-100-Days: Python - 100天从新手到大师
  12. ACM-ICPC 2016 沈阳赛区现场赛 I. The Elder HDU 5956(斜率DP)
  13. nginx配置修改使404,500,502等nginx错误输出前端可识别json
  14. sequence与sequencer
  15. idea Maven阿里云仓库和阿里spring代理仓库配置
  16. linux连接多个显示器,如何在Linux Ubuntu中使用多个和外部显示器 | MOS86
  17. 视频教程-ADAS/HAD软件架构-嵌入式
  18. winmm.lib库
  19. Winds7 修改盘符
  20. 分享思科Cisco12000系列路由器的口令恢复过程

热门文章

  1. Emlog文章海报插件
  2. 北漂鱼引导页HTML源码
  3. 做一个项目,平时都用到哪些工具提高效率(上)[转]
  4. Linux系统修改环境变量PATH路径
  5. 剑指offer 11.旋转数组的最小数字
  6. SVM — 机器学习面试
  7. MySQL in 查询,并通过 FIELD 函数按照查询条件顺序返回结果
  8. 【AI视野·今日CV 计算机视觉论文速览 第191期】Wed, 5 May 2021
  9. Collections工具类 java
  10. css复合选择器 1205