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 事件中执行的。它在 identifyDialog 中显示地图中的选定要素,就像您需要它一样,除了我使用 AddLayerIdentifyOID() 而不是 AddLayerIdentifyPoint() 虽然两者都应该工作。

    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 回答