Me parece que no puede encontrar a nadie con este problema, pero tengo la esperanza de que tal vez me estoy perdiendo algo obvio!
Estoy escribiendo una Extensión del Editor de agregar-en el uso de VB.net para ArcMap 10. La capa característica estoy de representación es de un SDE conjunto de datos.
Una vez que el usuario inicia la edición, yo uso un valor único de renderizado características de la pantalla, omitiendo algunos (que quiere el cliente de las características que se han clasificado como "inactivo" a desaparecer - sin ser eliminados - y a mi entender es que una consulta de definición de no trabajar en una sesión de edición, así que he modificado la simbología de lugar).
Después me puse el procesador, yo desea que la pantalla de actualización para mostrar la nueva simbología. Sin Embargo, ActiveView.Actualizar, ActiveView.PartialRefresh, y ScreenDisplay.Invalidar no funcionará. No hay ningún error, pero la pantalla no se actualiza. Me han dado un paso a través del uso del depurador y confirmó que el programa de ejecución no llegar a esas líneas, pero después de 'ejecutar' esas líneas no pasa nada. El TOC se actualiza correctamente, pero la vista no. Yo manualmente, haga clic en el botón actualizar y se actualiza bien, pero me parece que no puede hacer es trabajar mediante programación.
He tratado de fuerza bruta mediante ActiveView.Desactivar seguido por ActiveView.Activar, y esto causa una actualización de la pantalla, pero luego cuando intento dibujar el punto, el puntero del ratón y el símbolo de marcador que indica el potencial de ubicación del nuevo punto de que son compensados por alrededor de 4 pulgadas.
Estoy completamente perdida aquí. Alguna idea?
He incluido un exerpt de mi código de abajo (esto se hace de manera casi idéntica para 4 capas de entidades, por lo que normalmente el select case tendría 3 entradas más, pero me simplificado para este post). Gracias!!
'define the colors to use in the renderers
Dim pOutlineColor As New ESRI.ArcGIS.Display.RgbColor
Dim pStructureColor As New ESRI.ArcGIS.Display.RgbColor
'make the structure outline color black
pOutlineColor.Red = 0
pOutlineColor.Blue = 0
pOutlineColor.Green = 0
'make the structure center color macaw green
pStructureColor.Red = 152
pStructureColor.Blue = 0
pStructureColor.Green = 230
'create the symbols
Dim pStructureSymbol As New ESRI.ArcGIS.Display.SimpleMarkerSymbol
'construct the structures symbol
pStructureSymbol.Style = ESRI.ArcGIS.Display.esriSimpleMarkerStyle.esriSMSCircle
pStructureSymbol.Size = 4
pStructureSymbol.Outline = True
pStructureSymbol.OutlineSize = 1
pStructureSymbol.OutlineColor = pOutlineColor
pStructureSymbol.Color = pStructureColor
'define renderers
Dim pStructureRenderer As New ESRI.ArcGIS.Carto.UniqueValueRenderer
'set the fields used in the renderers - we'll just have one, the 'Active' field
'set usedefaultsymbol to false so that inactive features
'will not draw (i.e., if Active <> 1 or Null)
'structures renderer
With pStructureRenderer
.FieldCount = 1
.Field(0) = "Active"
.UseDefaultSymbol = False
'add "1" to the value list for the renderer - i.e., display "1" values using pStructureSymbol
.AddValue("1", "Active", pStructureSymbol)
.Label("1") = "Active"
'add "<Null>" to the value list for the renderer using the same symbology as "1"
.AddReferenceValue("<Null>", "1")
'tell it we're using our own custom style
.ColorScheme = "Custom"
'tell it the field type for the 'Active' field is not a string (it's an integer)
.FieldType(0) = False
End With
Dim pLayer As ESRI.ArcGIS.Carto.ILayer
Dim pFeatureLayer As ESRI.ArcGIS.Carto.IFeatureLayer2
Dim pGeoFeatureLayerStructures As ESRI.ArcGIS.Carto.IGeoFeatureLayer
'this makes the layer properties symbology tab show
'the correct interface.
Dim pPropertyPage As ESRI.ArcGIS.CartoUI.IRendererPropertyPage
pPropertyPage = New ESRI.ArcGIS.CartoUI.UniqueValuePropertyPage
Do Until pLayer Is Nothing
If TypeOf (pLayer) Is ESRI.ArcGIS.Carto.IFeatureLayer2 Then
pFeatureLayer = pLayer
If pFeatureLayer.FeatureClass.FindField("Active") > 0 Then 'only set the renderer if there is an 'active' field in the layer
Select Case pFeatureLayer.FeatureClass.AliasName
Case strStructuresLayerName
pGeoFeatureLayerStructures = pFeatureLayer
pGeoFeatureLayerStructures.Renderer = pStructureRenderer
pGeoFeatureLayerStructures.DisplayField = "Active"
pGeoFeatureLayerStructures.RendererPropertyPageClassID = pPropertyPage.ClassID
End Select
End If
pFeatureLayer = Nothing
End If
pLayer = pEnumLayers.Next
Loop
My.Document.ActiveView.ContentsChanged()
My.Document.UpdateContents()
My.Document.ActiveView.Refresh() 'this does nothing
'This also does nothing:
'My.Document.ActiveView.PartialRefresh(ESRI.ArcGIS.Carto.esriViewDrawPhase.esriViewAll, Nothing, pActiveView.Extent)
'This also does nothing:
'My.ThisApplication.Display.Invalidate(My.Document.ActiveView.Extent, False, ESRI.ArcGIS.Display.esriScreenCache.esriNoScreenCache)
'this makes the screen go blank:
'Dim pMaps As ESRI.ArcGIS.Carto.IMaps
'pMaps = My.Document.Maps
'My.Document.ActiveView = My.Document.PageLayout
'My.Document.ActiveView = pMaps.Item(0)
'My.Document.ActiveView.Refresh()
'this makes the cursor and the point to be drawn offset by about 4 inches:
'Dim pActiveView As ESRI.ArcGIS.Carto.IActiveView
'pActiveView = My.Document.FocusMap
'pActiveView.Deactivate()
'pActiveView.Activate(My.ThisApplication.Display.hWnd)