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:
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.
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: