Die Top 10 der versteckten Features der IDE von Visual Studio .NET 2003

Veröffentlicht: 27. Okt 2005
Von Andreas Kosch

Mit Visual Studio .NET hat der Entwickler nicht nur eine neue IDE vor die Nase gesetzt bekommen, sondern mit dem .NET Framework auch ein völlig neues Fundament. Die meisten Entwickler sind daher gleich dort auf Entdeckungsreise gegangen, haben aber die Entwicklungsumgebung selbst etwas vernachlässigt. Daher schlummern bis heute noch unentdeckte Schätze in der IDE, die es zu heben gilt.

dot.net magazin


Diesen Artikel können Sie dank freundlicher Unterstützung von dot.net magazin auf MSDN Online lesen. dot.net magazin ist ein Partner von MSDN Online. Ausgabe: 7/8.05


Zur Partnerübersichtsseite von MSDN Online

Wenn es in einem Hollywood-Streifen um zu hebende Schätze geht, ist dort meistens eine Schatzkarte eines verruchten Piraten im Spiel, die auf wunderliche Art und Weise in die Hände des Hauptdarstellers fällt. In der Softwarebranche geht es etwas nüchterner zu, die Schatzkarte wird meistens zusammen mit dem Produkt vorinstalliert. Im Fall von Visual Studio .NET 2003 bringt der Menüpunkt EXTRAS|OPTIONEN einen Dialog zum Vorschein, der sich allerdings erst bei näherer Betrachtung in Wahrheit als Schatzkarte entpuppt. Nicht jeder Entwickler hat die Zeit (und vor allem die Muße), dort selbst alle Optionen durchzusehen und zu bewerten. Außerdem stellt sich in vielen Fällen der "Aha-Effekt" erst dann ein, wenn man mit eigenen Augen die Nützlichkeit der Funktion live gesehen hat. Es wird also Zeit, die für Visual Basic .NET und C# gemischte Hitliste zu Papier zu bringen, wobei selbstverständlich sowohl die Auswahl als auch die Position rein subjektiv ist. Damit das dot.net magazin nicht zum Bilderbuch mutiert, finden Sie auf der Heft-CD eine Powerpoint-Präsentation des Autors, die alle Tipps reichlich bebildert nochmals zusammenfasst.

Auf dieser Seite

 Vollbild-Modus
 Gleichzeitige Darstellung
 Quelltextformatierung
 Programmierhilfe
 Bezeichnertausch
 Zwischenablagenring
 To-Do-Liste
 Incremential Search
 Interface-Implementierung
 Build Events
 Der Autor

Vollbild-Modus

Wir leben in einer Zeit, in der für einen Software-Entwickler der Begriff RAD (Rapid Application Development) einen hohen Stellenwert hat. Die Entwicklungsumgebung stellt daher viele Hilfsmittelchen für die visuelle Entwicklung von Anwendungen zur Verfügung, was zwangsläufig dazu führt, dass auf dem Bildschirm allerlei Fenster gleichzeitig sichtbar sind. Immer dann, wenn Visual Studio . NET einen Designer anzeigt, sind die am linken und rechten Rand platzierten Fenster (Toolbox, Projektmappen-Explorer, Dynamische Hilfe usw.) nützliche Gehilfen. Dieses positive Gesamtbild trübt sich aber spätestens dann, sobald der Entwickler in die Editor-Darstellung wechselt, um dort die Programmzeilen einzutippen. Wenn er dann nicht vor einem üppig ausgestatteten Rechner sitzt, der eine große Bildschirmauflösung unterstützt oder gar zwei Monitore mit Daten füttert, ist das Editorfenster einfach zu klein. Um dieses Problem zu lösen, könnte man bei den Tool-Fenstern die Stecknadeln entfernen, damit Visual Studio .NET das so genannte "automatisch in den Hintergrund" aktiviert. Noch wirkungsvoller ist allerdings das wechselseitige Ein- und Ausschalten der Vollbild-Darstellung des Editor-Fensters. Über den Menüpunkt ANSICHT|GANZER BILDSCHIRModer über die Tasten-Kombination UMSCHALT+ALT+ENTER bringen Sie den ersten Schatz ans Tageslicht. Die IDE räumt daraufhin alle "unnötigen" Fenster weg und speckt sogar die eigene Werkzeugleiste ab, sodass am oberen Bildschirmrand nur noch die Menüzeilevon Visual Studio .NET zu sehen ist. Spätestens dann, wenn ein Beamer (der in der Regel nur eine kümmerliche Bildschirmauflösung unterstützt) Ihren Bildschirminhalt an die Wand wirft, sollten Sie sich an diese Funktion erinnern.

