Daha çox

Arcmap redaktoru atribut pəncərəsini doldurma dəyəri proqramlı olaraq

Arcmap redaktoru atribut pəncərəsini doldurma dəyəri proqramlı olaraq


Xəritəmdə PARCEL adlı bir təbəqəm var, bu təbəqədə yeni bir xüsusiyyət yaratdıqda, atribut pəncərəsi avtomatik olaraq açılacaqdır. Bu təbəqədə 2 atribut var: PARCEL_ID və SUB_ID.

PARCEL_ID SUB_ID-nin sol hissəsi olduğundan, istifadəçi PARCEL_ID dəyərini daxil etdikdən sonra SUB_ID sahəsindəki PARCEL_ID dəyərini göstərmək niyyətindəyəm, bu səhv məlumatdakı istifadəçi açarını minimuma endirməkdir.

Xüsusi redaktor aləti olmadan bunu etmək üçün bir yol varmı?

Vb.net arcobjects 10.2.2 istifadə edirəm.

EDIT1

Atribut pəncərəsini redaktorda istifadə etməyimin səbəbi yeniləmə xüsusiyyətindən istifadə etməyə çalışdığımda işləmədi.

Əslində mənim əsas fikrim istifadəçinin yeni xüsusiyyət yaratmasından sonra:

(1) yeni yaradılan xüsusiyyəti təyin etmək üçün maksimum OBJECTID istifadə edin

(2) istifadəçidən yeni yaradılan xüsusiyyətin PARCEL_ID və SUB_ID girişlərini istəməsi üçün bir pəncərə təmin etdi

(3) PARCEL_ID və SUB_ID dəyərlərini yeniləmək üçün feature.store istifadə edin

Ancaq işə yarada bilmədim. Mənim kodum aşağıdakı kimidir:

Xüsusi Sub GetMaxFID () Dim pMxDoc As IMxDocument, IFFature Layay As Dim pCursor As ICursor pActiveView, My.Settings.ParcelLayer) pFLayer = pMxDoc.FocusMap.Layer (layerNum) pCursor = pFLayer.Search (Heç bir şey, Yanlış) Əgər TypeOf pCursor IFeatureCursor Olarsa Dim pData Olaraq IDataStatistics = New DataBataD "alan" Cursor = pCursor Dim pStatResults As IStatisticsResults = pData.Statistics newOBJECTID = pStatResults.Maximum End If Catch ex Ex Exception logger.Error (ex.ToString) End Try End Sub Protered Overrides Sub OnClick () Dim pMxDoc As IMxDoc Dim pActiveView IActiveView Olaraq pMxDoc = My.ArcMap.Application.Document pMap = pMxDoc.FocusMap pActiveView = pMxDoc.FocusMap Dim layerNum = GetIndexNumberFromLayerName (pActiveView, My.Settings.Par ) Dim pFLayer As IFeatureLayer pFLayer = pMap.Layer (layerNum) GetMaxFID () Dim featureClass As ESRI.ArcGIS.Geodatabase.IFeatureClass = pFLayer.FeatureClass If featureClass Heç Heç Bir şey deyilsə, Ret Retired Əgər IFEatureFeatureFayature = pFLayer ) 'bu sətir doğrudurmu? Əgər xüsusiyyət heç bir şey deyilsə, sona çatmazsa Dim objectIDFieldIndex Integer = pFLayer.FeatureClass.FindField (newOBJECTID) feature.Value (1) = "test123" 'Bu sətir yeni yaradılmış xüsusiyyətin PARCEL_ID-i təyin etmək istəyirəm. 'burada .value (1) istifadə etmək düzgündürmü? bu sətirdə (1) qiyməti nə qədər olmalıdır? feature.Value (2) = "test123-12" 'Bu sətir yeni yaradılan xüsusiyyətin SUB_ID-i təyin etmək istəyirəm. 'burada .value (2) istifadə etmək düzgündürmü? bu sətirdə (1) qiyməti nə qədər olmalıdır? feature.Store () 'MsgBox ("yeniləmə tamamlandı") İstisna qeyd edən kimi əvvəlcədən tutun.Hata (ex.ToString) Sonu Sona Keçin

Kodumda səhv bir şey olduğuna inanıram, onu necə işlədə bilərəm?


Masa üstü redaktə mühitinin əsas hissəsi olduğu üçün bu pəncərənin interfeysini dəyişdirə bilsəniz təəccüblənərəm. Mən bunu sınamamışam, ancaq "xüsusiyyət dəyişikliyində" hadisəsini çəkə biləcəksiniz, şəxsiyyət vəsiqənizin dəyərini alt ID sahənizə köçürün, amma bu pəncərələri yeniləyirsə heç bir fikrim yoxdur?

RED:

Keçmişdə bənzər bir şey etdim, Feature Class bir fayl geodatabase xüsusiyyət sinfi idi və HERID adlı bir ID sahəsi üçün standart dəyəri -1 olaraq təyin etmişdim. Beləliklə, yeni bir xüsusiyyət yaradıldıqda avtomatik olaraq -1 dəyər verilir.

Aşağıda mənim Xüsusiyyət Yarat prosedur. Kodun çox hissəsini aydınlıq üçün sildim, ancaq HERID = -1 olduğu bir xüsusiyyəti necə axtardığımı görün. Bundan sonra yeni yaradılan xüsusiyyət üzərində bir qolum var və mən də sahələrdə dəyişiklikləri həyata keçirmək üçün mağazadan istifadə edirəm.

Private Sub m_EditEvents_OnCreateFeature (obj As ESRI.ArcGIS.Geodatabase.IObject) m_EditEvents.OnCreateFeature 'obyektlərini elan edin Dim d Tarix PEditLayer Ölçüsü Ölçüsü Ölçüləri = Date.Today pEditLayers = m_Editor pFeatureLayer = pEditLayers.CurrentLayer pQueryFilter = Yeni QueryFilterClass pQueryFilter.WhereClause = "HERID = -1" pFeatureCursor = pFeatureLayerFatureFeFatureFeatureFeatureFeatureFeature; pFeature .Value (.Fields.FindField ("HERID")) = HERID .Value (.Fields.FindField ("IsPrimary")) = =. d.ToShortDateString .Value (.Fields.FindField ("FLMD")) = d.ToShortDateString .Store () İstisna Olaraq Tutarsanız Sonla Bitir MsgBox (ex.Message, MsgBoxStyle.Critical + MsgBoxStyle.OkEnEtE_EtEtOne_OreOn_OreOn_OreOn_Oreal ure ") Nəhayət 'Təmizləyin pEditLayers = Heç bir şey pFeatureLayer = Heç bir şey pFeatureCursor = Heç bir şey pFeature = Heç bir şey pQueryFilter = Heç bir şey Sonu yoxla