ArcGIS Engine コマンドを ToolbarControl を使用せずに Windows フォーム ボタンから呼び出すには?


今回は、ArcGIS Engine 開発者向け Tips のご紹介です。

ArcGIS Engine アプリケーションでは、すぐに利用可能なビルトインのコントロール コマンドや独自に開発したカスタム コマンドを利用することができます。これらのコマンドを格納するためのツールバーには、ArcGIS Desktop アプリケーション フレームワークと同様のフレームワークをすばやく提供できるといった利点をもつ ToolbarControl(ArcObjects SDK に付属の ArcGIS コントロールのひとつ)が使用されます。

1_2


しかしながら、ArcGIS Engine コマンドを、ToolbarControl を介さずに Windows フォーム ボタン(ButtonToolStripButton)から直接呼び出して実行したいと思ったことはありませんか?例えば、以下のようなケースが考えられます。

• 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

2_2

必要に応じて、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