FAQ
イベントのハンドリング方法

ナレッジ番号:5299 | 登録日:2023/07/26 | 更新日:2023/12/28

概要

イベントは、Windows アプリケーションが通知を受けるための仕組みです。Windows アプリケーションでは、MouseMove、MouseLeave、MouseClick など、さまざまなイベントが発生します。このトピックでは、ArcObjects が持つイベントを .NET で処理する方法について説明します。

ArcObjects イベントの処理を開始するための手順

  1. グローバル変数として ArcObjects のイベント インターフェイスを宣言します。宣言する型は、<イベント インターフェイス名>_Event です。
    private <イベント インターフェイス名>_Event <グローバル変数>; 
    
    Private <グローバル変数> As <イベント インターフェイス名>_Event 
    
  2. 宣言したイベント インターフェイスにキャストします。
    <グローバル変数> = オブジェクト;
    
    <グローバル変数> = オブジェクト
    
  3. デリゲートのシグネチャによって指定されたイベント ハンドラー メソッドを実装します。イベントによっては引数部に値が返されるものがあります。ヘルプのリファレンスを参考にイベントに応じた引数を定義します。
    private void <メソッド名>(<イベントに応じた引数の設定>)
    {
      //処理内容を記述
    }
    
    Private Sub <メソッド名>(<イベントに応じた引数の設定>)
        '処理内容を記述
    End Sub
    
  4. イベントのハンドリングを開始したいタイミングでイベントの登録を開始します。イベントの登録は += 演算子、もしくは AddHandler ステートメントを使用します。 
    <グローバル変数>.<イベント名> += new <イベント インターフェイス>_<イベント名>EventHandler(<メソッド名>);
    
    AddHandler <グローバル変数>.<イベント名>, AddressOf <メソッド名>
    
  5. イベント処理を終了したい場合は、イベント ハンドラーの登録を解除します。イベントの登録解除は -= 演算子、もしくは RemoveHandler ステートメントを使用します。 
    <グローバル変数>.<イベント名> -= new <イベント インターフェイス>_<イベント名>EventHandler(<メソッド名>);
    
    RemoveHandler <グローバル変数>.<イベント名>, AddressOf <メソッド名>
    

サンプル コード

IActiveViewEvents::ViewRefreshed イベントの使用例

このコードでは、アクティブなビューが再描画された場合にイベントを発生する方法を示します。

//グローバル変数宣言
private IActiveViewEvents_Event m_pActiveViewEvents;

private void toolStripMenuItem2_Click(object sender, EventArgs e)
{
    m_pActiveViewEvents = (IActiveViewEvents_Event)pActiveView; //IActiveView にキャスト可能なオブジェクト
            
    //イベント ハンドラーの登録
    m_pActiveViewEvents.ViewRefreshed += new IActiveViewEvents_ViewRefreshedEventHandler(myViewRefreshed);

    //イベント ハンドラーの登録解除
    m_pActiveViewEvents.ViewRefreshed -= new IActiveViewEvents_ViewRefreshedEventHandler(myViewRefreshed);
}

private void myViewRefreshed(IActiveView view,  esriViewDrawPhase phase,  object Data, IEnvelope envelope)
{
    //処理内容を記述
}
'グローバル変数宣言
Private m_pActiveViewEvents As IActiveViewEvents_Event

Private Sub ToolStripMenuItem3_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripMenuItem3.Click
    
    'オブジェクトのキャスト
    m_pActiveViewEvents = CType(pActiveView, IActiveViewEvents_Event) 'IActiveView にキャスト可能なオブジェクト
    
    'イベント ハンドラーの登録
    AddHandler m_pActiveViewEvents.ViewRefreshed, AddressOf MyViewRefreshed
    
    'イベント ハンドラーの解除
    RemoveHandler m_pActiveViewEvents.ViewRefreshed, AddressOf MyViewRefreshed
    
End Sub

'イベント実行時の処理メソッド
Private Sub MyViewRefreshed(ByVal View As IActiveView, ByVal phase As esriViewDrawPhase, ByVal Data As Object, ByVal envelope As IEnvelope)
    '処理内容を記述
End Sub

メタデータ

種類

製品