Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: prajdziswet от 24-12-2018, 11:36:18

Название: событие открытие документа(чертежа) C#
Отправлено: prajdziswet от 24-12-2018, 11:36:18
Опять простейший вопрос: как задать событие EndOpen? скорее всего оно должно быть не в  MdiActiveDocumen...простой вопрос и не пойму как сделать....
Код - C# [Выбрать]
  1. public void Initialize()
  2. {
  3. Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.EndDwgOpen += new DrawingOpenEventHandler(EndOpen);
  4. private void EndOpen(object senderObj,DrawingOpenEventArgs e )
  5. }
  6.  
  7. private void EndOpen(object senderObj,DrawingOpenEventArgs e )
  8. {
  9. MessageBox.Show("");
  10. }
  11.  
Название: Re: событие открытие документа(чертежа) C#
Отправлено: Дмитрий Загорулькин от 24-12-2018, 11:46:19
Опять простейший вопрос: как задать событие EndOpen?
Не такой уж он и простейший. В данном случае, если документ уже активный, то у него уже давно прошло событие EndOpen. Надо отлавливать как можно более ранний момент создания документа и добавлять к нему обработку этого события.
Вопрос ещё в другом: а есть абсолютная уверенность в том, что нужно именно это событие? Возможно, что для вашей задачи лучше использовать какое-то другое.
Название: Re: событие открытие документа(чертежа) C#
Отправлено: prajdziswet от 24-12-2018, 11:58:22
В данном случае, если документ уже активный, то у него уже давно прошло событие EndOpen
согласен, поэтому "MdiActiveDocumen" как то логически не подходит...и что тогда за событие "MdiActiveDocument.EndDwgOpen "?...
И нету ли события происходящего за открытием документа? например хочу чтобы оно прописвала(в командной строке) и в остальных документах при открытии, что загружен такой то плагин (сообщение просто для проверки "MessageBox")
Название: Re: событие открытие документа(чертежа) C#
Отправлено: Дмитрий Загорулькин от 24-12-2018, 12:07:14
и что тогда за событие "MdiActiveDocument.EndDwgOpen "?
Это событие Document.EndDwgOpen. А так как MdiActiveDocument - это тоже объект типа Document, то у него так же есть это событие. Только именно для него оно не актуально.
например хочу чтобы оно прописвала и в остальных документах при открытии, что загружен такой то плагин (сообщение просто для проверки "MessageBox")
Я для похожей задачи использую событие DocumentCollection.DocumentActivated (http://help.autodesk.com/view/OARX/2018/ENU/?guid=OREFNET-Autodesk_AutoCAD_ApplicationServices_DocumentCollection_DocumentActivated). Идея в том, что пока документ не активирован, мне нет смысла выводить пользователю какие-то сообщения о нём. Когда наступает это событие, то проверяю, что документ активируется в первый раз (т.к. это событие возникает и повторно, если переключаться с документа на документ). И если это так, то вывожу сообщения в командную строку. Соответственно, можно не в комстроку, а в MessageBox.
Кстати, интересный момент - справка ничего не знает об этом событии Document.EndDwgOpen. Хотя оно действительно есть в API.
И ещё более интересное наблюдение - в ObjectARX аналогичное событие есть у редактора (http://help.autodesk.com/view/OARX/2019/ENU/?guid=OREF-AcEditorReactor__endDwgOpen_ACHAR__AcDbDatabase_), а не у документа! Есть серьёзные опасения, что использование этого события в .NET может вызвать некоторые проблемы.
Название: Re: событие открытие документа(чертежа) C#
Отправлено: prajdziswet от 24-12-2018, 13:06:03
конечно предложение интересное,
а как отследить, что событие не повторно? (просто в голову приходят не красивые идеи, типа переменной и т.д)
Название: Re: событие открытие документа(чертежа) C#
Отправлено: Дмитрий Загорулькин от 24-12-2018, 13:55:02
а как отследить, что событие не повторно? (просто в голову приходят не красивые идеи, типа переменной и т.д)
У меня это статическая переменная - список инициализированных документов. Если там документ уже есть - значит, повторная инициализация не нужна.
Название: Re: событие открытие документа(чертежа) C#
Отправлено: prajdziswet от 24-12-2018, 14:30:47
я так и хотел, просто подумал может есть более красивое решение...
спасибо...
Название: Re: событие открытие документа(чертежа) C#
Отправлено: Дмитрий Загорулькин от 24-12-2018, 14:49:14
я так и хотел, просто подумал может есть более красивое решение...
Может быть. Но так надёжно и проверено.