C# 我可以阻止用户关闭、移动或调整自定义Excel任务窗格的大小吗?
我正在使用VS2010为Excel加载项创建自定义任务面板。我希望任务窗格始终对用户可见,因此无法关闭、移动或调整大小 有没有办法在任务窗格的标题栏中禁用这些功能?也许是通过禁用关闭框和右上角的向下箭头按钮C# 我可以阻止用户关闭、移动或调整自定义Excel任务窗格的大小吗?,c#,vsto,excel-addins,C#,Vsto,Excel Addins,我正在使用VS2010为Excel加载项创建自定义任务面板。我希望任务窗格始终对用户可见,因此无法关闭、移动或调整大小 有没有办法在任务窗格的标题栏中禁用这些功能?也许是通过禁用关闭框和右上角的向下箭头按钮 谢谢您可以指定任务窗格的停靠并将其锁定,以便用户无法通过以下方式修改其位置: private void ThisAddIn_Startup(object sender, System.EventArgs e) { var taskPaneContainer = new TaskPane
谢谢您可以指定任务窗格的停靠并将其锁定,以便用户无法通过以下方式修改其位置:
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;
}
另一方面,据我所知,不可能直接阻止用户使任务窗格不可见。您最好在功能区中添加一个按钮,使任务窗格再次可见。要阻止关闭自定义任务窗格,请执行以下操作: 当用户按下关闭按钮时,结果是自定义窗格的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; }));
}
}
注意,我使用的是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);
在事件处理程序中,可以重置_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;
}
}
SendKeys.Send的使用来自msdn论坛帖子。Microsoft主持人指示SendKeys.Send停止重新调整大小操作。if语句中的高度比较确保我们仅防止垂直高度变化;如果用户希望水平扩展或收缩Excel,我们不应该阻止它。虽然这种方法确实可以阻止任务窗格被移动,但有没有办法阻止它垂直重新调整大小?这里的背景是,我找不到将WinForms或WPF控件添加到Excel状态栏的方法。因此,我想添加一个自定义任务窗格,它的行为类似于状态栏,并允许我显示自己的控件。请确保我理解:您希望在底部有一个任务窗格(类似于状态栏),并且用户不能更改其高度,对吗?它本身不一定是任务窗格,但我正在寻找一些方法来添加我自己的状态栏(或类似状态栏的)控件。在阅读了一些资料之后,似乎使用CustomTaskPane是我最好的选择,因为它允许我添加自定义控件。但是,我希望CustomTaskPane的行为也尽可能像一个实际的状态栏(无法关闭或调整大小,并固定到应用程序的底部)。+1这是一个各种解决方案的伟大组合,可以同时实现窗格关闭和窗格调整大小。谢谢