我正在开发ArcMap 10.0的外接程序,该外接程序将工具栏添加到ArcMap。OpenModelessDialogCommand
该工具栏上的一个命令()按钮打开一个无模式的WinForms对话框,MyTool
可以从中激活一个工具(),以便例如在地图上选择一个要素。
我的Config.esriaddinx
包含以下命令和工具栏声明:
<Commands>
<!-- this is the command that opens the modeless WinForms form, from where
MyTool is available: -->
<Button id="OpenModelessFormCommand" ... />
<!-- MyTool is not directly referenced in any toolbar defined in this file: -->
<Tool id="MyTool" class="MyTool" ... />
</Commands>
<Toolbars>
<Toolbar ...>
<Items>
<Button refID="OpenModelessFormCommand" />
</Items>
</Toolbar>
</Toolbars>
我遇到的问题是正在激活MyTool
表单。我在网上发现的所有代码示例大致如下:
// get a reference to an instance of MyTool:
ICommandItem myTool = ArcMap.Application.Document.CommandBars.Find("MyTool");
// activate MyTool:
ArcMap.Application.CurrentTool = myTool;
但是,这显然要求它MyTool
实际出现在我的加载项的命令栏(例如工具栏)中。但是事实并非如此。所以,我接下来尝试了这个:
ITool myTool = new MyTool();
ArcMap.Application.CurrentTool = myTool; // Type mismatch! An ICommandItem is expected.
我什至考虑在AxToolbarControl
表单中添加一个不可见的元素,并为此添加一个按钮MyTool
。但是随后我遇到了如何将工具栏(通过SetBuddyControl
)连接到打开的文档地图的问题。我不希望该工具单独运行AxMapControl
,而是希望它直接与ArcMap中显示的主地图一起使用。
问题:
如何激活未添加到任何工具栏(或其他命令栏)的自定义工具?
bug
似乎还不存在。请随时自行编辑标签。