我尝试在Excel加载项中添加自定义任务窗格,其目的与“数据透视表”窗格类似。
目的是当选择表时,自定义窗格应该出现并且应该消失。为此,我创建了一个自定义任务窗格:
this._taskPane = Globals.AddIn.CustomTaskPanes.Add(
new TableTaskPane(),
"FooPane");
this._taskPane.DockPositionRestrict
= MsoCTPDockPositionRestrict.msoCTPDockPositionRestrictNoHorizontal;
选择表格后,窗格变为可见,取消选择后,窗格将隐藏:
ListObject table = AddTable(); // Creates the table and populates with data.
table.Selected += range => this._taskPane.Visible = true;
table.Deselected += range => this._taskPane.Visible = false;
这实现了显示和隐藏窗格的效果,但遗憾的是在UI中产生了一些延迟,其中光标反弹"当任务窗格在可见性状态之间转换时,在单元格之间。
这似乎是因为Visible
属性的setter阻塞,直到任务窗格完成转换。在Excel 2013中,它从窗口侧面滑出,大约需要500毫秒。
我无法找到改变此行为的方法 - 我已尝试在STA线程上安排属性设置,但它会导致相同的阻止。我很乐意更改任务窗格,使其在没有转换的情况下立即显示(如数据透视表窗格),但我也看不到任何可能发生的事情。
我做错了吗?有没有办法通过直接COM或其他一些隐藏的行为来解决这个问题?
答案 0 :(得分:1)
您可以通过关闭此处的愚蠢Windows动画功能来完成此操作(以及更多性能改进): 控制面板 - >系统和安全 - >系统 - >高级设置 - >性能设置 - >视觉效果。
在这种特殊情况下,我认为你需要关闭这个:
但这些对于加快速度也很有用:
答案 1 :(得分:1)
您应该能够通过Pane API将窗格的宽度设置为零,或者使用Windows API SetWindowPos失败。然后改变可见性。我不使用VSTO,但知道可以使用原始Office Pane对象完成。