0

私は ArcObjects SDK を初めて使用し、苦労しています。レコードを選択するためのクエリを実行する Python アドインがあり (うまく機能します)、識別ダイアログ ボックスを表示して選択したレコードの属性を表示する .NET アドイン ボタンを介して識別ダイアログを呼び出そうとしています。以下は、この時点で私が持っているコードです。現在、識別ダイアログが表示されていますが、レコードが表示されません。選択したレコードをどこかに入力する必要があることはわかっています....しかし、どこにあるのかわかりません。任意の考えをいただければ幸いです。(Visual Studio/Microsoft Visual Basic 2010 および ArcGIS 10.2.1 を使用しています)

Imports ESRI.ArcGIS.ArcMapUI
Imports ESRI.ArcGIS.Carto

Public Class Identify_Button
Inherits ESRI.ArcGIS.Desktop.AddIns.Button
Dim pMxDoc As IMxDocument
Dim activeView As IMap

Public Sub DoIdentify(ByVal activeView As ESRI.ArcGIS.Carto.IActiveView, ByVal x As System.Int32, ByVal y As System.Int32)
    pMxDoc = My.ArcMap.Application.Document
    activeView = pMxDoc.FocusMap
    If activeView Is Nothing Then
        Return
    End If

    Dim map As ESRI.ArcGIS.Carto.IMap = activeView.FocusMap
    Dim identifyDialog As ESRI.ArcGIS.CartoUI.IIdentifyDialog = New ESRI.ArcGIS.CartoUI.IdentifyDialogClass
    identifyDialog.Map = map

    'Clear the dialog on each mouse click
    identifyDialog.ClearLayers()
    Dim screenDisplay As ESRI.ArcGIS.Display.IScreenDisplay = activeView.ScreenDisplay

    Dim display As ESRI.ArcGIS.Display.IDisplay = screenDisplay ' Implicit Cast
    identifyDialog.Display = display

    Dim identifyDialogProps As ESRI.ArcGIS.CartoUI.IIdentifyDialogProps = CType(identifyDialog, ESRI.ArcGIS.CartoUI.IIdentifyDialogProps) ' Explicit Cast
    Dim enumLayer As ESRI.ArcGIS.Carto.IEnumLayer = identifyDialogProps.Layers
    enumLayer.Reset()

    Dim layer As ESRI.ArcGIS.Carto.ILayer = enumLayer.Next

    Do While Not (layer Is Nothing)
        identifyDialog.AddLayerIdentifyPoint(layer, x, y)
        layer = enumLayer.Next()
    Loop

    identifyDialog.Show()

End Sub
Public Sub New()

End Sub

Protected Overrides Sub OnClick()
    DoIdentify(activeView, 300, 100)
End Sub

Protected Overrides Sub OnUpdate()
    Enabled = My.ArcMap.Application IsNot Nothing
End Sub

クラス終了

4

1 に答える 1

0

以下のコードを試してみてください。これは、BaseCommand から継承する ArcMap コマンド ボタンの OnClick イベントから実行されます。AddLayerIdentifyPoint() の代わりに AddLayerIdentifyOID() を使用したことを除いて、あなたが必要としていたのと同じように、identifyDialog のマップで選択された地物を表示しますが、どちらも機能するはずです。

    Public Overrides Sub OnClick()
    'VBTest.OnClick implementation
    Try
        Dim mxDoc As IMxDocument = m_application.Document
        Dim map As ESRI.ArcGIS.Carto.IMap = mxDoc.FocusMap
        Dim layer As ESRI.ArcGIS.Carto.ILayer
        Dim flayer As ESRI.ArcGIS.Carto.IFeatureLayer
        Dim featSelection As ESRI.ArcGIS.Carto.MapSelection = map.FeatureSelection
        Dim feat As ESRI.ArcGIS.Geodatabase.IFeature = featSelection.Next()
        Dim count As Int16 = 0

        While feat IsNot Nothing
            count += 1 ' flag for clearing layers
            flayer = New ESRI.ArcGIS.Carto.FeatureLayer()
            flayer.FeatureClass = feat.Class
            layer = flayer

            DoIdentify(layer, feat.OID, (count = 1))

            feat = featSelection.Next()
        End While

    Catch ex As Exception
        ' handle error
        MsgBox("Error: " + ex.Message)
    End Try

End Sub

Private Sub DoIdentify(ByVal layer As ESRI.ArcGIS.Carto.ILayer, ByVal OID As Int32, Optional ByVal clearLayers As Boolean = True)

    If layer Is Nothing Or OID <= 0 Then
        Return
    End If

    Dim pMxDoc As IMxDocument = m_application.Document
    Dim activeView As ESRI.ArcGIS.Carto.IActiveView = pMxDoc.ActiveView
    Dim map As ESRI.ArcGIS.Carto.IMap = activeView.FocusMap
    Dim identifyDialog As ESRI.ArcGIS.CartoUI.IIdentifyDialog = New ESRI.ArcGIS.CartoUI.IdentifyDialogClass()
    Dim screenDisplay As ESRI.ArcGIS.Display.IScreenDisplay = activeView.ScreenDisplay
    Dim display As ESRI.ArcGIS.Display.IDisplay = screenDisplay

    identifyDialog.Map = map ' REQUIRED
    identifyDialog.Display = display ' REQUIRED

    ' Clear the dialog
    If clearLayers Then
        identifyDialog.ClearLayers()
    End If

    ' Add our selected feature to the dialog
    identifyDialog.AddLayerIdentifyOID(layer, OID)

    ' Show the dialog
    identifyDialog.Show()

End Sub
于 2014-07-28T15:56:21.717 に答える