Ich habe eine Visual Studio-Erweiterung erstellt, die dem Kontextmenü des Knotens "Tabellen" und jedes untergeordneten Knotens im Abschnitt Server-Explorer-Datenverbindungen ein Menüelement hinzufügt.Visual Studio-Erweiterung, Informationen über Knoten im Server-Explorer erhalten
Ich habe den Menüpunkt verdrahtet, so erscheint die BeforeQueryStatus Ereignis ausgelöst wird, bevor das Menü so kann ich dynamisch den Zustand des Menüpunktes steuern, es aktiviert/deaktiviert oder die Wahl, ob das Element Menü machen sollte erscheinen überhaupt.
Sowohl im BeforeQueryStatus-Ereignis als auch im Invoke-Handler muss ich auf Informationen zu dem Objekt zugreifen, das der ausgewählte Knoten darstellt. Ich muss die Connection String-Eigenschaft der tatsächlichen Datenverbindung kennen, die im übergeordneten Knoten "Tables" dargestellt wird.
Wenn der ausgewählte Knoten einen Tabellenknoten (Kind von „Tables“) ist brauche ich auch die Tabellennamen und das Schema zu wissen, dass der Knoten repräsentiert.
Ich habe versucht, verschiedene Objekte zu betrachten und kann nicht finden, was ich suche. Jede Hilfe wird geschätzt. Hier ist mein Ausgangspunkt:
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;
}
Das ist großartig! Ich frage mich dann, wie ich eine bestimmte Verbindung im Verbindungsmanager mit einem Knoten im Server-Explorer korrelieren kann. Da Mein Ereignis ausgelöst wird, wenn der Benutzer das Popup-Menü anzeigt, muss ich die Verbindung finden, die mit dem Knoten übereinstimmt, auf den das Benutzerrecht geklickt hat. – Jeremy
Sie können UIHierarchy.SelectedItems verwenden, um die Verbindungsinformationen abzurufen, auf die Benutzerrechte geklickt haben. Ähnliche Code könnten Sie beziehen: https://stackoverflow.com/questions/15541438/how-to-get-the-selected-connection-node-object-of-vs-server-explorer-window-ddex –