Gleichzeitige Darstellung

In der Voreinstellung zeigt Visual Studio .NET das Designer- und Quelltext-Fenster nicht gleichzeitig an, sodass der Entwickler über die Tastenkombination STRG+ TABULATOR hin und her wechseln muss. Wenn es Ihre Bildschirmlösung aber hergibt, können Sie dieses Verhalten so ändern, dass immer beide Teile (Designer und Editor) gleichzeitig zu sehen sind. Abbildung 1 zeigt einen der alternativen Wege, wie diese Darstellung aktiviert werden kann. Nach einem rechten Mausklick auf den Tab- Seitenreiter steht dort der Menüpunkt NEUE VERTIKALE REGISTERKARTENGRUPPEN zur Verfügung, Sie können die Tab-Seite jedoch auch direkt über Drag&Drop an die gewünschte Stelle ziehen. Alternativ dazu stellt Visual Studio .NET diese Funktion auch über das FENSTER-Menü bereit.

Per Drag&Drop der Tab-Seitenreiter lässt sich die Position nachträglich vertauschen. Die in der Abbildung 1 dargestellte Anordnung hat den Vorteil, dass das Formular niemals von der aufklappenden Toolbar (falls dort das automatische Ausblenden aktiv ist) verdeckt werden kann. Während die gleichzeitige Darstellung des Designer- und Quelltext-Fensters sowohl in Visual Basic .NET als auch in C# nutzbar ist, steht nur für die Sprache C# die gleichzeitige Darstellung einer Quelltextdatei in zwei verschiedenen Editorfenstern zur Verfügung. Diese Option aktivieren Sie über den Menüpunkt FENSTER|NEUES FENSTER - in Kombination mit FENSTER|NEUE VERTIKALEREGISTERKARTENGRUPPE erhalten Sie das in der unteren Hälfte der Abbildung 1 dargestellte Ergebnis. Müssen die mit Visual Basic .NET arbeitenden Entwickler somit auf die gleichzeitige Anzeige von verschiedenen Stellen der gleichen Quelltextdatei verzichten? Nein - denn für alle Sprachen gemeinsam stellt Visual Studio .NET auch noch eine über den Menüpunkt FENSTER|TEILEN erreichbare Alternative zur Verfügung. Über die daraufhin im Editorfenster angezeigte so genannte Splitterbar legen Sie die Größe der beiden Ausschnitte fest, wobei die Teilung mit einem Doppelklick auf die Splitterbar oder über den Menüpunkt FENSTER|TEILUNG ENTFERNEN wieder aufgehoben wird. Hätten Sie gern das Fenster vom Projektmappen-Explorer, dem Eigenschaftenfenster oder der Toolbox an einer völlig frei bestimmbaren Position auf dem Desktop außerhalb des Visual-Studio-.NET-Fensters? Wenn ja, reicht dazu jeweils ein Doppelklick auf die jeweilige Fensterzeile aus. Das als Reaktion darauf aus dem Docking-Verbund heraus gelöste enster lässt sich dann ohne Gegenwehr an eine beliebige Desktop-Position verschieben. Das Beste daran ist, das Sie hinterher nicht einmal selbst aufräumen müssen, im Optionendialog (Menüpunkt EXTRAS|OPTIONEN) ist im Zweig UMGEBUNG|ALLGEMEIN die Schaltfläche FENSTERLAYOUT ZURÜCKSETZEN zu finden, die nach dem Schließen des Optionendialogs das alte Aussehen wiederherstellt.

Formular und Editor sind gleichzeitig sichtbar
Abb. 1: Formular und Editor sind gleichzeitig sichtbar

Quelltextformatierung

