自定义的工具栏中使用engine提供的内建命令

本文探讨了在ArcGIS应用程序中实现工具栏按钮响应的问题。详细解释了如何正确设置工具(Tool)与命令(Command)的区别,并给出了具体的代码示例来解决button2无法正常工作的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 感谢kisssy!!

代码如下  

private void Form1_Load(object sender, System.EventArgs e)
  {
   ToolbarControlClass axToolbarControl1 = new ToolbarControlClass();
   IToolbarControl toolBar1;
   toolBar1 = axToolbarControl1;
   toolBar1.SetBuddyControl(axMapControl1);
  
  }
  private void toolBar1_ButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e)
  {
  
   if (e.Button == toolBarButton1)
   {
    ICommand command = new ControlsMapPanToolClass();
    command.OnCreate(axMapControl1.Object);
    axMapControl1.CurrentTool = command as ITool;
      }

   if (e.Button == toolBarButton2)
   {
    ICommand command = new ControlsMapFullExtentCommandClass();
    command.OnCreate(axMapControl1.Object);
    axMapControl1.CurrentTool = command as ITool;
     }
现在只有button1可用,button2不行,不知是何原因,请指教,谢谢

 

 

当然不行啊!

要注意Tool和Command的区别

通俗的说:

Command是在工具栏一点击,就出效果。如FullExtent,Refresh;

而Tool在工具栏点击后并无直接反映,而是等到你在地图上点击或移动后,产生效果,如Zoomin,Zoomout,Pan,Identify等等

具体哪些是Tool,哪些是Command,可以参照相关OMD。

Tool使用类似你的Button1;

而Command应该:

if (e.Button == toolBarButton2)
   {
    ICommand command = new ControlsMapFullExtentCommandClass();
    command.OnCreate(axMapControl1.Object);
    command.OnClick();
     }

 

commandpool:说白了就是Command Collection

hookhelper:一般在你自己写一个Command类模块的时候用,用法可以看例子,概括的讲:

1、Class_Initialize中:Set m_pHookHelper = New HookHelper
2、ICommand_OnCreate(ByVal hook As Object)中:Set m_pHookHelper.hook = hook
3、ICommand_OnClick()中就可以通过m_pHookHelper得到:ActiveViewFocusMapPageLayout(如在OnCreate中传入PageLayoutControl)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值