「テーブル」ノードのコンテキストメニューとサーバーエクスプローラーのデータ接続セクションの各子ノードにメニュー項目を追加するVisual Studio拡張機能をビルドしました。メニューは、私は動的にメニュー項目がすべきかどうかを無効にするか、選択/有効になって、メニュー項目の状態を制御することができます表示される前に、私はBeforeQueryStatusイベントが発生してメニュー項目を有線ましVisual Studio拡張で、サーバーエクスプローラーのノードに関する情報を取得
まったく現れません。
BeforeQueryStatusイベントと呼び出しハンドラの両方で、選択したノードが表すオブジェクトに関する情報にアクセスする必要があります。私は実際のデータ接続の接続文字列プロパティを知る必要があります。これは "テーブル"親ノードで表されています。
選択したノードは、テーブルノード(「表」の子)であれば、私はまた、ノードが表しているテーブル名とスキーマを知っておく必要があります。
私は様々なオブジェクトを見てみましたが、私が何をしているのかは分かりません。どんな助けもありがたい。
private void Mnu_BeforeQueryStatus(object sender, EventArgs e)
{
OleMenuCommand mnu = (OleMenuCommand)sender;
EnvDTE.DTE service = (EnvDTE.DTE)this.ServiceProvider.GetService(typeof(EnvDTE.DTE));
EnvDTE.ContextAttributes ctx = service.ContextAttributes;
EnvDTE.Window w = service.ActiveWindow;
//EnvDTE.Properties p = service.Properties.;
EnvDTE.SelectedItems si = service.SelectedItems;
EnvDTE.ProjectItem pi = w.ProjectItem; //null
var selection = w.Selection; //null
var obj = w.Object;
var objk = w.ObjectKind;
}
これは素晴らしいです!私は、接続マネージャの特定の接続をサーバーエクスプローラのノードとどのように関連付けることができるのだろうかと思います。ユーザーがポップアップメニューを表示したときにMyイベントが発生しているので、ユーザーが右クリックしたノードとの関連付けを見つける必要があります。 – Jeremy
UIHierarchy.SelectedItemsを使用して、ユーザーが右クリックした接続情報を取得できます。同様のコードは、次のように参照できます:https://stackoverflow.com/questions/15541438/how-to-get-the-selected-connection-node-object-of-vs-server-explorer-window-ddex –