Die Fähigkeit, über eigene Regionen definierte Abschnitte der Quelltextdatei auf Wunsch zusammenfalten zu können, wird wohl jeder Entwickler nutzen. Allerdings gibt es da die Lebensweisheit "Aus den Augen aus dem Sinn", sodass eine visuelle Erinnerungsfunktion nicht Schaden kann. Die Anzeige der Zeilennummerierung im Editorfenster ist an dieser Stelle hilfreich, denn dort ist sofort erkennbar, wie viele Programm- oder Kommentar-Zeilen zurzeit ausgeblendet sind. Im Optionendialog ist im Zweig TEXTEDITOR|ALLE SPRACHEN|ALLGEMEIN die Checkbox ZEILENNUMMERN zuständig. Wohl jeder Entwickler wird im Quelltext von Einrückungen Gebrauch machen, um die Lesbarkeit des Quelltextes zu erhöhen. Damit hören die Gemeinsamkeiten aber auf - denn auch die Frage "Tabulator- oder Leerzeichen?" oder gar "Um wie viele Leerzeichen einrücken?" kann sehr emotional diskutiert werden. Die Entwicklungsumgebung hält sich aus diesem Streit heraus - jeder Entwickler kann seine Vorliebe durch den Optionendialog im Zweig TEXTEDITOR|ALLE SPRACHEN|TABSTOPPS als Standard aktivieren. Was passiert aber, wenn Sie im Team arbeiten und Quelltextdateien von einem Entwickler in Ihr Projekt einbauen müssen, der eine andere Vorliebe hat? Auch für dieses Problem stellt die Entwicklungsumgebung bereits eine Lösung zur Verfügung. Als Erstes kann sich der Entwickler über die Tastenkombination STRG+R+W die Einrückungszeichen visuell anzeigen lassen, wobei diese Tastenkombination als Wechselschalter funktioniert. Sobald dort sichtbar wird, dass die in die Projektgruppe kopierte Datei das "falsche" Einrückungszeichen nutzt, markieren Sie über die Tastenkombination STRG+A den kompletten Quelltext, um diesen dann über die Tastenkombination STRG+K+F den eigenen Darstellungsregeln zu unterwerfen. Am Ende erhalten Sie eine Datei, die nur die eigenen Einrückungszeichen in der bevorzugten Tiefe enthält. Nur der Vollständigkeit halber sei an dieser Stelle erwähnt, dass für C# sogar die Frage, ob die öffnende geschweifte Klasse am Ende der gleichen Zeile erscheinen soll oder ob diese zu Beginn einer neuen Zeile steht, im Optionendialog beantwortet wird.

Programmierhilfe

Die von Microsoft unter dem Begriff IntelliSense geführte Programmierhilfe ist eine entscheidende Kernfunktion. Der Editor zeigt die Programmierhilfe zwar situationsbedingt automatisch an, aber Sie können diese nützlichen Helfer jederzeit auch selbst hervorzaubern:

  • STRG+J aktiviert die Anweisungs- Vervollständigung.

  • STRG+UMSCHALT+LEERTASTE aktiviert die Parameter-Information.

  • STRG+K+I blendet das Tooltip-Fenster ein.

In der Voreinstellung erhalten jedoch nur die mit der Sprache C# arbeitenden Entwickler eine vollständige Liste. Wie im Optionendialog im Zweig TEXT- EDITOR|BASIC|ALLGEMEIN zu sehen ist, sorgt die in der Voreinstellung angekreuzte Checkbox ERWEITERTE MITGLIEDER AUSBLENDEN dafür, dass etwas im Verborgenen bleiben soll. Der Grund dafür liegt darin, dass für die mit Visual Basic .NET arbeitenden Entwickler im Interesse der Übersichtlichkeit nur die Teile sichtbar sein sollen, die in der Praxis benötigt werden.

Bezeichnertausch

Ein Entwickler, der lieber mit C# arbeitet, wird mit der Tatsache konfrontiert, dass viele Quelltextbeispiele nur in der "falschen" Sprache vorliegen. Damit trotzdem die Zwischenablage keinen Staub ansetzt, haben die Väter von Visual Studio .NET eine spezielle Tastenkombination vorgesehen, die bei der Übersetzung von Visual Basic .NET nach C# hilft. Angenommen, die folgende Zeile wurde über die Zwischenablage in den C# -Quelltext kopiert:

