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

ADN Club => AutoCAD .NET API => Тема начата: Борис_С от 17-12-2020, 16:53:13

Название: Почему не удалить гиперссылки
Отправлено: Борис_С от 17-12-2020, 16:53:13
Добрый день!
Написал такой метод для вставки ссылки в объект:
Код - 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(); программа вылетает.
Где я не прав?
Спасибо.
Название: Re: Почему не удалить гиперссылки
Отправлено: Александр Ривилис от 17-12-2020, 16:58:37
программа вылетает.
Вылетает как? Если исключение, то какое?
Название: Re: Почему не удалить гиперссылки
Отправлено: Александр Ривилис от 17-12-2020, 17:14:24
Нагуглил, что такой баг имеет место быть. Вместо Clear() нужно использовать такой код:
Код - C# [Выбрать]
  1. while(en.Hyperlinks.Count != 0)  
  2.           en.Hyperlinks.RemoveAt(0);
Название: Re: Почему не удалить гиперссылки
Отправлено: Борис_С от 17-12-2020, 18:03:48
Спасибо. Эта ошибка (en.Hyperlinks.Clear()) случилась только один раз. Больше не повторилась, но буду пользоваться безопасным кодом.
Название: Re: Почему не удалить гиперссылки
Отправлено: avc от 04-01-2022, 22:59:29
Нарвался на ту же проблему. Hyperlinks.Clear стабильно кладет AutoCAD 2020, 2021, 2022. Другие версии не проверял. 
Ура, товарищи! У нас есть 100501-ый способ гарантированно вызвать фатал :) Без сохранений и предупреждений.