У вас есть идеи для обхода этой известной ошибки в надстройке Visual Studio 2010? - PullRequest
0 голосов
/ 05 июня 2010

При разработке надстроек для Visual Studio 2010 происходит сбой следующей строки:

CommandBarEvents handler = (EnvDTE.CommandBarEvents)m_VSStudio.DTE.Events.get_CommandBarEvents(popup);

Обновление: забыл сказать, что m_VSStudio относится к типу DTE2

Где всплывающее окно имеет тип CommandBarPopup (для типа CommandBarControl это работает, хотя)

Сбой строки с этим исключением:

System.Runtime.InteropServices.COMException (0x80020003): Member not found. (Exception from HRESULT: 0x80020003 (DISP_E_MEMBERNOTFOUND))

Точно такая же строка работала в Visual Studio 2008.

Цель этой строки - получить обработчик, который обрабатывает кликвенты, когда кто-то нажимает на всплывающее окно.

После поиска в соме я нашел эту ссылку: http://connect.microsoft.com/VisualStudio/feedback/details/524335/events-get-commandbarevents-exception-on-submenus-reproducible-bug-addin

Который в основном утверждает, что это известная ошибка, которая не будет исправлена, поскольку существует обходной путь. Но, к сожалению, это не означает обходной путь: (

Я был бы чрезвычайно рад, если у кого-нибудь есть отличная идея для обхода проблемы?

Причина, по которой я хочу прослушивать события щелчка, заключается в том, что я хочу показать или скрыть подменю (CommandBarControl) при заданном некотором условии при нажатии на меню (CommandBarPopup).

Так что обходной путь, который использует что-то еще, кроме события click, также будет оценен.

Ответы [ 2 ]

1 голос
/ 06 июня 2010

Джеспер и я говорили об этом по электронной почте. Что он пытался сделать, так это убедиться, что члены всплывающего меню, которые он создал, были в надлежащем состоянии прямо перед тем, как их показывали. Он использовал Click даже на CommandBarPopup (который устарел в 2010 году при переходе на WPF), чтобы узнать, когда ему нужно обновить состояние. Я упомянул, что предпочтительным способом сделать это (даже в 2008 году) будет реализация IDtCommandtarget в его классе AddIn. Оболочка VS вызовет этот метод, когда ему нужно будет найти статус команд. Он будет вызывать этот метод во все «обычные» моменты времени, когда обновляет состояние команды (т. Е. В режиме ожидания, если необходимо, непосредственно перед отображением меню и т. Д.). Переход к этому методу работает для его сценария и, похоже, решает его проблему.

Райан

0 голосов
/ 05 июня 2010

К сожалению, фразы «наша переписка по электронной почте» и «вы нашли обходной путь» были помещены в общедоступную ошибку без указания на то, каков был обходной путь. Я подозреваю, что человек пытался сделать что-то совершенно отличное от вас (даже если он использовал тот же механизм событий для подключения), поэтому, возможно, мы нашли лучший способ сделать то, что ему нужно. Я не могу придумать простого способа сделать то, что ты делаешь, хотя, если бы я понял, почему ты пытался делать то, что ты делаешь (то есть ты скрываешь свои собственные команды? тогда, возможно, мы могли бы что-то придумать. Не стесняйтесь, пишите мне напрямую, адрес rmolden AT microsoft DOT com, извините за неудобства. Здесь мы также можем найти любую работу, которую найдем, чтобы она постоянно использовалась машиной интернет-памяти.

...