Dim aCmd As SqlCommand

Aus der Sicht von C# ist an dieser Zeile so einiges falsch: Die Bezeichner Dim und As müssen weg, die Reihenfolge von aCmd und SqlCommand stimmt nicht und am Ende fehlt das Semikolon. Um diese Mängel mit minimalem Tippaufwand zu beseitigen, helfen die folgenden Handgriffe weiter:

  • Der Cursor wird an den Anfang der Zeile gesetzt

  • Über die Tastenkombination STRG+W wird das erste Wort (Dim) markiert und über die ENTF-Taste gelöscht.

  • Der Cursor wird an das Ende von aCmd gesetzt, wobei bei langen Bezeichnungen auch hier die Tastenkombination STRG+W den Vorgang abkürzt.

  • Das Wort As wird gelöscht.

  • Der Cursor steht nun am Ende von aCmd, die Tastenkombination STRG+UMSCHALT+T vertauscht die Reihenfolge der Wörter, so dass als Ergebnis die Zeile SqlCommand aCmd zu sehen ist.

  • Der Cursor befindet sich nun am Ende von aCmd, sodass die Zeile mit dem Semikolon korrekt abgeschlossen werden kann.

Zwischenablagenring

Immer dann, wenn Sie im Editorfenster etwas in die Zwischenablage kopieren, legt Visual Studio automatisch einen neuen Eintrag im Abschnitt Zwischenablagenring der Toolbox an. Es ist nahe liegend, dass diese Toolbox-Einträge per Drag&Drop im Editor- Fenster nutzbar sind. Dazu müssen Sie jedoch erst die Toolbox sichtbar machen und außerdem noch zur Maus greifen. Spürbar schneller führt die Tastenkombination STRG+UMSCHALT+V zum Ziel, die den aktuellen Eintrag im Zwischenablagenring sofort an die Cursorposition einfügt. Was passiert aber, wenn Sie erst beim Einfügen merken, dass es nicht der richtige Eintrag ist? In diesem Fall halten Sie STRG+UMSCHALT gedrückt, um dann solange die Taste V auszulösen, bis der richtige Inhalt vorbeikommt. Durch das erneute Drücken der V-Taste tauscht der Editor den zuletzt eingefügten Bereich gegen den nächsten Eintrag aus dem Zwischenablagering aus.

To-Do-Liste

In der Voreinstellung zeigt Visual Studio .NET alle Kommentarzeilen, die mit der Zeichenkette "TODO" beginnen, automatisch in der Aufgabenliste an. Im Optionendialog können Sie jedoch im Zweig UMGEBUNG|AUFGABENLISTE über die Schaltfläche HINZUFÜGEN eigene so genannte Kommentartoken hinzufügen, die ebenfalls von der Aufgabenliste berücksichtigt werden. Ist Ihnen schon aufgefallen, dass die Aufgabenliste auch in der Lage ist, gespeicherte Lesezeichen zu verwalten? Über den Menüpunkt BEARBEITEN|TEXTMARKEN|VERKNÜPFUNG FÜRAUFGABENLISTE HINZUFÜGEN legen Sie einen derartigen Eintrag an, wobei Visual Studio .NET diesen durch einen blauen Pfeil sowohl im Editorfenster als auch in der Aufgabenliste visuell kenntlich macht (Abbildung 2). Falls Ihnen die vorbelegte Beschreibung nicht gefällt, kann diese direkt in der Aufgabenliste geändert werden. Wird ein derartiger Eintrag in der Aufgabenliste mit einem Doppelklick aktiviert, zeigt das Editorfenster diesen Bereich sofort an. Damit sind die Fähigkeiten der Aufgabenliste aber noch nicht erschöpft. Denn wie Abbildung 2 auch zeigt, können Sie dort einen Eintrag hinzufügen, der keine Verbindung zu einer bestimmten Projektdatei besitzt.

Die vier Varianten von To-Do-Einträgen
Abb. 2: Die vier Varianten von To-Do-Einträgen

Incremential Search

