Migrating from VB6 to VB .NET for ArcGIS 10
[C#]
clsCopyTableSelection.cs
[Visual Basic .NET]
clsCopyTableSelection.vb
Imports System.Runtime.InteropServices Imports System.Drawing Imports ESRI.ArcGIS.ADF.BaseClasses Imports ESRI.ArcGIS.ADF.CATIDs 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 ArcGISCategoryRegistration(registerType) '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 ArcGISCategoryUnregistration(registerType) '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) MxCommands.Register(regKey) End Sub Private Shared Sub ArcGISCategoryUnregistration(ByVal registerType As Type) Dim regKey As String = String.Format("HKEY_CLASSES_ROOT\CLSID\{{{0}}}", registerType.GUID) MxCommands.Unregister(regKey) 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() MyBase.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" Try '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 Else MyBase.m_enabled = False End If End If ' TODO: Add other initialization code End Sub Public Overrides Sub OnClick() Copy() 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 Loop 'Copy the contents of the clipboardString to the Clipboard. My.Computer.Clipboard.Clear() My.Computer.Clipboard.SetText(returnString) End Sub Public Overrides ReadOnly Property Enabled() As Boolean Get '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 tableWindow3.FindOpenTableWindows(windowSet) 'Go to the first item in the ISet windowSet.Reset() '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) Loop 'If TableWindow is not found, disable the command. Return False End Get End Property End Class