创建自定义任务窗格(_CustomTaskPane MSDN)并将其DockPosition设置为浮动时,我想指定出现的窗口的Top和Left属性。由于 Office COM API 不提供直接执行此操作的可能性,因此人们建议更改 CommandBar 的相应属性的值:
var application = (_Application)_nativeTaskPane.Application;
application.CommandBars["Task Pane Title"].Top = top;
application.CommandBars["Task Pane Title"].Left = left;
在上面的代码中,我假设
1) _nativeTaskPane 是我实现 _CustomTaskPane 的实例(实际上是 Microsoft.Office.Core.CustomTaskPane)
2) _Application 是 Microsoft.Office.Interop.Excel._Application
当然,我是在设置Visible = true之后这样做的。甚至订阅了任务窗格的VisibleStateChange以更加确定。但是,我收到了带有 HRESULT E_FAILED 的 COMException。
问题是我可以在调试时读取这些属性(顶部和左侧),但是设置它们会引发异常。
看起来这个问题至少在互联网上出现了好几次:
1) http://www.add-in-express.com/forum/read.php?FID=1&TID=5595
2) [http://aritrasaha.wordpress.com/2009/05/19/programatically-position-office-2007-floating-custom-task-pane/]
3) [http://www.visualstudiodev.com/visual-studio-tools-for-office/need-location-of-custom-task-pane-45822.shtml]
解决方法是使用 Windows API。但是,任何人都可以解释使用 CommandBar 方法有什么问题吗?也许我可以“重新配置”让这个 Top/Left-setter 毫无例外地工作。