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

ADN Club => Другие продукты Autodesk => Navisworks API => Тема начата: user32 от 28-09-2020, 13:26:51

Название: DockPanePlugin Не срабатывает при динамической подгрузке dll
Отправлено: user32 от 28-09-2020, 13:26:51
Здравствуйте, столкнулся со следующей проблемой, создаю динамически кнопку на панели по этим статьям
https://adndevblog.typepad.com/aec/2013/05/navisworks-2014-api-new-feature-dynamic-loading-of-plugin.html
Тут все работает и вызывается и показывается, если вывести например Messagebox.Show(), но я хочу создать DockPanePlugin и вот тут у меня затык.
Если создать dll и поместить как обычно в папку плагинов с соответствующими xml и тд, то все срабатывает и DockPanePlugin по нажатию отображается, но если этот же код использовать при динамической подгрузке dll, то никаких изменений, методом тыка нашел, что pane.Visible не присваевается значение true, никак не могу понять, возможно ли вообще так сделать?
Вот код, который использую для отображения DockPanePlugin:
Код - C# [Выбрать]
  1. [Plugin("Test#1", "Me", ToolTip = "", DisplayName = "Test")]
  2.     public class WPFDockPaneAddin : AddInPlugin
  3.     {
  4.         public override int Execute(params string[] parameters)
  5.         {
  6.             if (Application.IsAutomated)
  7.             {
  8.                 throw new InvalidOperationException("Invalid when running using Automation");
  9.             }
  10.  
  11.             PluginRecord pr = Application.Plugins.FindPlugin("Test#1.Me");
  12.             if (pr is DockPanePluginRecord && pr.IsEnabled)
  13.             {
  14.                 if (pr.LoadedPlugin == null)
  15.                 {
  16.                     pr.LoadPlugin();
  17.                 }
  18.  
  19.                 if (pr.LoadedPlugin is DockPanePlugin dpp)
  20.                 {
  21.                     dpp.Visible = !dpp.Visible;
  22.                     var pane = dpp.CreateControlPane();
  23.                     pane.CreateControl();
  24.                     pane.Show();
  25.                     dpp.ActivatePane();
  26.                     MessageBox.Show("CreateControlPane, isVisible " + dpp.Visible); //Вот тут всегда false
  27.  
  28.                 }
  29.             }
  30.             return 0;
  31.         }
  32.     }
  33.  
  34.     [Plugin("Test#1", "Me", ToolTip = "", DisplayName = "Test")]
  35.     [DockPanePlugin(100, 200, FixedSize = false, MinimumHeight = 100, MinimumWidth = 300)]
  36.     public class Class1 : DockPanePlugin
  37.     {
  38.         protected override bool IsSelfEnabled() => true;
  39.  
  40.  
  41.  
  42.         public override Control CreateControlPane()
  43.         {
  44.             ElementHost eh = new ElementHost();
  45.             eh.AutoSize = true;
  46.             eh.Child = new UserControl1();
  47.             eh.CreateControl();
  48.             eh.Visible = true;
  49.             return eh;
  50.         }
  51.  
  52.         public override void DestroyControlPane(Control pane) => pane.Dispose();
  53.     }
  54.  
Название: Re: DockPanePlugin Не срабатывает при динамической подгрузке dll
Отправлено: Александр Ривилис от 28-09-2020, 14:56:53
Посмотри здесь пример: https://spiderinnet.typepad.com/blog/2013/11/navisworks-net-use-dockpaneplugindockpanepluginattribute-to-create-dock-panel.html
Возможно он тебе подойдёт.
Название: Re: DockPanePlugin Не срабатывает при динамической подгрузке dll
Отправлено: user32 от 28-09-2020, 15:19:56
Спасибо, гляну