グラフィックスを描画した後にビューを更新する最良の方法は何ですか?
ボタンをクリックしてポリゴンを描画し、機能を強調表示します。次に、ActiveViewを更新して、新しいポリゴンを表示する必要があります。この行は機能します: mapControl.ActiveView.ScreenDisplay.StartDrawing(StartDrawing(mapControl.ActiveView.ScreenDisplay.hDC, (System.Int16)ESRI.ArcGIS.Display.esriScreenCache.esriNoScreenCache); mapControl.ActiveView.ScreenDisplay.DrawPolygon(feature.Shape); mapControl.ActiveView.ScreenDisplay.FinishDrawing(); mapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewAll, feature.Extent, null); しかし、それは常にすべてのレイヤーをリロードします。私はPartialRefresh他の人とほとんどすべての方法で呼び出しを試みましたesriViewDrawPhaseが、どれも新しいポリゴンを表示しませんでした。 で再描画するよりも良い解決策はありesriViewDrawPhase.esriViewAllますか? 更新 を使用しILayerExtensionDraw.AfterDrawて描画フェーズをテストしましたが、AfterDrawはでのみヒットPartialRefresh()しesriViewAllます。拡張機能はMapControl.Layersのすべてのレイヤーに追加されます。毎回ヒットすると思っていましたか?mapControl.ActiveView.ScreenDisplay.DrawPolygon(feature.Shape);AfterDrawが発生しないように、どのレイヤーに描画しますか? 回答 カークのおかげで、ここに解決策があり、レイヤーを再ロードせずに、新しく追加されたグラフィックを表示します。 IGraphicsContainer con = _mapControl.Map as IGraphicsContainer; if (con != null) { IFillShapeElement fillShapeElement = new PolygonElementClass(); fillShapeElement.Symbol = fillSymbol; IElement element = (IElement)fillShapeElement; element.Geometry = feature.Shape; con.DeleteAllElements(); con.AddElement(element, 0); _mapControl.ActiveView.ScreenDisplay.Invalidate(feature.Extent, true, _mapControl.ActiveView.get_ScreenCacheID(esriViewDrawPhase.esriViewGraphics, null)); }