Страница 1 из 1

Рабочая область при программировании на .Net

Добавлено: 25 сен 2017, 15:36
wladfm
Добрый день. Разрабатываю надстройку для ArcMap на C#.
Мне необходимо произвести некоторые действия с таблицами в режиме редактирования. Для этого я определяю IEditor:
IApplication m_application = Hook as IApplication;
UID editorID = new UIDClass();
editorID.Value = "esriEditor.Editor";
IEditor m_Editor = m_application.FindExtensionByCLSID(editorID) as IEditor;
Далее мне необходимо работать со слоями:
IEditLayers editLayers = (IEditLayers)m_Editor;
IFeatureLayer NewLayers = (IFeatureLayer)editLayers.CurrentLayer;
И вроде всё нормально. Однако как только нажать кнопку Сохранить в Редакторе или закрепить версию editLayers.CurrentLayer становится равным null и приходится перезапускать редактор. Рабочая область при этом не меняется, остается прежней.
Может кто сталкивался с подобной проблемой и знает её решение?

Re: Рабочая область при программировании на .Net

Добавлено: 05 окт 2017, 20:12
Monstria
Зачем работать напрямую со слоями? Отлавливайте нужные события OnChangeFeature, OnCreateFeature, OnStartEditing, OnStopEditing и т.п. определяете редактируемый объект и поступайте как нужно

Re: Рабочая область при программировании на .Net

Добавлено: 06 окт 2017, 08:32
wladfm
В том то и проблема, что нужно ещё и со слоями. А про события спасибо что напомнили, удобная вещь

Re: Рабочая область при программировании на .Net

Добавлено: 09 окт 2017, 08:43
Monstria
И все таки для меня загадка - что мешает обращаться к слоям когда происходят определенные события и что за нужда постоянно держать слои под постоянным контролем?

Re: Рабочая область при программировании на .Net

Добавлено: 09 окт 2017, 14:44
wladfm
Monstria писал(а):
09 окт 2017, 08:43
что за нужда постоянно держать слои под постоянным контролем
Пользователи...
Действия происходят лишь после того, как пользователь нажал на кнопку. Да, можно отслеживать какой слой (данные) на редактировании, но смысл, если это можно проверить при нажатии на кнопку? Единственное событие - это смотреть или пользователь начал редактирование. Просто мне не понятно, почему после сохранения вылетает значение редактируемого слоя

Re: Рабочая область при программировании на .Net

Добавлено: 09 окт 2017, 16:47
Monstria
wladfm писал(а):
09 окт 2017, 14:44
Просто мне не понятно, почему после сохранения вылетает значение редактируемого слоя
При изменении данных НЕОБХОДИМО принудительно выходить в режим редактирования (если конечно не начат сеанс редактирования), все измененные объекты сохранять. Если пользователь в ручную сохраняет изменения - то происходит закрытие сеанса редактирования (все изменённые объекты, но не сохраненные, востанавливают свои первоначальные состояния), и запуск нового сеанса - ссылка на редактор соответственно меняется, поэтому у вас на старой ссылке получается NULL.

Отслеживай события начала и конца редактирования, не забывай сохранять измененные объекты и будут счастье :)

Re: Рабочая область при программировании на .Net

Добавлено: 11 окт 2017, 08:29
wladfm
спасибо, очень доходчиво объяснили