Steuerelemente der Visual Studio .NET-Toolbox hinzufügen
Veröffentlicht: 10. Jan 2005
Von Mathias Schiffer
In diesem MSDN Quickie erfahren Sie, wie Sie selbst erstellte Steuerelemente programmatisch der Visual Studio .NET Toolbox hinzufügen - ein Muss für Ihr Setup.
Das Erzeugen eines benutzerdefinierten Steuerelements kann eine anstrengende Angelegenheit sei. Denn neben dem Erstellen einer Dokumentation benötigen Sie noch ein Installationsprogramm, wenn Sie Ihr Werk auch Dritten zur Arbeitserleichterung zukommen lassen wollen.
In diesem Rahmen ist es beispielsweise auch empfehlenswert, dass Ihr Steuerelement mit der Installation auch einen Platz in der Visual Studio .NET-Steuerelementleiste findet. „Von Hand“ kann der Anwender dafür das Fenster „Toolbox anpassen“ verwenden, das er über den Extras-Menübefehl „Toolboxelemente hinzufügen/entfernen“ erreicht. Besser und professioneller wirkt es aber natürlich, wenn sich Ihr Installationsprogramm darum auch gleich kümmert.
Möchten Sie Abläufe in Visual Studio .NET programmieren, so benötigen Sie dafür Zugriff auf das Objektmodell der Entwicklungsumgebung, angeboten durch das DTE-Objekt im Namespace EnvDTE (.NET-Assembly envdte.dll, COM-Typbibliothek dte.olb). Es bildet den obersten Knoten der Automationsschnittstelle von Visual Studio .NET und ist mit dem Application-Objekt anderer VBA-/VSA-Hostanwendungen (z.B. Microsoft Office) vergleichbar. Die kryptische Abkürzung steht übrigens für „Development Tools Environment“.
Um das DTE-Objekt und damit das Automatisierungsmodell von Visual Studio .NET nutzen zu können, müssen Sie den Namespace EnvDTE in Ihrem Projekt referenzieren. Wählen Sie dazu aus der Liste der verfügbaren .NET-Referenzen den Eintrag „envdte“ aus. Nun können Sie ein DTE-Objekt erzeugen oder von einer laufenden Instanz von Visual Studio .NET abholen. Ausgeschlossen hingegen ist die Erzeugung eines DTE-Objekts über den Visual Basic-Operator New.
' Neue Instanz von Visual Studio .NET erzeugen Dim DTE As Object DTE = Microsoft.VisualBasic.Interaction.CreateObject ("VisualStudio.DTE.7.1") ' Bestehende Instanz der Visual Studio .NET IDE abholen Dim DTE as EnvDTE.DTE DTE = CType(System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE"), EnvDTE.DTE)
Ist das DTE-Objekt erst einmal bei der Hand, gestaltet sich der Rest unseres Ansinnens beinahe wie ein Kinderspiel: Zunächst können Sie über die Windows-Auflistung das Fenster der Werkzeugleiste abholen. Bekanntlich besteht das Fenster der Werkzeugleiste aus mehreren Steuerelementgruppen, die im Werkzeugfenster als ToolBoxTab bezeichnet werden. Im Objektmodell der Entwicklungsumgebung sind diese in einer ToolBoxTabs-Auflistung gesammelt, die Sie nach Belieben modifizieren können. Jedes ToolBoxTab enthält die ToolBoxItems, wobei jedes ToolBoxItem einen Eintrag in einer Steuerelementgruppe repräsentiert – etwa das Icon eines Steuerelements, ein Textfragment (siehe MSDN Quickie „Toolbox in VS.NET für Codeschnipsel nutzen“) etc.
' Abholen des Automationsobjekts für VS .NET Dim DTE As EnvDTE.DTE DTE = CType(System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE"), EnvDTE.DTE) ' Abholen des zugehörigen Werkzeugfensters Dim ToolboxWindow As EnvDTE.Window ToolboxWindow = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindToolbox) ' Das Werkzeugfenster hat verschiedene Tabs, die in der ' abzuholenden ToolBoxTabs-Auflistung geführt werden: Dim ToolTabs As EnvDTE.ToolBoxTabs ToolTabs = CType(ToolboxWindow.Object, EnvDTE.ToolBox).ToolBoxTabs '' Probeausgabe für Ihre Tests: Titel aller Tabs ausgeben 'For Each tt As EnvDTE.ToolBoxTab In ToolTabs ' Console.WriteLine(tt.Name) 'Next ' So fügen Sie der Standard-Toolboxgruppe einen Texteintrag ' hinzu, der bei Verwendung ein Textfragment einfügt ' (Textbutton "Maustext", fügt "Hier kommt die Maus!" ein): Dim ToolTabItem As EnvDTE.ToolBoxItem ToolTabItem = ToolTabs.Item("General").ToolBoxItems().Add( _ "Maustext", _ "Hier kommt die Maus!", _ EnvDTE.vsToolBoxItemFormat.vsToolBoxItemFormatText) ' Erzeugen einer neuen Steuerelementgruppe im Werkzeugfenster ' und Einbringen von Steuerelement-Icons: ' ------------------------------------------------------------ Dim ToolTab As EnvDTE.ToolBoxTab ' Neues Tab einrichten ToolTab = ToolTabs.Item("aixsoft-Controls") If ToolTab Is Nothing Then ToolTab = ToolTabs.Add("aixsoft-Controls") End If With ToolTab ' Steuerelement-Icons einer .NET-Komponente hinzufügen: .ToolBoxItems.Add("Supercontrol", _ "d:\aixcomponent.dll", _ EnvDTE.vsToolBoxItemFormat.vsToolBoxItemFormatDotNETComponent) ' Textbutton "Maustext" hinzufügen (fügt "Hier kommt die Maus!" ein): .ToolBoxItems().Add( _ "Maustext", _ "Hier kommt die Maus!", _ EnvDTE.vsToolBoxItemFormat.vsToolBoxItemFormatText) End With
Mathias Schiffer widmet sich als freier Softwareentwickler und Technologievermittler größeren Projekten ebenso wie arbeitserleichternden Alltagslösungen. Seit Jahren gibt er sein Wissen in unzähligen Publikationen auch an andere Entwickler und Entscheider weiter. Sie erreichen ihn per E-Mail an die Adresse Schiffer@mvps.org.