最近参考Arcengine的Samples做的功能,虽然简单,但是示例代码的确体现出了很好的封装性,值得学习,效果图如下:

闲话休絮,直入正题:

一、首先建立工具类,实现IMenuDef接口

class Neval:IMenuDef//这个接口
    {

public string Caption
        {
            get
            {
                return "Navigation";
            }
        }

public void GetItemInfo(int pos, IItemDef itemDef)      //POS为序列号
        {
            switch (pos)
            {
                case 0:
                    itemDef.ID = "esriControls.ControlsMapZoomInFixedCommand";     //就是ESRI.ArcGIS.Controls下的类的名称
                    break;
                case 1:
                    itemDef.ID = "esriControls.ControlsMapZoomOutFixedCommand";
                    break;
                case 2:
                    itemDef.ID = "esriControls.ControlsMapFullExtentCommand";
                    itemDef.Group = true;
                    break;
                case 3:
                    itemDef.ID = "esriControls.ControlsMapZoomToLastExtentBackCommand";
                    break;
                case 4:
                    itemDef.ID = "esriControls.ControlsMapZoomToLastExtentForwardCommand";
                    break;
            }
        }

public int ItemCount
        {
            get {
                return 5;
            }
        }

public string Name
        {
            get { return "Navigation"; }
        }
    }

二、在form—load中添加

axToolbarControl1.AddItem(new Neval(), -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconAndText);

三、再创建类SubMenu同样实现IMenuDef接口

class SubMenu:IMenuDef
    {

public string Caption
        {
            get { return "SumMenu"; }
        }

public void GetItemInfo(int pos, IItemDef itemDef)
        {
            switch (pos)
            {
                case 0:
                    itemDef.ID = "esriContorls.ControlsSelectTool";
                    break;
                case 1:
                    itemDef.ID = "esriControls.ControlsSendBackwardCommand";
                    break;
                case 2:
                    itemDef.ID = "esriControls.ControlsSnappingEnabledCommand";
                    break;
            }
        }

public int ItemCount
        {
            get {return 3; }
        }

public string Name
        {
            get { return "SumMenu"; }
        }
    }

四、在Form_load()添加如下代码:

IToolbarItem items = axToolbarControl1.GetItem(4); //4为所在工具的索引
            IToolbarMenu menu = items.Menu;
            menu.AddSubMenu(new SubMenu(), 2, true);//2为插入SubMenu的索引位置

toolControls添加工具项的更多相关文章

  1. matplotlib工具栏源码探析三(添加、删除自定义工具项)

    转: matplotlib工具栏源码探析三(添加.删除自定义工具项) matplotlib工具栏源码探析二(添加.删除内置工具项)探讨了工具栏内置工具项的管理,除了内置工具项,很多场景中需要自定义工具 ...

  2. 工具项与菜单项实现相同的功能(DevExpress)

    1.在工具栏中添加菜单项.如下:在bar1工具栏中添加菜单项this.barButtonMenuItem(包含图标) this.bar1.LinksPersistInfo.AddRange(new D ...

  3. [转]使用Maven添加依赖项时(Add Dependency)时,没有提示项目可用,并且在Console中,输出: Unable to update index for central|http://repo1.maven.org/maven2 。

    使用Maven添加依赖项时(Add Dependency)时,没有提示项目可用,并且在Console中,输出: Unable to update index for central|http://re ...

  4. Dynamics CRM2013 1:N关系 sub-grid中的“添加现有项”和“添加新建项”功能详解

    CRM2013中sub-grid的样式和2011中有了较大的变化,2013和2011界面对比如下 在2011的时候按钮是在ribbon区,1:N的父子关系实体直接点击添加新纪录就可以,但2013就不行 ...

  5. CentOS 7系统添加启动项

    CentOS 7系统已经把CentOS 6的 runlevel 系统服务管理替换成了systemd.在 /etc/rc[0-6S].d 下添加启动项已经不能在系统启动的时候自动执行,需要通过新的 sy ...

  6. zabbix (6) 为主机添加监控项,触发器,动作

    先了解一下zabbix的相关概念 监控项(iterms):一个具体的指标,比如某个人的体重. 键(key):通过定义(自定义或者zabbix自带)的key获取相应指标的具体值,比如这个人的体重50斤 ...

  7. Abp 添加权限项<一>

    1.下载代码,数据库迁移,npm install 2.添加权限项: public static class PermissionNames { public const string Pages_Te ...

  8. zabbix添加监控项以及常用的键值

      zabbix自身提供了丰富的监控项,下面以“cpu空闲值”为例介绍zabbix如何添加新的监控项 1.创建主机群组 配置——主机群组——创建主机群组 2.创建主机 配置——主机——创建主机 3.添 ...

  9. zabbix入门之添加监控项

    zabbix入门之添加监控项 添加一个不带参数的监控项(system.cpu.switches) 进入"配置"-->"主机"选择某主机的"监控项 ...

随机推荐

  1. Spark standalone HA

    配置Spark standalone HA 主机:node1,node2,node3 master: node1,node2 slave:node2,node3 修改配置文件: node1,node3 ...

  2. ubuntu-apache如何解决跨域资源访问

    参考:http://blog.csdn.net/emily201314/article/details/52877277 步骤1 #打开apache的headers模块 sudo a2enmod he ...

  3. 网络-->监控-->单位换算

    The metric system In some cases when used to describe data transfer rates bits/bytes are calculated ...

  4. .Net中的加密解密

    返回博客列表 转 .Net中的加密解密 李朝强 发布时间: 2015/11/23 12:55 阅读: 33 收藏: 3 点赞: 0 评论: 0 在一些比较重要的应用场景中,通过网络传递数据需要进行加密 ...

  5. 一个login

    login 1.获取提交表单,保存到变量中.2.判断用户密码是否正确,利用Model类.3.验证用户是否激活.3.判断用户是否记住登录状态,是的话,将其用cookie和session分别保存.没有的话 ...

  6. 禁止盗链,强制回登录页面web.config配置

    <system.web> <compilation debug="true" targetFramework="4.5" /> < ...

  7. 运用requirejs的异步加载方式

    很容易让人以为是权重出问题了,但就我自己多个项目动画导出的经验来看,大 我们说程序员核心能力有以下几点:自学能力,解决问题的能力,团队合作能力.自学可以让我们在这个日新月异的时代不被淘汰;解决问题可以 ...

  8. Python html.parser库学习小结

    分类路径:/Datazen/DataMining/Crawler/   前段时间,一朋友让我做个小脚本,抓一下某C2C商城上竞争对手的销售/价格数据,好让他可以实时调整自己的营销策略.自己之前也有过写 ...

  9. AngularJS实现单页应用的原理——路由(Route)

    AngularJS实现单页应用的原理——路由(Route) 路由:告诉你一个通往某个特定页面的途径 http://127.0.0.1/index.html#/start http://127.0.0. ...

  10. 【Java学习笔记】集合转数组---toArray()

    package p2; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ...