Почему не удалить гиперссылки

Автор Тема: Почему не удалить гиперссылки  (Прочитано 2937 раз)

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

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Добрый день!
Написал такой метод для вставки ссылки в объект:
Код - C# [Выбрать]
  1. public void Set_HyperLink(FCheckRefDialog.CDocumentsInfo docInf) //, string url = "")
  2.         {
  3.             try
  4.             {
  5.                 Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.
  6.                     MdiActiveDocument;
  7.                 Database acCurDb = acDoc.Database;
  8.                 Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.
  9.                     MdiActiveDocument.Editor;
  10.  
  11.                 using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
  12.                 {
  13.                     Entity en = acTrans.GetObject(docInf.ObjId, OpenMode.ForWrite) as Entity;
  14.                     HyperLink link = new HyperLink();
  15.                     link.Description = docInf.designation;
  16.                     link.Name = docInf.url;
  17.                     if (en.Hyperlinks.Count != 0)
  18.                         en.Hyperlinks.Clear();
  19.                     en.Hyperlinks.Add(link);
  20.                     acTrans.Commit();
  21.                 }
  22.             }
  23.             catch (System.Exception e)
  24.             {
  25.                 Editor acDocEd = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
  26.                 acDocEd.WriteMessage(String.Format("Ошибка. {0}{1}" + Environment.NewLine, e.Message, e.StackTrace));
  27.             }
  28.         }
  29.  
Если в объекте нет гиперссылок, все работает нормально. Если есть, на операторе en.Hyperlinks.Clear(); программа вылетает.
Где я не прав?
Спасибо.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Почему не удалить гиперссылки
« Ответ #1 : 17-12-2020, 16:58:37 »
программа вылетает.
Вылетает как? Если исключение, то какое?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Борис_С 17-12-2020, 18:03:53

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Почему не удалить гиперссылки
« Ответ #2 : 17-12-2020, 17:14:24 »
Нагуглил, что такой баг имеет место быть. Вместо Clear() нужно использовать такой код:
Код - C# [Выбрать]
  1. while(en.Hyperlinks.Count != 0)  
  2.           en.Hyperlinks.RemoveAt(0);
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Re: Почему не удалить гиперссылки
« Ответ #3 : 17-12-2020, 18:03:48 »
Спасибо. Эта ошибка (en.Hyperlinks.Clear()) случилась только один раз. Больше не повторилась, но буду пользоваться безопасным кодом.

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 805
  • Карма: 166
    • Мои плагины к Автокаду
Re: Почему не удалить гиперссылки
« Ответ #4 : 04-01-2022, 22:59:29 »
Нарвался на ту же проблему. Hyperlinks.Clear стабильно кладет AutoCAD 2020, 2021, 2022. Другие версии не проверял. 
Ура, товарищи! У нас есть 100501-ый способ гарантированно вызвать фатал :) Без сохранений и предупреждений.