今回は、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