0

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))

まったく同じ行がVisualStudio2008で機能しました。

この行の目的は、ポップアップをクリックしたときにクリックイベントを処理するハンドラーを取得することです。

som検索した後、私はこのリンクを見つけました:http: //connect.microsoft.com/VisualStudio/feedback/details/524335/events-get-commandbarevents-exception-on-submenus-reproducible-bug-addin

これは基本的に既知のバグであり、回避策があるため修正されないことを示しています。しかし残念ながら、それは回避策を述べていません:(

誰かが回避策について素晴らしいアイデアを持っているなら、私は非常に嬉しいですか?

クリックイベントを聞きたいのは、メニュー(CommandBarPopup)をクリックしたときに、何らかの条件でサブメニュー項目(CommandBarControl)を表示または非表示にしたいためです。

したがって、クリックイベント以外のものを使用する回避策もありがたいです。

4

2 に答える 2

1

ジェスパーと私はこれについて電子メールで話しました。彼がやろうとしていたことは、彼が作成したポップアップメニューのメンバーが、表示される直前に適切な状態にあることを確認することでした。彼は、CommandBarPopup(WPFへの移行で2010年に非推奨)でもClickを使用して、状態の更新をいつ行う必要があるかを知る方法を持っていました。これを行うための好ましい方法(2008年でも)は、彼のAddInクラスにIDtCommandtargetを実装することであると述べました。VSシェルは、コマンドのステータスを見つける必要があるときにこのメソッドを呼び出します。このメソッドは、コマンドの状態を更新するすべての「通常の」時間に呼び出されます(つまり、必要に応じてアイドル状態、メニューを表示する直前など)。この方法に移行することは彼のシナリオで機能し、彼の問題を解決するようです。

ライアン

于 2010-06-06T16:07:42.403 に答える
0

残念ながら、「私たちの電子メールの対応」および「回避策を見つけました」というフレーズが、回避策が何であるかを示さずに公開バグに入れられました。その人があなたとはまったく異なることをしようとしていたのではないかと思います(たとえ彼が同じイベントメカニズムを使用してフックインしていたとしても)、おそらく私たちは彼が必要なことを行うためのより良い方法を見つけました。あなたがしていることを簡単に行う方法は考えられませんが、なぜあなたがしていることをやろうとしているのか理解できれば(つまり、自分のコマンドを隠しているのですか?他の人のコマンドを隠しているのですか?何のために?)そうすれば、おそらく私たちは何かを考えることができます。直接私にメールしてください。アドレスはrmoldenATmicrosoft DOT comです。ご不便をおかけして申し訳ありませんが、また、ここで見つけた回避策をフォローアップして、インターネット記憶マシンによって常にキャプチャされるようにすることもできます。

于 2010-06-04T21:42:40.733 に答える