Cra*_*aig 2 c# vsto excel-addins
我正在使用VS 2010为Excel加载项创建自定义任务面板.我希望任务窗格始终对用户可见,因此无法关闭,移动或调整其大小.
有没有办法在任务窗格的标题栏中禁用这些功能?也许通过禁用右上角的关闭框和向下箭头按钮?
谢谢
要停止关闭自定义任务窗格:
当用户按下关闭按钮时,结果是自定义窗格的Visible属性设置为false.这会导致自定义窗格的VisibleChanged事件触发.在该事件的处理程序中,您可以强制重新打开自定义任务窗格.
private static void OnVisibleChanged(object sender, EventArgs e)
{
var customTaskPane = sender as CustomTaskPane;
if (customTaskPane != null)
{
Dispatcher.CurrentDispatcher.BeginInvoke(new Action(() => { customTaskPane.Visible = true; }));
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,我正在使用Dispatcher的BeginInvoke方法.这是因为如果您尝试直接将自定义窗格的Visible属性设置为true,而不使用Dispatcher,则会抛出异常,因为在事件处理程序中不允许这样做.使用BeginInvoke方法会导致赋值异步执行,从而解决该限制.
要停止调整自定义任务窗格的大小:
要实现此目的,您需要将SizeChanged事件处理程序附加到自定义任务窗格的UserControl.例如:
var sampleHostControl = new WpfHostControl(Globals.AddIn.SamplePaneWpfControl);
_samplePane = this.CustomTaskPanes.Add(sampleHostControl, "Sample");
sampleHostControl.SizeChanged += new EventHandler(OnHostControlSizeChanged);
Run Code Online (Sandbox Code Playgroud)
在事件处理程序中,您可以重置_samplePane的高度.
private const int PaneHeight = 52;
private void OnHostControlSizeChanged(object sender, EventArgs e)
{
if (_samplePane != null && _samplePane.Height != PaneHeight)
{
System.Windows.Forms.SendKeys.Send("{ESC}");
_samplePane.Height = PaneHeight;
}
}
Run Code Online (Sandbox Code Playgroud)
SendKeys.Send的使用来自这个 msdn论坛帖子.Microsoft Moderator指示SendKeys.Send停止重新调整大小操作.if语句中的高度比较确保我们只防止垂直高度变化; 如果用户想要水平扩展或缩小Excel,我们不应该阻止它.
您可以指定任务窗格的停靠并锁定它,以便用户不能以这种方式修改其位置:
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
var taskPaneContainer = new TaskPaneContainer();
var taskPane = this.CustomTaskPanes.Add(taskPaneContainer, "My Task Pane");
taskPane.DockPosition = MsoCTPDockPosition.msoCTPDockPositionRight;
taskPane.DockPositionRestrict = MsoCTPDockPositionRestrict.msoCTPDockPositionRestrictNoChange;
taskPane.Visible = true;
}
Run Code Online (Sandbox Code Playgroud)
另一方面,据我所知,不可能直接阻止用户使TaskPane不可见.您最好的选择可能是在功能区中添加一个按钮以使TaskPane再次可见.