Windows Forms in Makros

Windows Forms in Makros anzeigen

Macros kann man immer wieder mal gebrauchen. Im Visual Studio funktioniert das so wie beim Office: Mit dem Recorder aufzeichnen, nachbearbeiten, und einen Button im Menü mit Bezug auf das Makro erstellen. Besonders nützlich sind Makros für mich beim Übersetzen von C# nach Visual Basic. (die automatischen Übersetzer machen immer wieder dieselben Fehler)

Was mir immer noch gefehlt hat, war ein Makro, das öffentliche und private Variablen mit (bis auf die Vorsilbe "m_") gleichen Namen erzeugen kann. Praktisch wäre dafür eine Auswahl aus verschiedenen Datentypen. Und das ginge am besten mit einer Windows Form, die so aussehen sollte:

Mit eigenen Makros und AddIns kann man sich die Arbeit deutlich erleichtern

Fragt mich warum das funktioniert, ich kann's nicht sagen. Hab halt probiert und dann hat's funktioniert. Allerdings habe ich die automatischen Listenvorschläge für die ComboBox auskommentiert und musste InitializeComponent separat aufrufen. Hat wahrscheinlich was mit Threading zu tun.

Dieses Makro würde folgenden Code produzieren: (Makro PropertiesBearbeiten.PropertyAnlegen)

Private m_MeineVariable As Single = 0.0F
ReadOnly
Property MeineVariable() As Single
Get
Return
m_MeineVariable
End Get
End
Property

Was mir noch gefehlt hat, war ein Makro, das aus all diesen privaten m_-Feldern einen Konstruktor macht:
(Makro PropertiesBearbeiten.Constructor_Erstellen)

So zum Beispiel:

Private m_MeineVariable As Single = 0.0F
Private m_ZweiteVariable As Decimal = 0D

Public Sub New( ByVal MeineVariable As Single , ByVal ZweiteVariable As Decimal)
m_MeineVariable = MeineVariable
m_ZweiteVariable = ZweiteVariable
EndSub

Beide Makros sind in der Download-Datei oben (Macros.zip) als Text-Datei enthalten. Man braucht im Makro-Explorer nur noch ein neues Modul namens "PropertiesBearbeiten" zu erstellen, den Text aus der Text-Datei auf diese Seite zu kopieren und dann mit Extras->Anpassen->Befehle->Makros wie im folgenden Bild zu sehen, einen Button für jedes Makro auf die Menüleiste zu ziehen. Und schon sollte es funktionieren.

Anfügen eines Makro-Buttons an eine vorhandene Symbolleiste

Natürlich hat mir das nicht genügt. Wenn man schon das Makro hat, ist ein AddIn noch besser. Immerhin hätte ich gerne alle Windows Forms Features (wie die automatischen Listenvorschläge).

Ein AddIn muss nicht viel Code enthalten. Man legt im Visual Studio ein neues Projekt mit der Vorlage "Add-In für Visual Studio" an. Ein Assistent stellt noch ein paar einfache Fragen, und schon hat man alles notwendige, um ein Add-In mit Makros oder reinem Visual-Basic-Code zu erstellen.

Wesentlich ist die Klasse Connect, die die Interfaces IDTExtensibility2 und IDTCommandTarget implementiert. Man kann diese Klasse benutzen, um beim Laden des AddIn Buttons im Menü zu platzieren oder benutzerdefinierte Kontext-Menüeinträge zu erstellen. Die Visual Studio Hilfe ist, was Informationen zu Makros und AddIns betrifft, noch etwas sparsam. Die Ausgabe 10/06 des dotnetPro-Magazins enthält einen ausführlichen Beitrag (von André Minhorst) zum Thema Erstellen und Installieren von AddIns.

Also, eine AddIn-Vorlage mit Assistenten erstellen ist kinderleicht. Was dann schwierig wird, ist der Zugriff auf die Informationen, die die IDE so liefert. Ist es nun ein VB-Text-Fenster auf das ich zugreife, befinde ich mich mit der Selektion an einem passenden Platz außerhalb eines Property-Abschnitts aber innerhalb einer Klasse... und so weiter. Somit ist das hier folgende AddIn alles andere als perfekt, aber es erfüllt seinen Zweck. Als Download habe ich mal den Code des AddIn (PropsCode.zip) und eine Version zum Installieren (PropsSetup.zip) hinzugefügt.

Das Installer-Paket PropsSetup.msi macht nichts anderes als die Dateien Props.dll und Props.AddIn in den Ordner Eigene Dateien\Visual Studio 2005\AddIns zu kopieren. Man kann also so ein AddIn auch einfach "per Hand" in dieses Verzeichnis kopieren. Beim nächsten Start von Visual Studio sollte das AddIn dann im AddIn-Manager zu finden sein. Nach Aktivierung und Auswahl eines VB-Code-Abschnittes sollten dann zwei neue Menüeinträge im Extras-Menü zu finden sein:

Nach Installation eines AddIn stehen die enthaltenen Befehle im Extras-Menü zur Verfügung.