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 шт):
Кажется разобрался. Для отображения форм в TaskpaneView следует использовать метод DisplayWindowFromHandlex64. И, вероятно, объект предыдущей формы сделать null. Иначе новая форма просто отображается поверх имеющейся.