Den Menüpunkt BEARBEITEN|SUCHEN UND ERSETZEN zum Aufrufen des Suchdialogs haben Sie bestimmt schon entdeckt. Das die direkte Suche über das Suchen-Eingabefeld in der Werkzeugleiste ohne den Umweg über den Suchdialog sofort zum Ziel führt, wissen die meisten Entwickler auch bereits . Die Fähigkeiten der inkrementellen Suche sind allerdings erst dann sichtbar, wenn diese Funktion über die Tastenkombination STRG+I angefordert wird. Visual Studio .NET zeigt daraufhin ein Fernglas mit einem Pfeil an. Wenn Sie dann die ersten Zeichen des Suchbegriffs eintippen, springt der Cursor sofort die erste Fundstelle an. Mit jedem zusätzlich eingetippten Zeichen verfeinern sich die Treffer. Kommt der vollständig ausgefüllte Suchbegriff mehrfach im Text vor, springt man durch das erneute Drücken von STRG+I zur nächsten Textstelle. Über die ESC-Taste schalten Sie diesen Suchmodus wieder aus.

Interface-Implementierung

Sie werden bestimmt schon einmal an der einen oder anderen Stelle gelesen haben, dass ein Entwickler über eigene Interfaces in seiner Anwendung saubere Trennlinien ziehen sollte. Nun könnte von Ihnen allerdings der Einwand kommen, dass damit ja ein schmerzlich höherer Tippaufwand verbunden wäre. Im Fall von Visual Studio .NET 2003 entfällt jedoch diese Ausrede, denn wie Abbildung 3 zeigt, legt die IDE die implementierenden Methodenrümpfe automatisch an.

Visual Studio .NET legt die Methoden-Rümpfe automatisch an
Abb. 3: Visual Studio .NET legt die Methoden-Rümpfe automatisch an.

Die mit C# arbeitenden Kollegen können den gleichen Komfort nutzen, dort muss allerdings nach dem Eintippen des Schnittstellennamens solange gewartet werden, bis Visual Studio .NET das Tool-Tip-Fenster mit der Aufforderung zum Drücken der Tabulator-Taste anzeigt. Somit entspricht die automatische Schnittstellenimplementierung vom Verhalten her der automatische Ereignisbehandlungsimplementierung (denn auch dort muss nach dem Eintippen von "+=" kurze Zeit gewartet werden).

Build Events

Im Eigenschaftendialog eines Visual-C#- Projekts können im Zweig ALLGEMEINE EIGENSCHAFTEN|BUILDEREIGNISSE eigene Anweisungen festgelegt werden, die vor beziehungsweise nach dem Build-Vorgang des Projekts automatisch ablaufen sollen. Auf Wunsch blendet Visual Studio .NET einen zusätzlichen Dialog ein, in dem die verfügbaren Umgebungsvariablen aufgelistet werden. Über diesen Weg können Sie zum Beispiel nach dem erfolgreichen Kompilieren des Projekts alle Textdateien in das jeweilige Output-Verzeichnis (Debug oder Release) kopieren, indem die folgende Anweisung eingetragen wird:

copy /y "$(ProjectDir)*.txt" "$(ProjectDir)$(OutDir)"

Das zweite Beispiel (das wohl einen stärkeren Bezug zur Praxis hat) registriert nach jedem erfolgreichen Kompilieren der Klassenbibliothek diese auch im Global Assembly Cache. Während die Umgebungsvariable %systemroot% vom Betriebssystem aufgelöst wird, entspricht $(Target- Path) dem vollständigen Pfadnamen des primären Outputs des Klassenbibliothekprojekts:

%systemroot%\Microsoft.NET\Framework\v1.1.4322\
gacutil.exe -i $(TargetPath)

Der Autor

Andreas Kosch (Baujahr 1962) beschäftigt sich in seinem Alltag mit der Konzeption und Entwicklung von dreischichtigen Datenbankanwendungen für den MS SQL Server (Schwerpunkt: .NET Enterprise Services). Als alter Hase hat er es mit mehreren Sprachen (SQLWindows, Delphi, C# und Visual Basic.NET) zu tun. Sie erreichen ihn per E-Mail unter: OssiSoft@aol.com.


Anzeigen: