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

ADN Club => AutoCAD .NET API => Тема начата: Денис Перепецкий от 02-02-2015, 14:45:45

Название: Подписка на Database.SavedComplete (Database.BeginSave)
Отправлено: Денис Перепецкий от 02-02-2015, 14:45:45
Приветствую.
Класс такой:
Код - C# [Выбрать]
  1.     public class Class1 : IExtensionApplication
  2.     {
  3.         public void Initialize()
  4.         {
  5.             Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage("before");
  6.             MainMethod();
  7.             Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage("after");
  8.         }
  9.  
  10.         public void Terminate()
  11.         {
  12.             //
  13.         }
  14.         private void MainMethod()
  15.         {
  16.             Document doc = Application.DocumentManager.MdiActiveDocument;
  17.             Database db = doc.Database;
  18.             /// подписка на событие окончания сохранения файла
  19.             #region
  20.             Application.DocumentManager.MdiActiveDocument.Database.SaveComplete += new DatabaseIOEventHandler(dbSaveComplete);
  21.             #endregion
  22.         }
  23.  
  24.         private void dbSaveComplete(object sender, DatabaseIOEventArgs e)
  25.         {
  26.             //Application.ShowAlertDialog("Saved");
  27.             Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage("\nSaved");
  28.         }
  29.     }

Результат: не срабатывает. Причем как инициализация не срабатывает, так и все остальное.
Исправил public void MainMethod() на private void MainMethod(); и инициализация заработала.

срабатывает.

AutoCAD 2014x64 + Win7

Только почему модельное сообщение не показывается а в консоль отправляется?
Название: Re: Подписка на Database.SavedComplete (Database.BeginSave)
Отправлено: Андрей Бушман от 02-02-2015, 14:55:08
версия акада?
Название: Re: Подписка на Database.SavedComplete (Database.BeginSave)
Отправлено: Денис Перепецкий от 02-02-2015, 14:57:34
Шапку обновил. И код тоже.
Название: Re: Подписка на Database.SavedComplete (Database.BeginSave)
Отправлено: Андрей Бушман от 02-02-2015, 15:02:51
Только почему сообщение не показывается?
О каком сообщении речь: о том, что в консоль отправляется, или о том, которое в модальном окне должно отображаться?
Название: Re: Подписка на Database.SavedComplete (Database.BeginSave)
Отправлено: Денис Перепецкий от 02-02-2015, 15:04:22
Да. Опять напутал.
В консоли сообщение отображается, а модальное нет.
Название: Re: Подписка на Database.SavedComplete (Database.BeginSave)
Отправлено: Андрей Бушман от 02-02-2015, 15:06:55
Да. Опять напутал.
В консоли сообщение отображается, а модальное нет.
Потому что у тебя эта строка кода закомментирована. :)
Название: Re: Подписка на Database.SavedComplete (Database.BeginSave)
Отправлено: Денис Перепецкий от 02-02-2015, 15:11:16
 ;)да нет же. Если я ее раскомментирую, то модальное сообщение не показывается. А сообщение в консоли отображается.
Название: Re: Подписка на Database.SavedComplete (Database.BeginSave)
Отправлено: Андрей Бушман от 02-02-2015, 15:13:10
да нет же. Если я ее раскомментирую, то модальное сообщение не показывается. А сообщение в консоли отображается.
Ты уж как-то синхронизируй свои вопросы с кодом, который показываешь. :)
Название: Re: Подписка на Database.SavedComplete (Database.BeginSave)
Отправлено: Денис Перепецкий от 02-02-2015, 15:18:22
не успел... :-\ собственно подписка на событие работает. Вопрос почему не показывается модальное окно, если код будет выглядеть так:
Код - C# [Выбрать]
  1.     public class Class1 : IExtensionApplication
  2.     {
  3.         public void Initialize()
  4.         {
  5.             MainMethod();
  6.         }
  7.  
  8.         public void Terminate()
  9.         {
  10.             //
  11.         }
  12.         private void MainMethod()
  13.         {
  14.             Document doc = Application.DocumentManager.MdiActiveDocument;
  15.             Database db = doc.Database;
  16.             /// подписка на событие окончания сохранения файла
  17.             #region
  18.             Application.DocumentManager.MdiActiveDocument.Database.SaveComplete += new DatabaseIOEventHandler(dbSaveComplete);
  19.             #endregion
  20.         }
  21.  
  22.         private void dbSaveComplete(object sender, DatabaseIOEventArgs e)
  23.         {
  24.             Application.ShowAlertDialog("Saved");
  25.         }
  26.     }
