При создании настраиваемой области задач ( _CustomTaskPane MSDN ) и установке ее DockPosition в плавающее состояние, я хочу указать Top и Left свойства окна появились. Поскольку API-интерфейсы Office COM не предоставляют прямой возможности сделать это, люди советуют изменить значения соответствующих свойств 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 is Microsoft.Office.Interop.Excel._Application
Конечно, я делаю это после установки Visible = true . Даже подписался на VisibleStateChange панели задач, чтобы быть более уверенным. Однако я получаю COMException с HRESULT E_FAILED.
Дело в том, что я могу прочитать эти свойства (сверху и слева) при отладке, однако их установка вызывает исключение.
Похоже, проблема всплывала в Интернете по крайней мере несколько раз:
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 работал без исключений.