A custom toolbar created using ICommandBars.Create() cannot be obtained by ICommandBars.Find() on a separate sub-procedure in order to add built-in commands.
上次发布: October 11, 2017ArcGIS for Desktop
漏洞 ID 编号
NIM063076
已提交
November 24, 2010
上次修改时间
June 5, 2024
适用范围
ArcGIS for Desktop
找到的版本
10.0
编程语言
VBA
操作系统
Windows OS
操作系统版本
XP
状态
Will Not Be Addressed
开发团队已考虑过该问题或请求,并决定不会解决该问题。 问题的“其他信息”部分可能包含进一步说明。
附加信息
VBA is no longer supported. Please use .NET instead
解决办法
Add built-in commands using the reference to ICommandBar returned by ICommandBars.Create() instead of ICommandBars.Find(). In other words, follow the sample code in the following link:
http://resources.esri.com/help/9.3/ArcGISDesktop/ArcObjects/esriFramework/ICommandBar_Example.htm
If there is a need to first create a custom toolbar (for example, in the OpenDocument event of the MxDocument) and add built-in commands to that custom toolbar at a later time in the same ArcMap session, in a different sub procedure or function, use a module-level or global-level variable to use the reference to the custom toolbar returned by the Create() method and so one does not need to depend on the failing Find() method. See sample in this document VBA module:
'***** Declare a module-level variable with the Private keyword **************
'** Alternatively, declare a global-level variable with the Public keyword ***
'** Both module-level variables declared in this module called ThisDocument***
'** and global-level variables declared anywhere in the Project are **********
'** accessible by any statement in this module *******************************
Private m_pNewBar As ICommandBar
'Public g_pNewBar As ICommandBar
Sub CreateBar1st()
Dim pCmdBars As ICommandBars
Set pCmdBars = ThisDocument.CommandBars
'Dim pNewBar As ICommandBar > no longer needed; declared as module-level
' ** Since the toolbar below is created and referenced by a module-level *
' ** variable, it will persist throughout the ArcMap session because the *
' ** ThisDocument module is linked to the .mxd file. *********************
Set m_pNewBar = pCmdBars.Create("MyBar", esriCmdBarTypeToolbar)
End Sub
Public Sub AddCommands2nd()
'*** This procedure will attempt to add built-in commands ***
'*** to a custom toolbar created previously during the ******
'*** same runtime (ArcMap session) using the Create() method*
'*** Run this as a macro after CreateBar1st() has run.*******
m_pNewBar.Add ArcID.File_AddData
m_pNewBar.Add ArcID.PanZoom_FullExtent
End Sub
Private Function MxDocument_OpenDocument() As Boolean
Call CreateBar1st
End Function