FAQ
エディター(EngineEditor)のイベントを利用する方法

ナレッジ番号:2765 | 登録日:2023/05/29 | 更新日:2023/12/28

概要

EngineEditor はシングルトン オブジェクト(1 スレッドに付き、1 インスタンスのみサポートされるオブジェクト)で、編集環境の管理を担い、EngineEditor のイベントの制御にも利用できます。

サンプル コード

EngineEditor のイベントの定義

以下はイベントを利用した処理を記述するためのサンプルコードです。この例では OnStartEditing イベントを利用し、編集が開始されるタイミングでメッセージを表示しています。
Private EngineEditor m_EngineEditor = new EngineEditorClass();
private IEngineEditEvents_Event m_EngineEditEvents;

private void MainForm_Load(object sender, EventArgs e)
{
    m_EngineEditEvents = (IEngineEditEvents_Event)m_EngineEditor;
    m_EngineEditEvents.OnStartEditing += new IEngineEditEvents_OnStartEditingEventHandler(OnStartEditingMethod);
    // 登録解除は以下の通り。 
    // m_EngineEditEvents.OnStartEditing -= new IEngineEditEvents_OnStartEditingEventHandler(OnStartEditingMethod);
}

private void OnStartEditingMethod()
{
  System.Windows.Forms.MessageBox.Show("編集が開始されました。");
}
Private m_EngineEditor As EngineEditor = New ESRI.ArcGIS.Controls.EngineEditorClass()
Private m_EngineEditEvents As IEngineEditEvents_Event

Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As EventArgs) Handles MyBase.Load
    m_EngineEditEvents = CType(m_EngineEditor, IEngineEditEvents_Event)
    AddHandler m_EngineEditEvents.OnStartEditing, AddressOf OnStartEditingMethod
    '登録解除は以下の通り。 
    'RemoveHandler m_EngineEditEvents.OnStartEditing, AddressOf OnStartEditingMethod
End Sub

Private Sub OnStartEditingMethod()
  System.Windows.Forms.MessageBox.Show("編集が開始されました。")
End Sub

フィーチャ編集の制御

フィーチャを編集する際に特定の属性値は変更不可としたい場合、例えば Shape フィールドの変更は許可しない制御が必要となる場合等、 OnChangeFeature イベントで制御することができます。以下は Shapeフィールドが変更されていたら OnChangeFeature イベントのタイミングで編集オペレーションを破棄するサンプルコードです。

m_EngineEditEvents.OnChangeFeature += new IEngineEditEvents_OnChangeFeatureEventHandler(OnChaneFeatureMethod);
private void OnChaneFeatureMethod(IObject obj)
{
    IFeatureChanges featurechg = (IFeatureChanges)obj;
    IGeometry pOldgeo  = featurechg.OriginalShape;
    IGeometry pNewgeo = ((IFeature)obj).Shape;
    IRelationalOperator prel  = (IRelationalOperator)pOldgeo;
    if (!prel.Equals(pNewgeo)) m_EngineEditor.AbortOperation();
    //'編集前と編集後の Geometry の形状が異なっていたら、
   //'Geometry を元の値に戻す。
}
AddHandler m_EngineEditEvents.OnChangeFeature, AddressOf OnChangeFeatureMethod
Private Sub OnChangeFeatureMethod(obj As IObject)
        Dim featurechg As IFeatureChanges = CType(obj, IFeatureChanges)
        Dim pOldgeo As IGeometry = featurechg.OriginalShape
        Dim pNewgeo As IGeometry = CType(obj, IFeature).Shape
        Dim prel As IRelationalOperator = CType(pOldgeo, IRelationalOperator)
        If Not prel.Equals(pNewgeo) Then m_EngineEditor.AbortOperation()
        '編集前と編集後の Geometry の形状が異なっていたら、
         'オペレーションを破棄する。
End Sub

メタデータ

種類

製品