событие открытие документа(чертежа) C#

Автор Тема: событие открытие документа(чертежа) C#  (Прочитано 9192 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн prajdziswetАвтор темы

  • ADN OPEN
  • Сообщений: 32
  • Карма: 0
Опять простейший вопрос: как задать событие 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.  

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Опять простейший вопрос: как задать событие EndOpen?
Не такой уж он и простейший. В данном случае, если документ уже активный, то у него уже давно прошло событие EndOpen. Надо отлавливать как можно более ранний момент создания документа и добавлять к нему обработку этого события.
Вопрос ещё в другом: а есть абсолютная уверенность в том, что нужно именно это событие? Возможно, что для вашей задачи лучше использовать какое-то другое.

Оффлайн prajdziswetАвтор темы

  • ADN OPEN
  • Сообщений: 32
  • Карма: 0
В данном случае, если документ уже активный, то у него уже давно прошло событие EndOpen
согласен, поэтому "MdiActiveDocumen" как то логически не подходит...и что тогда за событие "MdiActiveDocument.EndDwgOpen "?...
И нету ли события происходящего за открытием документа? например хочу чтобы оно прописвала(в командной строке) и в остальных документах при открытии, что загружен такой то плагин (сообщение просто для проверки "MessageBox")

Отмечено как Решение prajdziswet 24-12-2018, 14:31:01

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
и что тогда за событие "MdiActiveDocument.EndDwgOpen "?
Это событие Document.EndDwgOpen. А так как MdiActiveDocument - это тоже объект типа Document, то у него так же есть это событие. Только именно для него оно не актуально.
например хочу чтобы оно прописвала и в остальных документах при открытии, что загружен такой то плагин (сообщение просто для проверки "MessageBox")
Я для похожей задачи использую событие DocumentCollection.DocumentActivated. Идея в том, что пока документ не активирован, мне нет смысла выводить пользователю какие-то сообщения о нём. Когда наступает это событие, то проверяю, что документ активируется в первый раз (т.к. это событие возникает и повторно, если переключаться с документа на документ). И если это так, то вывожу сообщения в командную строку. Соответственно, можно не в комстроку, а в MessageBox.
Кстати, интересный момент - справка ничего не знает об этом событии Document.EndDwgOpen. Хотя оно действительно есть в API.
И ещё более интересное наблюдение - в ObjectARX аналогичное событие есть у редактора, а не у документа! Есть серьёзные опасения, что использование этого события в .NET может вызвать некоторые проблемы.

Оффлайн prajdziswetАвтор темы

  • ADN OPEN
  • Сообщений: 32
  • Карма: 0
конечно предложение интересное,
а как отследить, что событие не повторно? (просто в голову приходят не красивые идеи, типа переменной и т.д)

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
а как отследить, что событие не повторно? (просто в голову приходят не красивые идеи, типа переменной и т.д)
У меня это статическая переменная - список инициализированных документов. Если там документ уже есть - значит, повторная инициализация не нужна.

Оффлайн prajdziswetАвтор темы

  • ADN OPEN
  • Сообщений: 32
  • Карма: 0
я так и хотел, просто подумал может есть более красивое решение...
спасибо...

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
я так и хотел, просто подумал может есть более красивое решение...
Может быть. Но так надёжно и проверено.