POST
|
Thanks for the tips, but I still can't get it to work; ArcMap crashes all the time. I'm using the sample code for the UseUpdateCursor, but it's not working. I'm not sure how to get the selected feature and update the attributes of the selected. This is the sample that I'm using:
Public Sub UseUpdateCursor(ByVal featureClass As IFeatureClass)
Dim queryFilter As IQueryFilter = New QueryFilterClass()
queryFilter.WhereClause = "Feature = 'Test'"
queryFilter.SubFields = "Source"
' Use IFeatureClass.Update to populate IFeatureCursor.
Dim updateCursor As IFeatureCursor = featureClass.Update(Nothing, False)
Dim typeFieldIndex As Integer = featureClass.FindField("queryFilter")
Try
Dim feature As IFeature = updateCursor.NextFeature()
Do While Not feature Is Nothing
feature.Value(typeFieldIndex) = "Coordinates"
updateCursor.UpdateFeature(feature)
feature = updateCursor.NextFeature()
Loop
Catch comExc As COMException
' Handle any errors that might occur on NextFeature().
End Try
' If the cursor is no longer needed, release it.
Marshal.ReleaseComObject(updateCursor)
End Sub
... View more
06-26-2012
05:00 AM
|
0
|
0
|
717
|
POST
|
If you are just doing analysis (Geoprocessing), it might be easier to use the Model Builder and Python. But, if you want to use UI, you�??ll have to get familiar with ArcObjects and create ArcMap Add-Ins, with VS2010. This is a good starting point: http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/Walkthrough_Building_custom_UI_elements_using_add_ins/0001000001ms000000/
... View more
06-22-2012
09:06 AM
|
0
|
0
|
177
|
POST
|
I'm trying to build a form that would assign a value to a field, for the selected features, during an edit session. The user would create a new feature (in Edit mode) and the form would fill the attribute table. If the user is not in edit mode, the table won't be updated. I'm kinda stuck there (vb.NET): Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim pMxDoc As IMxDocument Dim pLayer As ILayer Dim pFLayer As IFeatureLayer Dim pFeatClass As IFeatureClass Dim pMap As IMap Dim pCursor As ICursor Dim pFSel As IFeatureSelection Dim pSelSet As ISelectionSet2 pMxDoc = My.ArcMap.Document pMap = pMxDoc.FocusMap pLayer = pMxDoc.SelectedLayer pFLayer = pLayer pFeatClass = pFLayer.FeatureClass pCursor = pFeatClass.Update(Nothing, True) pFSel = pLayer pSelSet = pFSel.SelectionSet pSelSet.Update(Nothing, False, pCursor) Do Until pFSel Is Nothing pFSel.Value(pFSel.Fields.FindField("Source")) = "Coordinate" pFSel = pFSel.Next Loop End Sub
... View more
06-22-2012
08:26 AM
|
0
|
13
|
1661
|
POST
|
How can I close a Form without ArcMap crashing? Example:
Imports ESRI.ArcGIS.esriSystem
Imports ESRI.ArcGIS.Geometry
Imports ESRI.ArcGIS.Geodatabase
Imports ESRI.ArcGIS.Carto
Imports System.IO
Imports Microsoft.VisualBasic
Imports System
Imports System.Windows.Forms
Public Class FindAddressForm
Inherits System.Windows.Forms.Form
Public Sub New()
MyBase.New()
InitializeComponent()
' Populate the street name ComboBox from text file
Dim streetList As String
streetList = "\\csjs186\CPCommon\ArcMap Add-ins\StreetNameList2.txt"
If File.Exists(streetList) Then
Dim r As IO.StreamReader
r = New IO.StreamReader(streetList)
While (r.Peek() > -1)
ComboBox1.Items.Add(r.ReadLine.Trim)
End While
r.Close()
Else
MsgBox("Can't find " + streetList)
Me.Close()
End If
End Sub
... View more
06-22-2012
04:14 AM
|
0
|
2
|
635
|
POST
|
Found a solution from there: http://forums.esri.com/Thread.asp?c=93&f=985&t=84492
If (feature.Value(taxname)) Is DBNull.Value Then
Me.TextBox2.Text = ""
Else
Me.TextBox2.Text = feature.Value(taxname)
End If
... View more
06-20-2012
10:49 AM
|
0
|
0
|
181
|
POST
|
Any idea how I can get ArcMap to stop crashing, when getting NULL attribute values, from a GDB? This code works, but not with NULLs: Dim cursor As IFeatureCursor
Dim feature As IFeature
Dim taxname As Integer
cursor = featureLayer.Search(queryFilter, False)
feature = cursor.NextFeature
taxname = feature.Fields.FindField("taxname")
Me.TextBox2.Text = feature.Value(taxname)
... View more
06-20-2012
10:05 AM
|
0
|
1
|
645
|
POST
|
Joe, thanks for your reply, but I had already tried that without success. Instead of trying to get the selected feature in the cursor, it's just easier to re-perform the selection query, from the cursor; as Ken pointed out. cursor = featureLayer.Search(queryFilter, False)
... View more
06-20-2012
07:56 AM
|
0
|
0
|
77
|
POST
|
Gosh, it seems so obvious now..lol Thanks a bunch, Ken!
... View more
06-20-2012
07:46 AM
|
0
|
0
|
447
|
POST
|
haha, it's not really working, because it returns the values of the first row, in the attribute table. I just want the values of the selected feature.
... View more
06-20-2012
06:55 AM
|
0
|
0
|
447
|
POST
|
I got it to work. I changed this: featureSelection.SelectionSet.Search(Nothing, False, cursor) with this: cursor = featureLayer.Search(Nothing, False) But, I'm getting the values of the first row, not the selected feature.
... View more
06-20-2012
06:45 AM
|
0
|
0
|
447
|
POST
|
Thanks Bruce, that fixed one problem. Now I get the MessageBox, but I get no values. I believe the problem is with the cursor, because it says the cursor is use without being assigned a value, in the following statement: featureSelection.SelectionSet.Search(Nothing, False, cursor)
... View more
06-20-2012
06:26 AM
|
0
|
0
|
447
|
POST
|
After selecting a feature through a query, I'd like a message box to pop up with 2 field values. This is what I have (in red): Public Sub SelectMapFeaturesByAttributeQuery(ByVal activeView As IActiveView, ByVal featureLayer As IFeatureLayer, ByVal whereClause As System.String)
If activeView Is Nothing OrElse featureLayer Is Nothing OrElse whereClause Is Nothing Then
Return
End If
Dim featureSelection As IFeatureSelection = TryCast(featureLayer, IFeatureSelection) ' Dynamic Cast
' Set up the query
Dim queryFilter As IQueryFilter = New QueryFilterClass
queryFilter.WhereClause = whereClause
' Invalidate only the selection cache. Flag the original selection
activeView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, Nothing, Nothing)
' Perform the selection
featureSelection.SelectFeatures(queryFilter, esriSelectionResultEnum.esriSelectionResultNew, False)
' If PID found, Flag the new selection
If featureSelection.SelectionSet.Count() = 0 Then
MsgBox("Can't find the PID")
Else
activeView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, Nothing, Nothing)
End If
' Zoom to selected feature, if checkmarked
If CheckBox1.CheckState = 1 Then
Dim pUID As New UID
pUID.Value = "esriArcMapUI.ZoomToSelectedCommand"
My.ArcMap.Application.Document.CommandBars.Find(pUID).Execute()
End If
' Display Owner's Name and PAN in message box
Dim cursor As IFeatureCursor
Dim feature As IFeature
Dim patspan As String
Dim taxname As String
featureSelection.SelectionSet.Search(Nothing, False, cursor)
feature = cursor.NextFeature
patspan = feature.Fields.FindField("patspan")
taxname = feature.Fields.FindField("taxname")
Do Until feature Is Nothing
MsgBox("PAN: " + feature.Value(patspan) + vbNewLine + "Owner's Name: " + feature.Value(taxname))
feature = cursor.NextFeature
Loop
End Sub
End Class
... View more
06-20-2012
06:04 AM
|
0
|
10
|
2182
|
POST
|
I'm trying to add a count to a Query, so I can pop a message if the count = 0 (didn't find the record). This is what I have: Public Sub SelectMapFeaturesByAttributeQuery(ByVal activeView As IActiveView, ByVal featureLayer As IFeatureLayer, ByVal whereClause As System.String)
If activeView Is Nothing OrElse featureLayer Is Nothing OrElse whereClause Is Nothing Then
Return
End If
Dim featureSelection As IFeatureSelection = TryCast(featureLayer, IFeatureSelection) ' Dynamic Cast
' Set up the query
Dim queryFilter As IQueryFilter = New QueryFilterClass
queryFilter.WhereClause = whereClause
' Invalidate only the selection cache. Flag the original selection
activeView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, Nothing, Nothing)
' Perform the selection
featureSelection.SelectFeatures(queryFilter, esriSelectionResultEnum.esriSelectionResultNew, False)
' Perform query count
Dim value As Integer = 0
value = featureLayer.GetFeatureCount(queryFilter)
If value = 0 Then
MsgBox("can't find PID")
End If
' Flag the new selection
activeView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, Nothing, Nothing)
End Sub
... View more
06-19-2012
05:01 AM
|
0
|
2
|
485
|
Online Status |
Offline
|
Date Last Visited |
11-11-2020
02:23 AM
|