ToolbarControlに追加・削除を繰り返す際はEngineEditorはシングルトン クラスを都度開始・終了処理する必要がある。オペレーションスタックがうまく動作しない
//--------------------------------------------------------------------- /// <summary> /// エディタエクステンションを開始する /// </summary> //--------------------------------------------------------------------- protected void startupEngineEditor() { IEngineEditor pEngineEditor; IExtension pExtention; object pToolbarObject; if (pEngineToolbar.CommandPool == null) { pEngineToolbar.CommandPool = new CommandPoolClass(); } if (pEngineToolbar.OperationStack == null) { pEngineToolbar.OperationStack = new ControlsOperationStackClass(); } System.Type t = Type.GetTypeFromProgID("esriControls.EngineEditor"); pEngineEditor = CType(Activator.CreateInstance(t), IEngineEditor); // ツールバーのUndo,Redoを有効にする pEngineEditor.EnableUndoRedo(true); // エディタエクステンションの開始 pToolbarObject = (object)pEngineToolbar; pExtention = (IExtension)pEngineEditor; pExtention.Startup(ref pToolbarObject); } //--------------------------------------------------------------------- /// <summary> /// エディタエクステンションを終了する /// </summary> //--------------------------------------------------------------------- protected void shutdownEngineEditor() { IEngineEditor pEngineEditor; IExtension pExtention; System.Type t = Type.GetTypeFromProgID("esriControls.EngineEditor"); pEngineEditor = CType(Activator.CreateInstance(t), IEngineEditor); pExtention = (IExtension)pEngineEditor; pExtention.Shutdown(); }
'--------------------------------------------------------------------- ''' <summary> ''' エディタエクステンションを開始する ''' </summary> '--------------------------------------------------------------------- Protected Sub startupEngineEditor() Dim pEngineEditor As IEngineEditor Dim pExtention As IExtension Dim pToolbarObject As Object If pEngineToolbar.CommandPool Is Nothing Then pEngineToolbar.CommandPool = New CommandPoolClass() End If If pEngineToolbar.OperationStack Is Nothing Then pEngineToolbar.OperationStack = New ControlsOperationStackClass() End If 'pEngineEditor = New EngineEditorClass() Dim t as System.Type = Type.GetTypeFromProgID("esriControls.EngineEditor") pEngineEditor = CType(Activator.CreateInstance(t), IEngineEditor) ' ツールバーのUndo,Redoを有効にする pEngineEditor.EnableUndoRedo(True) ' エディタエクステンションの開始 pToolbarObject = DirectCast(pEngineToolbar, Object) pExtention = DirectCast(pEngineEditor, IExtension) pExtention.Startup(pToolbarObject) End Sub '--------------------------------------------------------------------- ''' <summary> ''' エディタエクステンションを終了する ''' </summary> '--------------------------------------------------------------------- Protected Sub shutdownEngineEditor() Dim pEngineEditor As IEngineEditor Dim pExtention As IExtension pEngineEditor = New EngineEditorClass() pExtention = DirectCast(pEngineEditor, IExtension) pExtention.Shutdown() End Sub