ArcGIS Engine コマンドを ToolbarControl を使用せずに Windows フォーム ボタンから呼び出すには?
今回は、ArcGIS Engine 開発者向け Tips のご紹介です。
ArcGIS Engine アプリケーションでは、すぐに利用可能なビルトインのコントロール コマンドや独自に開発したカスタム コマンドを利用することができます。これらのコマンドを格納するためのツールバーには、ArcGIS Desktop アプリケーション フレームワークと同様のフレームワークをすばやく提供できるといった利点をもつ ToolbarControl(ArcObjects SDK に付属の ArcGIS コントロールのひとつ)が使用されます。
しかしながら、ArcGIS Engine コマンドを、ToolbarControl を介さずに Windows フォーム ボタン(Button や ToolStripButton)から直接呼び出して実行したいと思ったことはありませんか?例えば、以下のようなケースが考えられます。
• ToolbarControl の外観がアプリケーションとマッチしない
• ToolbarControl のコマンド オブジェクトを実装するオーバーヘッドが無駄である
• アプリケーションにすでに別のアプリケーション フレームワークが存在する
これは、次のようなコードの記述により実現可能です。
' コマンドの新しいインスタンスを生成(例:[全体表示] コマンドなど)
Dim pCommand1 As ICommand = New ControlsMapFullExtentCommandClass
' MapControl を OnCreate イベントに渡す
pCommand1.OnCreate(AxMapControl1.Object)
' 適切なタイミングで OnClick メソッドを実行
pCommand1.OnClick()
ツールについても同様に、次のようなコードで実行が可能です。
' ツールの新しいインスタンスを生成(例:[フィーチャ選択] ツールなど)
Dim pCommand2 As ICommand = New ControlsSelectFeaturesToolClass
' MapControl を OnCreate イベントに渡す
pCommand2.OnCreate(AxMapControl1.Object)
' ツールを MapControl の CurrentTool に設定
AxMapControl1.CurrentTool = pCommand2
必要に応じて、Visual Studio 開発環境上で、コマンド・ツールのプロパティ設定(Enabled、Caption、Bitmap など)を変更し、UI ボタンの外観を変更することもできます。また、CommandPool オブジェクトを使用して、複数のコマンドを組み合わせて、一度に機能を実行することも可能です。たとえば、上記のコマンドとツールを組み合わせると、以下のようになります。
Dim pCommandPool As ICommandPoolEdit = New CommandPoolClass
Dim pFullExtent = New ControlsMapFullExtentCommandClass ' [全体表示] コマンド
Dim pSelectFeat = New ControlsSelectFeaturesToolClass ' [フィーチャ選択] ツール
pCommandPool.AddCommand(pFullExtent, Nothing) ' コマンドを追加
pCommandPool.AddCommand(pSelectFeat, Nothing) ' ツールを追加
Dim cp As ICommandPool = pCommandPool 'コマンド プールを設定
' コマンド プールから [全体表示] コマンドを呼び出して実行
Dim pCommand1 As ICommand = cp.Command(0)
pCommand1.OnCreate(AxMapControl1.Object)
pCommand1.OnClick()
' コマンド プールから [フィーチャ選択] ツールを呼び出して 実行
Dim pCommand2 As ICommand = cp.Command(1)
pCommand2.OnCreate(AxMapControl1.Object)
AxMapControl1.CurrentTool = pCommand2
ArcGIS Engine コントロール コマンドの一覧や使用方法の詳細については、下記の関連リンクをご参照ください。
■関連リンク:
• ArcGIS Engine commands
• How to create a command or tool to work with the controls