VSTO中的浮动面板需要使用UserControl来作为界面,通过 Globals.ThisAddIn.CustomTaskPanes.Add(UserControl , title) 添加。因为需要全局唯一的面板,所以要在ThisAddIn中进行静态声明:
//UserControl public static Inspector inspector = new Inspector(); public static Microsoft.Office.Tools.CustomTaskPane inspPanel; private void ThisAddIn_Startup(object sender, System.EventArgs e) { inspPanel = Globals.ThisAddIn.CustomTaskPanes.Add(inspector, "Inspector"); }
在Ribbon设计器按钮的显示事件上:
(这里的ThisAddIn不是Globals中的,非插件对象,而是指当前项目的ThisAddIn类)
private void InspBtn_Click(object sender, RibbonControlEventArgs e) { ThisAddIn.inspPanel.Visible = true; }
在添加之后如果关闭就无法在打开,这是因为窗口在关闭时,该窗口就已经销毁了,接下来要改动设计器中的销毁代码,打开用户控件的设计器代码,我这里是Inspector.Designer.cs,如果找不到就点击解决方案资源管理器中用户控件左面的小箭头。
然后把Dispose中原来的方法注释掉:
/// <summary> /// 清理所有正在使用的资源。 /// </summary> /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param> protected override void Dispose(bool disposing) { //if (disposing && (components != null)) //{ // components.Dispose(); //} //base.Dispose(disposing); this.Visible = false; }
文章评论