Solidworks Add In. Как изменить контент панели в зависимости от типа открытого документа?

Делаю Add In для Solidworks. И хочу реализовать смену контента панели аддина в зависимости от открытого документа (деталь, сборка или чертеж) Каким образом это сделать, подскажите пожалуйста? При загрузке аддина загружается форма описанная в классе TaskpaneHostUI. Я так понимаю для других форм для типов открытого документа нужно создавать отдельный класс. В моем случае под это дело я сделал класс для детали - PartUI. Смена форм должна происходить при срабатывании события, с этим я разобрался. А вот как изменить содержание панели, все никак не могу сообразить.

namespace SldWrksWorkAddin
{
    /// <summary>
    /// Our SolidWorks taskpane add-in
    /// </summary>
    public class TaskpaneIntegration : ISwAddin
    {
        #region Private Members

        /// <summary>
        /// The taskpane view for our add-in
        /// </summary>
        private TaskpaneView mTaskpaneView;

        /// <summary>
        /// The UI control that is going to be inside the SolidWorks taskpane view
        /// </summary>
        private SldWrksWorkAddin.TaskpaneHostUI mTaskpaneHost;

        private SldWrksWorkAddin.PartUI mPartUI;

        /// <summary>
        /// The current instance of the SolidWorks application
        /// </summary>
        private SldWorks mSolidWorksApplication;

        #endregion

        #region Public Members

        /// <summary>
        /// The unique Id to the taskpane used for registration in COM
        /// </summary>
        public const string SWTASKPANE_PROGID = "SldWrksWorkAddin.Taskpane";

        public ModelDoc2 swModel;
            
        #endregion

        #region SolidWorks Add-in Callbacks

        /// <summary>
        /// Called when SolidWorks has loaded our add-in and wants us to do our connection logic
        /// </summary>
        /// <param name="ThisSW">The current SolidWorks instance</param>
        /// <param name="Cookie">The current SolidWorks cookie Id</param>
        /// <returns></returns>
        public bool ConnectToSW(object ThisSW, int Cookie)
        {
            // Store a reference to the current SolidWorks instance
            mSolidWorksApplication = (SldWorks)ThisSW;

            // Store cookie Id
            mSwCookie = Cookie;

            // Setup callback info
            var ok = mSolidWorksApplication.SetAddinCallbackInfo2(0, this, mSwCookie);

            // Create our UI
            LoadUI();

            // Return ok
            return true;
        }  
           
        #endregion

        #region Create UI

        /// <summary>
        /// Create our Taskpane and inject our host UI
        /// </summary>
        private void LoadUI()
        {
            // Find location to our taskpane icon
            var imagePath = Path.Combine(Path.GetDirectoryName(typeof(TaskpaneIntegration).Assembly.CodeBase).Replace(@"file:\res\", string.Empty), "logo.png");

            // Create our Taskpane
            mTaskpaneView = mSolidWorksApplication.CreateTaskpaneView2(imagePath, string.Empty);

            // Load our UI into the taskpane
            mTaskpaneHost = (TaskpaneHostUI)mTaskpaneView.AddControl(SWTASKPANE_PROGID, string.Empty);
        }      

        #endregion

Ответы (1 шт):

Автор решения: ArturCope

Кажется разобрался. Для отображения форм в TaskpaneView следует использовать метод DisplayWindowFromHandlex64. И, вероятно, объект предыдущей формы сделать null. Иначе новая форма просто отображается поверх имеющейся.

→ Ссылка