ArcObjects Library Reference  


Migrating from VB6 to VB .NET for ArcGIS 10



[Visual Basic .NET]


Imports System.Runtime.InteropServices
Imports System.Drawing
Imports ESRI.ArcGIS.ADF.BaseClasses
Imports ESRI.ArcGIS.Framework
Imports ESRI.ArcGIS.ArcMapUI
Imports ESRI.ArcGIS.Geodatabase
Imports ESRI.ArcGIS.GeoDatabaseUI
Imports ESRI.ArcGIS.Geometry
Imports ESRI.ArcGIS.esriSystem

<ComClass(clsCopyTableSelection.ClassId, clsCopyTableSelection.InterfaceId, clsCopyTableSelection.EventsId), _
 ProgId("VB2008_BaseClass.clsCopyTableSelection")> _
Public NotInheritable Class clsCopyTableSelection
    Inherits BaseCommand

#Region "COM GUIDs"
    ' These  GUIDs provide the COM identity for this class 
    ' and its COM interfaces. If you change them, existing 
    ' clients will no longer be able to access the class.
    Public Const ClassId As String = "719e02c3-71b7-460e-8719-1c9ffe9d581e"
    Public Const InterfaceId As String = "0ae522ba-7791-4183-a385-b052817501c8"
    Public Const EventsId As String = "a8806b0c-a2cb-4d09-8eca-d1f27195b531"
#End Region

#Region "COM Registration Function(s)"
    <ComRegisterFunction(), ComVisibleAttribute(False)> _
    Public Shared Sub RegisterFunction(ByVal registerType As Type)
        ' Required for ArcGIS Component Category Registrar support
        'Add any COM registration code after the ArcGISCategoryRegistration() call
    End Sub
    <ComUnregisterFunction(), ComVisibleAttribute(False)> _
    Public Shared Sub UnregisterFunction(ByVal registerType As Type)
        ' Required for ArcGIS Component Category Registrar support
        'Add any COM unregistration code after the ArcGISCategoryUnregistration() call
    End Sub
#Region "ArcGIS Component Category Registrar generated code"
    Private Shared Sub ArcGISCategoryRegistration(ByVal registerType As Type)
        Dim regKey As String = String.Format("HKEY_CLASSES_ROOT\CLSID\{{{0}}}", registerType.GUID)
    End Sub
    Private Shared Sub ArcGISCategoryUnregistration(ByVal registerType As Type)
        Dim regKey As String = String.Format("HKEY_CLASSES_ROOT\CLSID\{{{0}}}", registerType.GUID)
    End Sub
#End Region
#End Region

    Private m_application As IApplication
    Private m_TableView2 As ITableView2

    ' A creatable COM class must have a Public Sub New() 
    ' with no parameters, otherwise, the class will not be 
    ' registered in the COM registry and cannot be created 
    ' via CreateObject.
    Public Sub New()

        ' TODO: Define values for the public properties
        MyBase.m_category = "Developer Samples"
        MyBase.m_caption = "Copy Table Selection VB2008 via Base Class"
        MyBase.m_message = "Copies the selected records in the table window VB2008 via Base Class"
        MyBase.m_toolTip = "Validate Table Selection VB2008 via Base Class"
        MyBase.m_name = "Developer Samples_Copy Table Selection VB2008 via Base Class"

            'TODO: change bitmap name if necessary
            Dim bitmapResourceName As String = Me.GetType().Name + ".bmp"
            MyBase.m_bitmap = New Bitmap(Me.GetType(), bitmapResourceName)
        Catch ex As Exception
            System.Diagnostics.Trace.WriteLine(ex.Message, "Invalid Bitmap")
        End Try

    End Sub

    Public Overrides Sub OnCreate(ByVal hook As Object)
        If Not hook Is Nothing Then
            m_application = CType(hook, IApplication)

            'Disable if it is not ArcMap
            If TypeOf hook Is IMxApplication Then
                MyBase.m_enabled = True
                MyBase.m_enabled = False
            End If
        End If

        ' TODO:  Add other initialization code
    End Sub

    Public Overrides Sub OnClick()
    End Sub

    Private Sub Copy()

        ' Get the selection from the table.
        Dim selectionSet As ISelectionSet = m_tableView2.SelectionSet
        Dim table As ITable = m_tableView2.Table
        Dim cursor As ICursor = Nothing

        'Load the selection results into the cursor object.
        selectionSet.Search(Nothing, False, cursor)

        'Get the first row of the cursor.
        Dim rowBuffer As IRowBuffer = cursor.NextRow

        'Initialize the returnString to be empty.
        Dim returnString As String = ""

        'Obtain all of the fields in table.
        Dim fields As IFields = rowBuffer.Fields

        'Loop through all of the rows.
        Dim Count As Integer = fields.FieldCount
        Do Until rowBuffer Is Nothing

            'Loop through all of the fields.
            Dim index As Integer
            For index = 0 To Count - 1
                If Not TypeOf rowBuffer.Value(index) Is IGeometry Then

                    'Extract the strings from each field in the table row.
                    returnString = returnString + rowBuffer.Value(index).ToString + ","

                End If

            Next index

            'Remove the trailing comma.
            returnString = Left(returnString, Len(returnString) - 1)

            'Add the line feed.
            returnString = returnString + vbNewLine

            'Go to the next row.
            rowBuffer = cursor.NextRow


        'Copy the contents of the clipboardString to the Clipboard.

    End Sub

    Public Overrides ReadOnly Property Enabled() As Boolean

            'Create a new instance of the TableWindowClass using the ITableWindow3 interface
            Dim tableWindow3 As ITableWindow3 = New TableWindowClass

            'Create an empty ISet to hold the open table windows
            Dim windowSet As ISet = Nothing

            'The .FindOpenTableWindows populates the windowSet object byRef

            'Go to the first item in the ISet

            'Cast the first ISet object to an ITableWindow
            Dim tableWindow As ITableWindow = CType(windowSet.Next, ITableWindow)

            'Loop through the tableWindows.
            Do Until tableWindow Is Nothing

                'Get the TableControl from tthe TableWindow
                Dim tableControl As ITableControl = tableWindow.TableControl

                'Set the member (also known as, Global) variable ITableView2 interface.
                m_TableView2 = CType(tableControl, ITableView2)

                'If you have selected records, enable the command.
                Dim selectionSet As ISelectionSet = m_TableView2.SelectionSet
                If selectionSet.Count > 0 Then
                    Return True
                End If

                'Iterate over the next ArcMap Window.
                tableWindow = CType(windowSet.Next, ITableWindow)


            'If TableWindow is not found, disable the command.
            Return False
        End Get
    End Property

End Class