Название: Re: Подписка на Database.SavedComplete (Database.BeginSave)
Отправлено: Андрей Бушман от 02-02-2015, 15:28:23
Дай-ка я ещё попробую догадаться... Загрузить-то .NET сборку ты загружаешь, но затем выполнить сохранение файла забываешь... Я прав? :) Будь собранней!
Название: Re: Подписка на Database.SavedComplete (Database.BeginSave)
Отправлено: Андрей Бушман от 02-02-2015, 15:42:06
На всякий случай даю дополнительную информацию: это окошко у тебя скорее всего не будет появляться в AutoCAD 2015, если твой плагин зарегистрирован в реестре (возможно что и через Bundle-механизм так же не будет) и обозначен к автоматической загрузке при старте акада.
Название: Re: Подписка на Database.SavedComplete (Database.BeginSave)
Отправлено: Денис Перепецкий от 02-02-2015, 15:55:07
Дай-ка я ещё попробую догадаться... Загрузить-то .NET сборку ты загружаешь, но затем выполнить сохранение файла забываешь... Я прав? :) Будь собранней!
ан нет... не забываю... я же говорю, при сохрании файла...

Ну 2015 акад меня пока не очень интересует. Работаем в 2014
Название: Re: Подписка на Database.SavedComplete (Database.BeginSave)
Отправлено: Андрей Бушман от 02-02-2015, 15:59:24
ан нет... не забываю... я же говорю, при сохрании файла...
Я говорю о том же. У меня твой код работает, окошко появляется при сохранении текущего файла (в режиме отладки сохраняю новый файл).
Цитировать
Ну 2015 акад меня пока не очень интересует. Работаем в 2014
Не интересует - и слава Богу. Информацию дал на тот случай, если в будущем всё же заинтересует.
Название: Re: Подписка на Database.SavedComplete (Database.BeginSave)
Отправлено: Александр Ривилис от 02-02-2015, 16:06:48
Я говорю о том же. У меня твой работает, окошко появляется при сохранении текущего файла (в режиме отладки сохраняю новый файл).
Аналогично. Проверял в AutoCAD 2014 SP1 x64. На всякий случай проверял при разных значениях FIBERWORLD - работает в любом случае.

dp, а ты уверен, что у тебя сохраняется именно та база, на которую ты подписался?
Название: Re: Подписка на Database.SavedComplete (Database.BeginSave)
Отправлено: Андрей Бушман от 02-02-2015, 16:09:26
dp, а ты уверен, что у тебя сохраняется именно та база, на которую ты подписался?
именно поэтому я и уточнял насчёт 2015-го :)
Название: Re: Подписка на Database.SavedComplete (Database.BeginSave)
Отправлено: Денис Перепецкий от 02-02-2015, 16:16:15
Собственно это не так важно. Не появляется да и, как говорится, ляд с ним, главное что подписка работает. А окошко показывал для отладки.

Спасибо всем откликнувшимся и уделившим мне время.
Название: Re: Подписка на Database.SavedComplete (Database.BeginSave)
Отправлено: Александр Ривилис от 02-02-2015, 16:17:47
Не появляется да и, как говорится, ляд с ним, главное что подписка работает.
Не уверен. Это возможно следствие какой-то более глубокой проблемы.
Название: Re: Подписка на Database.SavedComplete (Database.BeginSave)
Отправлено: Андрей Бушман от 02-02-2015, 16:18:02
А окошко показывал для отладки.
Жуть. А зачем? Чем не устраивают "брэйк-поинты"?
Название: Re: Подписка на Database.SavedComplete (Database.BeginSave)
Отправлено: Денис Перепецкий от 02-02-2015, 16:52:17
Насчет проблемы более глубоких - да. Там посмотрим.

Брейкпоинты хороши. Приучаюсь использовать их, но в силу своей косности не всегда могу заставить себя. :) :)
Название: Re: Подписка на Database.SavedComplete (Database.BeginSave)
Отправлено: Денис Перепецкий от 03-02-2015, 09:35:59
Чудо.
Перезагрузка компа решила проблему не показа модального сообщения.
Теперь все показывается.
Название: Re: Подписка на Database.SavedComplete (Database.BeginSave)
Отправлено: Денис Перепецкий от 03-02-2015, 09:48:57
А вот такой вопрос в догонку: будет ли срабатывать подписка SaveComplete на автосохранение?
И если не срабатывает, то как отловить начало/конец автосохранения?


Проверил  :o, подойдет...
Название: Re: Подписка на Database.SavedComplete (Database.BeginSave)
Отправлено: Александр Ривилис от 03-02-2015, 09:55:05
А вот такой вопрос в догонку: будет ли срабатывать подписка SaveComplete на автосохранение?
А почему бы тебе самому не проверить? ;)