Karsten Samaschke, Christian Hoofe Visual Basic 2005 Express Edition
Karsten Samaschke, Christian Hoofe
Visual Basic 2005 Express Edition
Karsten Samaschke, Christian Hoofe: Visual Basic 2005 ISBN 3-935042-84-1
© 2006 entwickler.press Ein Imprint der Software & Support Verlag GmbH
http://www.entwickler-press.de http://www.software-support.biz
Ihr Kontakt zum Verlag und Lektorat:
[email protected] Bibliografische Information Der Deutschen Bibliothek Die Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.ddb.de abrufbar.
Korrektorat: mediaService, Siegen Satz: mediaService, Siegen Umschlaggestaltung: Melanie Hahn Bild mit freundlicher Genehmigung von HP. Belichtung, Druck & Bindung: M.P. Media-Print Informationstechnologie GmbH, Paderborn Alle Rechte, auch für Übersetzungen, sind vorbehalten. Reproduktion jeglicher Art (Fotokopie, Nachdruck, Mikrofilm, Erfassung auf elektronischen Datenträgern oder andere Verfahren) nur mit schriftlicher Genehmigung des Verlags. Jegliche Haftung für die Richtigkeit des gesamten Werks kann, trotz sorgfältiger Prüfung durch Autor und Verlag, nicht übernommen werden. Die im Buch genannten Produkte, Warenzeichen und Firmennamen sind in der Regel durch deren Inhaber geschützt.
Inhaltsverzeichnis
1
2
3
Vorwort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1 Kosten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Installationsvoraussetzungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Download von Visual Basic Express . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Installation über das Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Installation von der Buch-CD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4 Installation durchführen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5 Deinstallation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Start mit Visual Basic Express Edition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1 Projekte anlegen und verwalten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Informationsquellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MSDN – Microsoft-Developer-Netzwerk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Community . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Weitere Fenster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4 Einrichten der Oberfläche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Einrichten der Fenster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Automatisch im Hintergrund . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5 Symbolleisten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.6 Einstellungen importieren und exportieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ausgewählte Umgebungseinstellungen exportieren . . . . . . . . . . . . . . . . . . . . . . Ausgewählte Umgebungseinstellungen importieren . . . . . . . . . . . . . . . . . . . . . . Alle Einstellungen zurücksetzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.7 Optionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ein erstes Programm schreiben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1 Neues Projekt anlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Starten eines gespeicherten Projekts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Projektmappen-Explorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4 Visuell arbeiten mit dem Ansichts-Designer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Positionierung von Dialogelementen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5 Eigenschaften eines Dialogelements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6 Programm ausführen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.7 Arbeiten mit dem Quelltext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bestandsaufnahme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Standardereignis eines Elements behandeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Express Edition
9 11 11 11 12 12 12 12 15 16 17 18 20 20 20 22 24 24 25 27 29 29 30 31 31 33 33 36 37 38 40 42 45 46 46 48
5
Inhaltsverzeichnis 3.8
4
5
6
6
Debug/Release-Versionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Seitenblick: .NET-Versionsprobleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Deployment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.9 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Arbeit mit Elementen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1 Toolbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Allgemeine Steuerelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DateTimePicker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . NotifyIcon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . TabControl-Steuerelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Menüs & Symbolleisten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Weitere Komponenten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eigenschaften und Ereignisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1 Arbeit mit dem Eigenschaften-Fenster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Darstellung nach Kategorien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Darstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Daten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eingabe-Hilfen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Entwurf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fensterstil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fokus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sonstiges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Verhalten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3 Spezielle Eigenschaften anderer Steuerelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4 Dock-Eigenschaft . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5 Ereignisse behandeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Standard-Ereignis behandeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ereignis mit Standard-Behandlungsmethode behandeln . . . . . . . . . . . . . . . . . Ereignis mit selbst benannter Behandlungsmethode behandeln . . . . . . . 5.6 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Toolbox anpassen und Code-Ausschnitte verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1 Eigenes Steuerelement erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rückgabe auswerten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Anpassen des Dialogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Eigene Toolbox-Elemente hinzufügen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Weitere Elemente hinzufügen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.3 Codeausschnitte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Konditionelles Statement definieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Komplexeres Statement einfügen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49 50 50 50 51 51 52 52 53 54 56 59 62 63 64 66 67 68 69 70 71 71 72 72 72 73 75 75 76 76 77 78 79 79 81 84 84 85 86 87 88
Inhaltsverzeichnis
7
8
9
6.4 Codeausschnitt-Manager erweitern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.5 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Suche und Lesezeichen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1 Gehe zu ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2 Suchen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Platzhalter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Reguläre Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3 Lesezeichen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.4 Suchen und Ersetzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Vorgang durchführen, Ergebnisnavigation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ersetzen mit Hilfe regulärer Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.5 Suchen in Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Suchordner festlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Weitere Optionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Vorgang durchführen, Ergebnisnavigation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.6 Suchen und Ersetzen in Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Vorgang durchführen, Ergebnisnavigation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.7 Symbolsuche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Komponenten definieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Weitere Suchoptionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Vorgang durchführen, Ergebnisnavigation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.8 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . AutoCompletion, IntelliSense und XML-Kommentare . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1 Kommentare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Definition von XML-Kommentaren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Erstellen von Dokumentationsdateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2 IntelliSense und AutoCompletion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.3 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.1 Haltepunkte setzen und entfernen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2 Debuggen starten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3 Werte einsehen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.4 Aktionen vornehmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.5 Ausführungsposition festlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.6 Aufrufliste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.7 Einzel- oder Prozedurschritte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.8 Ausnahmen konfigurieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.9 Debuggen programmatisch erzwingen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.10 Tastenkombinationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.11 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Express Edition
89 92 93 93 93 96 97 101 102 102 103 104 105 107 107 108 109 110 110 112 113 114 115 115 115 119 121 124 125 125 126 127 128 129 129 130 131 132 133 133
7
Inhaltsverzeichnis 10 Datenbank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.1 Datenbank-Explorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2 Datenbank öffnen oder anlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.3 Auf die Datenbank zugreifen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.4 Mit Daten arbeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.5 Abfragedesigner und Abfragedesigner-Symbolleiste . . . . . . . . . . . . . . . . . . . . . . . . . Diagrammbereich . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Kriterienbereich . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . SQL-Bereich . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ergebnisbereich . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Datenbankanbindung in eigenen Applikationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.6 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Objektbrowser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.1 Öffnen des Objektbrowsers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Suchen im Objektbrowser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.3 Einschränken der angezeigten Objekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.4 Bequemlichkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.5 Kontextmenü im Objektbereich . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.6 Kontextmenü der Elementansicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.7 Übergeordnete Einstellungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.8 Tastenkombinationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.9 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Praxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.1 Anlegen des Projekts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.2 Menü anlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.3 Funktionalitäten hinterlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.4 Text setzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.5 Tipp: Mehr Überblick mit der Dokumentengliederung . . . . . . . . . . . . . . . . . . . . . . 12.6 Begrüßungsbildschirm hinzufügen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.7 Erweiterungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.8 Ressourcen editieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.9 Dateidialog zur Dateiverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.10 Exkurs: Korrekturfähigkeiten des Quelltexteditors . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.11 Neue Datei anlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.12 Speichern implementieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.13 Weitere Funktionalitäten für den Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.14 Schriftarten-Dialog verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.15 Container . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.16 Veröffentlichen der Anwendung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.17 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
135 135 135 138 139 141 142 143 144 145 145 148 149 149 150 151 154 155 158 160 162 162 163 163 164 166 167 172 173 178 181 182 185 187 191 192 193 194 195 197 199
Vorwort Wenn Sie dem aktuellen Hype folgen wollen, sollten Sie sich Sprachen wie PHP oder Python zuwenden. Auch Themen wie Web 2.0 oder AJAX sind derzeit stark angesagt. Andererseits: Erinnern Sie sich noch an Modula, Ada, Scheme, Pascal oder C++? Sie alle sind verschwunden oder verlieren sich gerade aus dem Blickfeld des interessierten Entwicklers. Bald werden nur noch Fachleute den einen oder anderen Begriff deuten können. Um so verwunderlicher ist es, dass es auch heute noch eine längst totgeglaubte Sprache gibt, die mehr und mehr Anhänger findet. Vielleicht oder gerade weil sie sich dem aktuellen Trend entgegenstellt und ganz gewiss keinen Hype entfachen wird: Basic. Auch die neueste Version VB.NET 8.0 (oder auch B#, wie Spötter meinen) ist einfach zu erlernen, robust, leistungsstark und wird deshalb sehr gerne verwendet. Und: In Form der Visual Basic Express Edition gibt es sogar eine dauerhaft kostenlose Entwicklungsumgebung dafür! Mit diesem Schritt hat Microsoft Entwicklern den Einstieg in die .NET-Programmierung sehr erleichtert. Wir, die Autoren, haben uns beim Schreiben dieses Buches sehr intensiv mit der VBE, wie sie auch genannt wird, auseinander gesetzt – und, bis auf einige Kleinigkeiten, empfinden wir die Entwicklungsumgebung als sehr gelungen. Ehrlich gesagt merkt man nicht, dass man mit einer abgespeckten Kostenlos-Version arbeitet. In diesem Buch möchten wir Ihnen die grundlegenden Konzepte dieser hervorragenden Entwicklungsumgebung vorstellen. Dabei legen wir jedoch nicht Wert auf die ultimative Funktionsbeschreibung, sondern möchten Sie gezielt an die wesentlichen Funktionalitäten heranführen. Dabei legen wir großen Wert auf realistische Problemstellungen. Nach der Lektüre des Buches sollten Sie einen Überblick über die Möglichkeiten von Microsoft Visual Basic 2005 Express haben. Sie werden in der Lage sein, dieses professionelle Werkzeug effizient zu nutzen.
Express Edition
9
Vorwort
Christian Hoofe sagt Danke ... ... an: 쐌 Alle Freundinnen und Freunde 쐌 Meine Familie
Karsten Samaschke sagt Danke ... ... an: 쐌 Meine Freundin Dani 쐌 Meinen großen Sohn Johannes 쐌 Meinen kleinen Sohn Noah 쐌 Meine Mutter, meinen Vater und den Rest der Familie 쐌 Alle Kunden und Freunde 쐌 Unsere Umzugshelfer
Spezieller Dank geht ... ... an: 쐌 Christiane Auf für das geduldige Warten auf dieses Buch 쐌 Erik Franz für das geduldige Warten auf dieses Buch 쐌 Allen Lesern für das geduldige Warten auf dieses Buch 쐌 Microsoft für die Visual Basic Express Edition Bleibt uns, Ihnen an dieser Stelle viel Erfolg bei der Lektüre dieses Buches zu wünschen. Uns jedenfalls hat es großen Spaß gemacht, Ihnen diesen Leitfaden an die Seite zu stellen. Christian Hoofe und Karsten Samaschke im Juli 2006
10
1
Installation
Die Installation von Visual Basic Express gestaltet sich in der Regel sehr einfach. In diesem Kapitel machen wir Sie damit vertraut, was man alles braucht, wo man es bekommt und wie man es installiert.
1.1 Kosten Microsoft bietet alle Visual Studio 2005 Express Editionen gratis an. In den ersten Ankündigungen von Microsoft war die Rede von einem Preis von 49 USDollar je Entwicklungspaket. Laut Microsoft sind die Pakete bis zum 6. November 2006 gratis erhältlich. Die einzige Bedingung, die zu erfüllen ist, ist eine kostenlose Registrierung, die vom Programm nach einiger Zeit verlangt wird.
1.2 Installationsvoraussetzungen Folgende Voraussetzungen muss Ihr System erfüllen, damit VBE installiert werden kann: 쐌 Betriebssystem: Windows 2000 Service Pack 3; Windows 98; Windows 98 Second Edition; Windows ME; Windows Server 2003; Windows XP Service Pack 2 쐌 Software: Windows Installer 3.0, Windows Installer 3.1 oder höher. Windows Installer 2.0 oder höher für Windows 98/ME. 쐌 Internet Explorer 5.01 oder höher für alle Installationen des .NET Framework. 쐌 Festplattenspeicher: 280 MB (x86), 610 MB (x64) 쐌 Hauptspeicher: 192 MB, besser mehr als 256 MB 쐌 Prozessor: Mindestens 700 MHz Pentium, besser 1 GHz Pentium oder schneller
Hinweis Nach der Installation können mehr als 1,3 GByte belegt sein.
Express Edition
11
1 – Installation
1.3 Download von Visual Basic Express 1.3.1
Installation über das Internet
Die Visual Studio 2005 Express Editionen werden von Microsoft auf der Seite www.microsoft.com/germany/msdn/vstudio/express/download.mspx bereitgestellt. Folgen Sie dem Link für Visual Basic 2005 Express. Daraufhin können Sie das knapp 3 MB große Installationsprogramm herunterladen. Anschließend werden je nach Konfiguration zwischen 55 und 93 MB über das Internet geladen. Wählen Sie zusätzlich die MSDN, kommen noch einmal 248 MB hinzu. SQL Server 2005 Express beansprucht 55 MB.
1.3.2
Installation von der Buch-CD
Mit diesem Buch erhalten Sie eine Original-Microsoft-CD mit der Vollversion von Visual Basic in der Express Edition. Sollte sie fehlen, gibt es die Möglichkeit, eine komplette Imagedatei von Visual Basic 2005 Express herunterzuladen, die dann auf eine CD gebrannt werden kann. Sie finden das Image unter der folgenden Adresse: http://www.codezone.de/VisualStudioExpressImageISO.Codezone Das ISO-Image von Visual Basic 2005 Express ist circa 462 MB groß.
Hinweis Benutzen Sie unbedingt einen Download-Manager, damit eine Unterbrechung eines Downloads nicht dazu führt, dass Sie wieder von vorne beginnen müssen. Brennen Sie das Image auf eine CD. Nach dem Einlegen der CD sollte die Installation von VBE über die Autostart-Funktion automatisch angeboten werden.
1.4 Installation durchführen Bevor Sie mit der Installation beginnen, sollten Sie eventuell vorhandene ältere Installationen von Visual Basic 2005 Express entsprechend der weiter unten beschriebenen Anleitung entfernen. Starten Sie nun vbsetup.exe (Online-Version) bzw. setup.exe (CD-Version). Ein Willkommensbildschirm analog zu Abbildung 1.1 wird angezeigt.
12
Installation durchführen
Abb. 1.1: Installations-Willkommen
Nach einem Klick auf die Schaltfläche WEITER müssen Sie dem EndbenutzerLizenzvertrag zustimmen. Anschließend werden die Installationsoptionen dargestellt (Abbildung 1.2). Diese Optionen ermöglichen die zusätzliche Auswahl der MSDN Express Library (248 MB) und des Microsoft SQL Server 2005 als Express Edition (55 MB). Speziell die MSDN Library enthält sehr viele Informationen für die Programmierung und sollte, wenn möglich, installiert werden. Danach präsentiert das Installationsprogramm einen Bildschirm (Abbildung 1.3), der es einem ermöglicht, das Zielverzeichnis für die Installation zu ändern. Wenn Sie in diesem Bildschirm auf INSTALLIEREN klicken, beginnt die eigentliche Installation.
Express Edition
13
1 – Installation
Abb. 1.2: Installationsoptionen
Abb. 1.3: Installationsfortschritt
14
Deinstallation
Unabhängig davon, ob Sie von der CD oder über das Internet installieren, können Sie jetzt eine längere Pause einlegen, da die Installation nach unseren Erfahrungen mindestens 30 Minuten dauert. Bei einer Installation über das Internet verlängert sich dieser Zeitraum noch erheblich. Wenn ein Bildschirm analog zu Abbildung 1.4 dargestellt wird, ist die Installation abgeschlossen.
Abb. 1.4: Abschluss der Installation
Sie können nun Visual Basic Express Edition benutzen.
1.5 Deinstallation Es kann natürlich auch vorkommen, dass Sie Visual Basic Express samt aller Komponenten deinstallieren wollen oder müssen. Es ist dabei darauf zu achten, dass die Komponenten in einer bestimmten Reihenfolge deinstalliert werden müssen. 쐌 Öffnen Sie die Liste der installierten Programme unter SYSTEMSTEUERUNG | SOFTWARE. 쐌 Deinstallieren Sie ggf. Microsoft SQL Server 2005 Express Edition. 쐌 Deinstallieren Sie den Microsoft Native Client. Express Edition
15
1 – Installation
쐌 Deinstallieren Sie die Microsoft MSDN Express Library 2005. 쐌 Deinstallieren Sie alle Versionen von Microsoft Visual Studio Express 2005. 쐌 Deinstallieren Sie das Microsoft Visual J# .NET Redistributable Package, falls vorhanden. 쐌 Deinstallieren Sie alle Versionen des Microsoft .NET Framework 2.0. Alle älteren Versionen des .NET Framework können und sollten bestehen bleiben, damit alle Anwendungen, die diese Versionen benötigen, weiter einwandfrei funktionieren. Nun verfügen Sie wieder über ein sauberes System. Einer Neuinstallation von VBE steht somit nichts mehr im Wege ...
1.6 Fazit Installation und Deinstallation von Microsoft Visual Basic Express Edition und der verwandten Komponenten sind in der Regel ein schmerzfreier Prozess. Soweit Ihr System die Systemvoraussetzungen erfüllt und keine anderweitigen Probleme vorhanden sind, können Sie in kürzester Zeit mit einer funktionsfähigen Entwicklungsumgebung arbeiten.
Hinweis Aus eigener Erfahrung möchten Ihnen die Autoren ans Herz legen, eine so komplexe Entwicklungsumgebung wie die VBE in einer virtuellen Maschine (VMware oder VirtualPC) zu betreiben. Sie müssen so bei einem Neuaufsetzen Ihres Hauptsystems nicht auch noch über Stunden hinweg Ihr Entwicklungssystem neu aufsetzen. VirtualPC ist übrigens kostenlos bei Microsoft erhältlich.
16
2
Start mit Visual Basic Express Edition
Nachdem die Hürden der Installation genommen sind, können Sie Visual Basic 2005 Express Edition (VBE) starten. Als Erstes wird die Startseite angezeigt. Diese fasst Funktionen für die Projektanlage und Informationen über VBE auf einer Seite zusammen (Abbildung 2.1).
Abb. 2.1: Startseite
Der meisten Platz nimmt ein Bereich mit dem Titel VISUAL BASIC 2005 EXPRESS EDITION ein. Dies ist der Nachrichtenbereich. Hier werden, sofern Sie über eine aktivierte Internetverbindung verfügen, aktuelle Informationen über einen RSSFeed von Microsoft eingeblendet. Ein Blick in den einen oder anderen Artikel liefert wertvolle Hinweise für die spätere Programmierung und kann hier nur empfohlen werden. Express Edition
17
2 – Start mit Visual Basic Express Edition
Hinweis Sie können den dargestellten RSS-Feed in den Optionen konfigurieren. Im Bereich ZULETZT GEÖFFNETE PROJEKTE werden alle angelegten Projekte angezeigt. Da es sich hier um ein neu installiertes System handelt, ist nur eine weiße Fläche zu sehen. Dies wird sich jedoch ändern, sobald das erste Projekt angelegt worden ist. Der Bereich ERSTE SCHRITTE verweist auf mehrere Einsteiger-Artikel zu Visual Basic Express. Ebenfalls befindet sich ein Bereich namens VISUAL BASIC EXPRESS-HEADLINES auf der Startseite (Abbildung 2.2).
Abb. 2.2: Visual-Basic-Express-Headlines
Hier hat man die Möglichkeit, Anfragen an Microsoft über das Internet abzusetzen. Die Startseite mit den News- und Feedback-Bereichen zeigt die neue Richtung, die Microsoft mit dem Visual Studio 2005 einschlägt: die Verbesserung der Kommunikation zwischen dem Entwickler, der Netz-Community und Microsoft. Sie können jetzt aus der Entwicklungsumgebung heraus Fragen an die Entwicklergemeinschaft stellen, wie weiter unten gezeigt wird, doch zuerst sollten Sie sich mit den Projekten vertraut machen.
2.1 Projekte anlegen und verwalten Wenn Sie ein Programm mit VBE schreiben wollen, müssen Sie zuerst ein Projekt anlegen. Dieses beinhaltet alle Dateien, die benötigt werden, um ein Programm zu übersetzen. Darüber hinaus enthält ein Projekt auch alle Informationen, die vom Programm zum Zugriff auf Datenbanken oder andere Objekte benötigt werden. Auf Dateiebene handelt es sich bei einem Projekt primär um einen Ordner, der eine bestimmte Struktur hat, wie sie in Abbildung 2.3 dargestellt ist.
18
Projekte anlegen und verwalten
Abb. 2.3: Projektverzeichnisbaum einer Windowsapplikation
Die Dateien im Projektverzeichnis werden automatisch von der Entwicklungsumgebung erzeugt und sollten auf keinen Fall von Hand verändert werden.
Hinweis Wenn Sie ein Projekt sichern wollen, dann kopieren Sie immer den kompletten Projektordner an eine sichere Stelle. Die Entwicklungsumgebung bietet verschiedene Vorlagen für Projekte an. Im nächsten Kapitel wird das Programm „HelloWorld“ vorgestellt, das auf der Projektvorlage WINDOWS-ANWENDUNG basiert. Die Entwicklungsanwendung bietet noch weitere Projektvorlagen, wie zum Beispiel KONSOLENANWENDUNG oder KLASSENBIBLIOTHEK. Zusätzliche Vorlagen können aus dem Internet bezogen werden. Diese Vorlagen legen alle Dateien, die im Rahmen des Projekts benötigt werden, in einem Projektverzeichnis an. Dieses trägt – logischerweise – den Namen des Projektes. Den Pfad, wo dieses Verzeichnis standardmäßig angelegt wird, können Sie unter EXTRAS | OPTIONEN | PROJEKTE UND PROJEKTMAPPEN-ALLGEMEIN festlegen. Mit Hilfe der Vorlagen können Sie mit wenigen Mausklicks lauffähige Programme erstellen. Die Entwicklungsumgebung gibt dabei umfangreiche Hilfestellungen und erleichtert den Start so ungemein. Da beim ersten Start der Entwicklungsumgebung noch keine Projekte existieren, ist der Bereich ZULETZT GEÖFFNETE PROJEKTE noch leer, was sich spätestens dann ändern wird, wenn Sie das nächste Kapitel durchgearbeitet haben.
Express Edition
19
2 – Start mit Visual Basic Express Edition
2.2 Informationsquellen 2.2.1
MSDN – Microsoft-Developer-Netzwerk
Das MSDN (Microsoft Developer Network) ist die zentrale Informationsquelle für den VBE-Programmierer. Bei der Installation von VBE wird die Microsoft MSDN 2005 Express Edition im Microsoft-Visual-Studio-8-Verzeichnis mit angelegt, vorausgesetzt man hat diese Option bei der Installation auch gewählt. Die Hilfe der Entwicklungsumgebung ist damit in der Lage, vom Programm auf entsprechende Artikel des MSDN zu verweisen. Neben der lokalen Version kann dabei auch online auf die MSDN zugegriffen werden. Damit stehen stets die neuesten Informationen zur Verfügung. Der Umfang der durch das MSDN bereitgestellten Informationen ist gewaltig und deshalb gerade am Anfang nicht ganz einfach zu handhaben. So können Sie sich zwar von einem zum nächsten Artikel vorarbeiten oder einen der Übersichtsartikel lesen, aber wie ein gutes Buch sind die Artikel nicht lesbar, denn sie bauen nicht immer aufeinander auf und setzen oftmals eine gewisse Erfahrung mit Visual Basic voraus. Es stellt sich dann natürlich die Frage, wie die Informationsvielfalt des MSDN genutzt werden kann. Die Antwort ist ganz einfach: Verwenden Sie die OnlineHilfe per [F1]-Taste auf Befehls-, Objekt- oder Eigenschaftsebene oder lesen Sie die Einsteigerartikel der Hilfe und der MSDN. Nach und nach werden Sie eine für Sie geeignete Suchstrategie entwickeln. Auch eine Suchmaschine Ihrer Wahl ist geeignet, um die Informationsflut der MSDN zu kanalisieren. Und zuletzt: Nutzen Sie die Community-Ressourcen.
2.2.2
Community
In VBE gibt es nicht nur das MSDN zur Informationsbeschaffung, sondern auch eine integrierte Anbindung an die MSDN-Community-Foren im Internet. Verfügen Sie über eine Internetverbindung, können Sie per COMMUNITY | FRAGE eine Anfrage im Community-Bereich des MSDN stellen. Voraussetzung zur Nutzung des Dienstes ist eine Anmeldung beim Windows-Live-IDDienst (Passport), der für die Personalisierung der Anfrage verantwortlich ist und einen per E-Mail benachrichtigt, wenn eine Antwort eingetroffen ist.
EINGEBEN
20
Informationsquellen
Bevor Sie eine Anfrage an die Community absenden, sollten Sie unbedingt prüfen, ob nicht schon einmal die gleiche Frage gestellt und beantwortet wurde. Aus diesem Grund werden Sie zuerst auf eine Suchseite geleitet. Erst auf Ebene der Suchergebnisse gibt es dann die Möglichkeit, eigene Suchanfragen abzusetzen (Abbildung 2.4).
Abb. 2.4: Community-Suchergebnis
Die in Abbildung 2.4 dargestellte Suchanfrage war nicht besonders ergiebig, was darauf hindeuten könnte, dass es noch keine Antwort auf diese Frage gibt. Im Bereich ANTWORT NICHT GEFUNDEN? finden Sie einen Verweis zum eigentlichen Forum, wo Sie dann Ihre Frage stellen können, falls dies noch notwendig sein sollte. Alternativ können Sie Ihre Frage auf Englisch stellen. In diesem Bereich gibt es wesentlich mehr Programmierer, was die Wahrscheinlichkeit, dass jemand schon einmal das gleiche Problem hatte (und dafür auch eine Lösung gefunden hat), viel größer erscheinen läßt. Nachteilig ist natürlich, dass Sie des Englischen mächtig sein müssen – und dies nicht nur beim Stellen der Frage, sondern auch beim Lesen der Antworten. Express Edition
21
2 – Start mit Visual Basic Express Edition
2.3 Weitere Fenster Die Entwicklungsumgebung kennt eine Vielzahl von unterschiedlichen Fenstern, die nebeneinander dargestellt werden können. Zu Beginn der Arbeit mit der Entwicklungsumgebung kann man da leicht den Überblick verlieren. Hat man aber erst einmal das dahinter stehende Konzept verstanden, dann wird man auf diese Darstellung nicht mehr verzichten wollen. Je größer der Monitor ist, den man besitzt, desto mehr Informationen hat man im Überblick. Viele professionelle Softwareentwickler setzen aus diesem Grund zwei Bildschirme nebeneinander ein, um die Informationsfläche zu maximieren.
Hinweis In einer kürzlich erschienen Untersuchung von Microsoft Research ist als Ergebnis veröffentlicht worden, dass die Produktivität am höchsten sei, wenn man sechs Monitore um sich herum gruppiere. Aber auch mit drei Monitoren sei schon ein produktives Arbeiten möglich. Insofern besteht für den Großteil der Leser dieses Buches (und die Autoren) sicher noch Luft nach oben, was die Anzahl der Monitore und die Anzahl der als Standfläche benötigten Schreibtische angeht ... Die Abbildung 2.5 zeigt die typische Situation, wenn man einen Dialog mit dem Ansichts-Designer editiert. In Abhängigkeit von der Art des gerade bearbeiteten Elements werden von der Entwicklungsumgebung diverse Informationen und Hilfsmittel angeboten. Die TOOLBOX auf der linken Seite der Abbildung etwa ist ein Werkzeugkasten, der diverse Objekte bereit hält, die man mit der Maus auf ein Formular ziehen kann. Der PROJEKTMAPPEN-EXPLORER gibt einen Überblick über das gesamte Projekt auf Dateiebene. Durch einen Doppelklick können Sie Dateien öffnen und bearbeiten. Ebenfalls können Sie hier Elemente zum Projekt hinzufügen, Referenzen definieren oder entfernen und die Elemente nach Bedarf anordnen.
22
Weitere Fenster
Abb. 2.5: Fenster der Entwicklungsumgebung – Ansichts-Designer
Der EIGENSCHAFTSFENSTER werden die Eigenschaften des im Hauptfenster oder im PROJEKTMAPPEN-EXPLORERS gerade ausgewählten Objekt angezeigt. Dies ist abhängig davon, ob das Hauptfenster oder OBJEKTMAPPEN-EXPLORER gerade den Eingabefokus besitzt. Wenn Sie das Formular im Hauptfenster einmal anklicken, können Sie dessen Titel im Eigenschaftsfenster über die Eigenschaft Text ändern. Drücken Sie die Eingabetaste oder verlassen Sie das Eingabefeld, so werden die Änderungen übernommen. Drücken Sie stattdessen die (Esc)-Taste, werden Ihre Eingaben in das Feld verworfen. Einen ganz anderen Blick auf das Projekt erhält man mit Hilfe des OBJEKTBROWSERS, den Sie per ANSICHT | OBJEKTBROWSER, die Taste (F2) oder über die entsprechende Schaltfläche aufrufen können. Er zeigt alle Objekte an, die zum Projekt gehören. Hier erhält man schon mal einen Eindruck von der Komplexität des .NET Framework.
Express Edition
23
2 – Start mit Visual Basic Express Edition
Abb. 2.6: Fenster der Entwicklungsumgebung – Objektbrowser
Der OBJEKTBROWSER soll an dieser Stelle nicht weiter beschrieben werden, dies ist Kapitel 11 vorbehalten.
2.4 Einrichten der Oberfläche Sie können die Entwicklungsumgebung ganz nach Ihren eigenen Wünschen einrichten. Zu Beginn der Arbeit mit VBE sollten die Standardeinstellungen erst einmal ausreichend sein.
2.4.1
Einrichten der Fenster
Die Oberfläche bevorzugt in der Standardeinstellung eine Darstellung, bei der alle Fenster nebeneinander dargestellt werden. Wenn Sie nur einen kleinen Monitor besitzen oder auf einem Notebook arbeiten, ist es manchmal sinnvoll, diese angedockten Fenster zu lösen oder mit Hilfe von Registern darzustellen. Die Menüoption FENSTER | DOKUMENT IM REGISTERKARTENFORMAT ändert die Darstellung eines Fensters so ab, dass es als Register angezeigt wird. 24
Einrichten der Oberfläche
Abb. 2.7: Veränderung der Oberfläche
Abbildung 2.7 zeigt, wie der Bildschirm aussieht, wenn man den PROJEKTMAPPEN-EXPLORER auswählt und danach FENSTER | DOKUMENT IM REGISTERKARTENFORMAT wählt. Der PROJEKTMAPPEN-EXPLORER wird jetzt in einem Register dargestellt.
Hinweis Probieren Sie ruhig ein wenig aus, welche Art der Darstellung Ihnen am meisten zusagt. Sollten Sie dabei über das Ziel hinausschießen, können Sie das Fensterlayout per FENSTER | FENSTERLAYOUT ZURÜCKSETZEN jederzeit wieder in den Ausgangszustand zurückversetzen.
2.4.2
Automatisch im Hintergrund
Abbildung 2.7 zeigt auf der linken Seite eine senkrechte Schaltfläche für die TOOLBOX. In der Abbildung 2.8 sehen Sie, wie die geöffnete TOOLBOX aussieht.
Express Edition
25
2 – Start mit Visual Basic Express Edition
Über das Pin-Symbol eines Fensters (neben dem Schließen-Symbol) wird die Funktion AUTOMATISCH IM HINTERGRUND aktiviert und deaktiviert. Zeigt die Spitze der Nadel nach unten, ist das Fenster stets sichtbar. Klicken Sie auf die Nadel, so zeigt die Spitze nach links. Verlassen Sie nun den Bereich des Fensters mit der Maus, wird das Fenster automatisch minimiert und als kleiner Reiter angezeigt. Fahren Sie mit der Maus wieder über das Fenster, so wird es maximiert und Sie können die gewünschten Operationen vornehmen.
Abb. 2.8: Toolboxanzeige
Ein Doppelklick auf ein Fenster löst dieses aus seiner derzeitigen Position. Sie können es nun auf dem Bildschirm an die gewünschte Position ziehen. Dabei blendet VBE in der Mitte und den Rand-Bereichen der Arbeitsoberfläche Hinweissymbole ein, die das automatische Andocken des Fensters erlauben. Ziehen Sie das Fenster über ein Symbol in der Mitte und lassen es los, wird es im entsprechenden Bereich (links, rechts, oben oder unten) angeordnet. Möchten Sie das Fenster mit anderen Elementen des Bereichs gruppieren, ist dies ebenfalls möglich, indem Sie das Fenster über das Positionierungssymbol des entsprechenden Bereiches bewegen und dort fallen lassen. 26
Symbolleisten
Abb. 2.9: Positionieren eines Fensters innerhalb der IDE
Sollten Sie das Fenster nicht zugeordnet haben, können Sie es über einen Doppelklick wieder an seiner ursprüngliche Position anordnen.
2.5 Symbolleisten Die Symbolleisten stellen Funktionen über Icons zur Verfügung und unterstützen so ein schnelles visuelles Arbeiten. Sie können sie über ANSICHT | SYMBOLLEISTEN oder durch einen Rechtsklick in den Symbolleisten-Bereich aktivieren. Ebenfalls ist es möglich, sie über den Menüpunkt EXTRAS | ANPASSEN an- und abzuschalten. Wenn Sie dies etwa für die LAYOUT-Symbolleiste, die das Positionieren von Dialogelementen erleichtert, vornehmen, werden Sie eine Ansicht analog zu Abbildung 2.10 erhalten.
Express Edition
27
2 – Start mit Visual Basic Express Edition
Abb. 2.10: Layout-Symbolleiste
Um etwa ein Label auf dem Formular zu positionieren, können Sie die beiden Zentrierungssymbole der LAYOUT-Symbolleiste verwenden. Markieren Sie deshalb das Label und klicken Sie nacheinander die Symbole für horizontales und vertikales Zentrieren an (viertes und fünftes Symbol von rechts) (Abbildung 2.11).
Abb. 2.11: Zentrierungssymbole der Layout-Symbolleiste
Die meisten anderen Funktionen der LAYOUT-Symbolleiste sind nicht aktiv, wenn nur ein Element auf dem Formular ausgewählt ist. Sie dienen zur Positionierung mehrerer Dialogelemente.
28
Einstellungen importieren und exportieren
2.6 Einstellungen importieren und exportieren Die Entwicklungsumgebung bietet die Möglichkeit, über die Menüpunkte EXTRAS | EINSTELLUNGEN IMPORTIEREN UND EXPORTIEREN mit der Hilfe von Assistenten die Sicherung bzw. Wiederherstellung einer Arbeitsumgebung vorzunehmen. Wenn Sie diesen Menüpunkt anwählen, öffnet sich ein Assistent. Dieser erlaubt initial die Auswahl, ob Einstellungen importiert, exportiert oder das Layout der IDE auf die ursprünglichen Einstellungen zurückgesetzt werden soll (Abbildung 2.12).
Abb. 2.12: Startseite des Assistenten zum Im- und Exportieren von Einstellungen
2.6.1
Ausgewählte Umgebungseinstellungen exportieren
Wählen Sie die Option AUSGEWÄHLTE UMGEBUNGSEINSTELLUNGEN EXPORTIEREN aus, können Sie im nächsten Schritt festlegen, welche Einstellungen exportiert werden sollen. Hier ist bereits eine Vorauswahl getroffen worden, die Sie aber auf Wunsch anpassen können. Im letzten Schritt legen Sie den Namen der Datei fest, in die die Einstellungen geschrieben werden sollen, und bestimmen das Zielverzeichnis.
Express Edition
29
2 – Start mit Visual Basic Express Edition
Ein Klick auf die Schaltfläche FERTIG STELLEN löst den Vorgang aus. Anschließend können Sie den Assistenten schließen.
2.6.2
Ausgewählte Umgebungseinstellungen importieren
Die Auswahl der Option AUSGEWÄHLTE UMGEBUNGSEINSTELLUNGEN IMPORTIEREN führt im nächsten Schritt zur Abfrage, ob Sie die aktuellen Einstellungen vor dem Einspielen anderer Einstellungen speichern oder darauf verzichten wollen. Wählen Sie hier die Option JA, AKTUELLE EINSTELLUNGEN SPEICHERN, können Sie analog zum Export der Umgebungseinstellungen den Dateinamen und den Speicherort der Einstellungsdatei festlegen. Die Auswahl von NEIN, NEUE EINSTELLUNGEN IMPORTIEREN UND AKTUELLE EINSTELLUNGEN ÜBERSCHREIBEN überspringt die Sicherung der Daten. Sie sparen so zwar einige Millisekunden ein, können die überschriebenen Einstellungen jedoch nicht mehr wiederherstellen. Das Betätigen der Schaltfläche WEITER führt Sie zur Auswahl der zu importierenden Einstellungen. Dabei werden die Standardeinstellungen und benutzerdefinierte Einstellungen angezeigt, die sich im Ordner Eigene Dateien\Visual Studio 2005\Settings\VB Express befinden (Abbildung 2.12). Möchten Sie eine nicht aufgeführte Einstellungsdatei laden, können Sie diese über die Schaltfläche DURCHSUCHEN auswählen.
Hinweis Bevor Sie fortfahren können, müssen Sie das gewünschte Einstellungsschema explizit anklicken. Nach einem erneuten Klick auf die Schaltfläche WEITER können Sie festlegen, welche Einstellungen importiert werden sollen. In der Regel ist hier bereits eine sinnvolle Vorauswahl getroffen, die Sie jedoch Ihren Bedürfnissen anpassen können. Das Betätigen der Schaltfläche FERTIG STELLEN führt den Vorgang letztlich aus und importiert die gewünschten Einstellungen. Zuvor werden jedoch noch die alten Einstellungen exportiert, falls Sie dies ausgewählt haben.
30
Optionen
Abb. 2.13: Auswählen der zu importierenden Einstellungen
2.6.3
Alle Einstellungen zurücksetzen
Die Auswahl dieser Option erlaubt es Ihnen, die Einstellungen der Umgebung auf den ursprünglichen Zustand zurückzusetzen. Sie haben hier keine weiteren Einflussmöglichkeiten in Bezug auf eine Auswahl der zu überschreibenden Informationen, sondern können nur nach dem Alles-oder-Nichts-Prinzip vorgehen. Nach der Auswahl dieser Option können Sie im nächsten Schritt Ihre bisherigen Einstellungen sichern. Auch hier können Sie darauf verzichten, sollten sich jedoch bewusst machen, dass Sie den Vorgang somit nicht mehr rückgängig machen können. Das Betätigen der Schaltfläche FERTIG STELLEN führt den Vorgang aus und setzt VBE auf die Standardeinstellungen zurück.
2.7 Optionen Die Optionen der Entwicklungsumgebung, mit deren Hilfe Sie das Verhalten von Visual Basic Express an Ihre Vorlieben anpassen können, rufen Sie per EXTRAS | OPTIONEN auf (Abbildung 2.13). Express Edition
31
2 – Start mit Visual Basic Express Edition
Wenn ALLE EINSTELLUNGEN ANZEIGEN im unteren Teil des Dialogs nicht gewählt wurde, erhalten Sie lediglich eine reduzierte Darstellung der Optionen. Falls Sie also vergeblich nach einer Option suchen, sollte Ihr Blick zuerst auf diese Checkbox fallen.
Abb. 2.14: Optionen – Allgemeine Einstellung
Der OPTIONEN-Dialog ist in verschiedene Rubriken und Unterrubriken gegliedert. Die von den Autoren am häufigsten genutzten Optionen sind: 쐌 Einstellen von Schriftart und Schriftgröße: UMGEBUNG | SCHRIFTARTEN FARBEN
UND
쐌 Aktivieren der Anzeige von Zeilennummern: TEXT-EDITOR | ALLE SPRACHEN | ZEILENNUMMERN 쐌 Ändern der VB-Build-Optionen (Variablendeklarationen etc.): PROJEKTE UND PROJEKTMAPPEN | VB-STANDARD An geeigneter Stelle werden die jeweils sinnvollen Optionen in den jeweiligen Kapiteln besprochen. Sie sind jedoch auch aufgerufen, sich selbstständig durch die Optionen zu bewegen und einfach einmal auszuprobieren, welche Option welche Wirkung zeigt. Über die weiter oben bereits besprochenen EinstellungsImport- und Export-Assistenten können Sie die Umgebung letztlich jederzeit auf die Werkseinstellungen oder Ihre persönlichen Vorlieben zurücksetzen. 32
3
Ein erstes Programm schreiben
In diesem Kapitel wird ein kleines Projekt angelegt und die grundsätzliche Arbeit an Visual-Basic-Express-Programmen in der Entwicklungsumgebung erläutert.
3.1 Neues Projekt anlegen Die Anlage eines neuen Projekts geschieht über den Menüpunkt DATEI | NEUES PROJEKT oder über die Startseite (Abbildung 3.1).
Abb. 3.1: Über die Startseite kann ein neues Projekt erstellt werden
Klicken Sie auf ERSTELLEN: PROJEKT und ein Auswahlfenster mit verschiedenen Projektvorlagen erscheint (Abbildung 3.2). Die Entwicklungsumgebung bietet einige Vorlagen an, von denen WINDOWSANWENDUNG die wohl am häufigsten genutzte sein dürfte, denn schließlich lässt sich damit genau das erledigen, was der Name verspricht: das Erstellen einer neuen Windows-Applikation. Ändern Sie nach der Auswahl des Projekttyps den Namen des Projekts von der Vorgabe auf HelloWorld und klicken Sie im Bereich VON VISUAL STUDIO INSTALLIERTE VORLAGEN auf die Vorlage WINDOWS-ANWENDUNG. Die Entwicklungsumgebung legt daraufhin das Projekt an. Dies kann unter Umständen einige Sekunden dauern. Anschließend präsentiert die Entwicklungsumgebung die Entwurfsansicht für das automatisch erzeugte Formular (Abbildung 3.3). Express Edition
33
3 – Ein erstes Programm schreiben
Abb. 3.2: Auswahl eines neuen Projekts
Abb. 3.3: Entwurfsansicht eines Windows-Anwendung-Projekts
34
Neues Projekt anlegen
Bisher hat die Entwicklungsumgebung die Dateien des Projekts in einem temporären Verzeichnis erzeugt, aber noch nicht im eigentlichen Projektverzeichnis gesichert. Um das Projekt komplett zu speichern, sollten Sie DATEI | ALLES SPEICHERN auswählen oder das ALLES SPEICHERN-Symbol in der Symbolleiste anklicken. Wurde ein Projekt erstellt und noch nicht gespeichert, dann zeigt die Entwicklungsumgebung einen Hinweis wie in Abbildung 3.4, wenn Sie die Entwicklungsumgebung verlassen wollen.
Abb. 3.4: Auswahl eines nicht gespeicherten Projekts
Wenn Sie jetzt nicht auf SPEICHERN klicken, dann geht das gesamte Projekt und alle seine Änderungen verloren.
Hinweis Sie können dieses in der Probierphase sehr praktische Verhalten auch über EXTRAS | OPTIONEN | PROJEKTE UND PROJEKTMAPPEN durch das Ankreuzen von NEUE PROJEKTE BEIM ERSTELLEN SPEICHERN abschalten. Das Verzeichnis, in dem die Entwicklungsumgebung die Projektdateien speichert, kann über den Menüpunkt EXTRAS | OPTIONEN | PROJEKTE UND PROJEKTMAPPEN | ALLGEMEIN individuell eingestellt werden. Sichern Sie das Projekt jetzt über DATEI | ALLE SPEICHERN oder die entsprechende Schaltfläche in der Symbolleiste (mehrere Disketten-Symbole). Sobald Sie dies vornehmen möchten, erscheint ein Dialog analog zu Abbildung 3.5, mit dessen Hilfe Sie die Speicheroptionen des Projekts beeinflussen können.
Express Edition
35
3 – Ein erstes Programm schreiben
Abb. 3.5: Dialog Projekt speichern
Speichern Sie das Projekt ohne Änderungen an den Vorgaben. Bei eigenen Projekten wird der vorgeschlagene Speicherort möglicherweise anders aussehen, da Visual Basic Express den Pfad zu Ihrem benutzerspezifischen Verzeichnis als Voreinstellung übernommen hat.
Hinweis Um Zwischenstände der Programmentwicklung aufzubewahren, sichern Sie immer das gesamte Projekt-Verzeichnis im Dateisystem. Die Option NAME erlaubt das Festlegen des Dateinamens des aktuellen Projekts. Die Option PROJEKTMAPPENNAME erlaubt die Angabe des Namens der Projektmappe, in der sich das aktuelle Projekt befindet. Diese möglicherweise überflüssig anmutende Unterscheidung in Projektmappe und Projekt macht jedoch Sinn, wenn Sie bedenken, dass eine Projektmappe mehrere Projekte beinhalten kann. Der letztendliche Speicherort eines Projekts ist somit \\.
3.2 Starten eines gespeicherten Projekts Nach einem Neustart der Entwicklungsumgebung wird das von Ihnen angelegte Projekt in der Liste der zuletzt geöffneten Projekte der Startseite angezeigt (Abbildung 3.6).
36
Projektmappen-Explorer
Abb. 3.6: Startbildschirm mit dem neuen Projekt HelloWorld
Klicken Sie auf den Namen des Projekts, wird dieses samt der beim Speichern offenen Dateien und Ansichten wieder geöffnet.
3.3 Projektmappen-Explorer Der PROJEKTMAPPEN-EXPLORER ist eines der am meisten genutzten Fenster der Entwicklungsumgebung. Mit seiner Hilfe kann man sich einen Überblick über das Projekt und dessen Bestandteile verschaffen. Den PROJEKTMAPPEN-EXPLORER rufen Sie über ANSICHT | PROJEKTMAPPENEXPLORER, die Tastenkombination (Strg)+(R) bzw. das PROJEKTMAPPEN-EXPLORERSymbol in der Symbolleiste auf. Anschließend wird er per Default auf der rechten Seite der Entwicklungsumgebung angezeigt (Abbildung 3.7), kann jedoch auf Wunsch auch an eine andere Position verschoben werden.
Express Edition
37
3 – Ein erstes Programm schreiben
Abb. 3.7: Projektmappenexplorer
Ein Doppelklick auf die Datei Form1.vb öffnet den ANSICHTS-DESIGNER, der für den visuellen Teil der Entwicklung zuständig ist.
3.4 Visuell arbeiten mit dem Ansichts-Designer In diesem Abschnitt werden die Möglichkeiten des visuellen Arbeitens in der Entwicklungsumgebung vorgestellt. Die Bearbeitung des Sourcecodes folgt im nächsten Abschnitt. Fast jedes Windowsprogramm besteht aus visuellen Elementen plus der Programmierung, die das Verhalten dieser Elemente bestimmt. Der Begriff „visuell arbeiten“ meint, dass die sichtbaren Elemente eines Programms bearbeitet werden können, ohne sich um den dahinter liegenden Quellcode kümmern zu müssen. Damit vereinfacht sich die Entwicklung der Darstellung eines Programms. Auch die Geschwindigkeit der Arbeit wird verbessert, da das Projekt nicht erst übersetzt werden muss, um Optik und Anordnung von Symbolen oder anderen Elementen zu beurteilen. 38
Visuell arbeiten mit dem Ansichts-Designer
Die Entwicklungsumgebung hält die TOOLBOX bereit, um Ihnen das visuelle Arbeiten zu erleichtern. Die Toolbox wird über ANSICHT-TOOLBOX, die Tastenkombination (STRG)+(ALT)+(X) oder mittels des Toolbox-Symbols geöffnet und beinhaltet Standardkomponenten, die Ihrer Applikation hinzugefügt werden können (Abbildung 3.8).
Abb. 3.8: Toolbox für das visuelle Arbeiten
Die TOOLBOX kann man sich als großen Werkzeugkasten, der diverse vorgefertigte Elemente zur Programmerstellung bereitstellt, vorstellen. In der Abbildung 3.8 wurde die Teilauswahl ALLGEMEINE STEUERELEMENTE geöffnet, die für das folgende Beispiel benutzen werden soll. Um Ihrem Formular mit Hilfe der TOOLBOX weitere Elemente hinzuzufügen, führen Sie einen Doppelklick auf das jeweilige Element aus oder ziehen es an die gewünschte Position im Formular.
Express Edition
39
3 – Ein erstes Programm schreiben
Fügen Sie auf diese Art zwei Elemente der Benutzeroberfläche hinzu: ein LabelSteuerelement und ein Button-Steuerelement. Anschließend sollte eine Ansicht ähnlich Abbildung 3.9 generiert worden sein.
Abb. 3.9: Benutzung der allgemeinen Steuerelemente
Die Bezeichnung der Steuerelemente wird von der Entwicklungsumgebung automatisch erzeugt und kann später über deren Eigenschaften den eigenen Vorstellungen angepasst werden. Es wird übrigens auch der Quelltext des entsprechenden Elements erzeugt. Aufgrund des visuellen Arbeitsstils ist dieser jedoch an dieser Stelle noch nicht sichtbar.
3.4.1
Positionierung von Dialogelementen
Mit der Maus lassen sich die Dialogelemente auswählen und auf dem Bildschirm verschieben. Kommt man dabei in die Nähe eines anderen Steuerelements, dann erscheint eine blaue Linie, die die Ausrichtung der Elemente zueinander erleichtern soll. 40
Visuell arbeiten mit dem Ansichts-Designer
Für das Positionieren von Steuerelementen stellt die Entwicklungsumgebung die sehr hilfreiche Symbolleiste LAYOUT zur Verfügung, die über ANSICHT | SYMBOLLEISTEN | LAYOUT aktiviert werden kann. Hat man nur ein Dialogelement ausgewählt, dann sind nur wenige Felder der Layoutleiste aktiviert. So kann mit den ZENTRIEREN-Elementen der Layout-Symbolleiste ein Dialogelement horizontal oder vertikal zentriert werden (Abbildung 3.10).
Abb. 3.10: Dialogelement zentrieren
Die meisten Aktionen mit der Layoutleiste werden Sie allerdings mit einer Gruppe von Dialogelementen durchführen. Für eine Gruppenauswahl markieren Sie mit Hilfe der gedrückten linken Maustaste mehrere Dialogelemente oder klicken die gewünschten Komponenten bei gedrückter (Strg)-Taste einzeln an. Anschließend lassen sich die Komponenten mit Hilfe der Symbolleiste gruppiert ausrichten und anordnen (Abbildung 3.11).
Express Edition
41
3 – Ein erstes Programm schreiben
Abb. 3.11: Eine Gruppe von Dialogelementen ausrichten
Damit die Zentrierung wie in Abbildung 3.11 gelingt, muss das Label-Steuerelement links vom Button-Steuerelement positioniert sein. Hier gilt der alte Grundsatz: Probieren geht über Studieren. Unerwünschte Änderungen machen Sie mit Hilfe der Tastenkombination (Strg)+(Z) bzw. dem entsprechenden Symbol der allgemeinen Symbolleiste rückgängig.
3.5 Eigenschaften eines Dialogelements Die grafische Darstellung vermittelt einen unmittelbaren Eindruck des Aussehens eines Dialogs und ermöglicht die Positionierung von Dialogelementen. Es gibt aber auch Bestandteile eines Elements, die an der Oberfläche nicht sichtbar sind. Diese Attribute werden im EIGENSCHAFTEN-Fenster dargestellt. Das EIGENSCHAFTEN-Fenster lässt sich mittels ANSICHT | EIGENSCHAFTENFENSTER, die Taste (F4) oder über das Kontextmenü nach einem Rechtsklick auf ein Dialogelement öffnen.
42
Eigenschaften eines Dialogelements
Anschließend erfolgt eine Darstellung der jeweils spezifischen Eigenschaften analog zu Abbildung 3.12.
Abb. 3.12: Eigenschaften-Fenster – Änderung Text
Ändern Sie hier den Wert der Eigenschaft Text des Label-Steuerelements auf Hier klicken, damit die Funktion des Button-Steuerelements verständlicher wird. Ebenfalls können Sie auch komplexere Eigenschaften, etwa die Hintergrundfarbe, über das EIGENSCHAFTEN-Fenster anpassen (Abbildung 3.13). Beim Auswählen der Option zum Ändern der Hintergrundfarbe stellt Ihnen VBE einen Farbauswahl-Dialog zur Verfügung. Dies geschieht übrigens automatisch – haben Sie in Ihren Elementen eine Eigenschaft mit dem Typ System.Drawing.Color definiert, wird für das Ändern von deren Wert ebenfalls der Farbauswahl-Dialog (Abbildung 3.14) angezeigt.
Express Edition
43
3 – Ein erstes Programm schreiben
Abb. 3.13: Eigenschaften – Änderung der Hintergrundfarbe
Abb. 3.14: Auswahl benutzerdefinierter Farben im Eigenschaften-Fenster
Der Bereich BENUTZERDEFINIERT ist beim Öffnen des Fensters nicht unmittelbar sichtbar. Klicken Sie deshalb auf die nach links und rechts weisenden Schaltflächen am oberen Rand des Dialogs, mit deren Hilfe zwischen den Ansichten navigiert werden kann. Durch einen Doppelklick auf die gewünschte Farbe wird diese für den Hintergrund übernommen. 44
Programm ausführen
3.6 Programm ausführen Das Programm, das bis jetzt erstellt wurde, kann zwar noch nicht viel, aber ausführen können Sie es jetzt schon. Die Ausführung können Sie mit Hilfe der Option DEBUGGEN | DEBUGGEN STARTEN, der Taste (F5) oder dem Ausführen-Symbol (nach rechts gerichteter grüner Pfeil, analog der Abspiel-Taste eines DVD-Spielers) starten. Anschließend wird das Programm übersetzt und – falls keine Fehler aufgetreten sind – außerhalb der Entwicklungsumgebung gestartet (Abbildung 3.15).
Abb. 3.15: HelloWorld – Programmausführung
Das Programm stellt bisher neben der Möglichkeit, geschlossen zu werden, keine andere implementierte Funktionalität bereit, sieht man einmal von der Darstellung und den Reaktionen der Oberfläche ab. Solange das Programm ausgeführt wird, befindet sich die Entwicklungsumgebung im Debug-Modus, bei dem einige Symbole ausgeblendet und somit nicht ausführbar sind (Abbildung 3.16). Der Debug-Modus bietet eine Vielzahl von Funktionen, um das Programm zur Laufzeit zu überprüfen. Darauf wird in Kapitel 9 noch wesentlich ausführlicher eingegangen. Das laufende Programm kann mittels DEBUGGEN | DEBUGGEN BEENDEN, der Tastenkombination (Strg)+(Alt)+(Break) oder dem Stop-Symbol in der Symbolleiste jederzeit aus der Entwicklungsumgebung heraus beendet werden. Im Laufe der Programmentwicklung kann es immer wieder vorkommen, dass das Programm nicht mehr reagiert. In diesem Fall sollten Sie das Programm mit Hilfe der gezeigten Methoden zum Beenden zwingen.
Express Edition
45
3 – Ein erstes Programm schreiben
Abb. 3.16: Entwicklungsumgebung im Debug-Modus
3.7 Arbeiten mit dem Quelltext Mit Visual Basic Express lässt sich eine ganze Weile arbeiten, ohne eine einzige Zeile Code schreiben zu müssen. Dies funktioniert, weil für Elemente, die mit Hilfe des Ansichts-Designers entworfen worden sind, der jeweilige Darstellungscode automatisch erzeugt wird. Weiterführende Funktionalitäten müssen jedoch selbst implementiert werden.
3.7.1
Bestandsaufnahme
Öffnen Sie das Formular Form1.vb aus dem PROJEKTMAPPEN-EXPLORER per Doppelklick. Anschließend wechseln Sie mit Hilfe der Taste (F7) oder der Kontextmenü-Option CODE ANZEIGEN in die Ansicht des Codes. Das anschließend neu dargestellte Register FORM1.VB zeigt den editierbaren Quelltext des Formulars in einem Editorfenster an. Dieser wird in aller Regel zunächst recht leer sein (Listing 3.1). 46
Arbeiten mit dem Quelltext Listing 3.1: Quelltext Form1.vb Public Class Form1 End Class
Wenn Sie jedoch zuvor bereits mit der Applikation einige Erfahrungen gesammelt haben, könnte es durchaus sein, dass Ihr Quelltext so aussieht wie in Listing 3.2 dargestellt. Listing 3.2: Quelltext mit generiertem Methodenkopf Public Class Form1 Private Sub Form1_Load( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles MyBase.Load End Sub End Class
In diesem Fall wurde vom Ansichts-Designer eine Behandlungsmethode für das Load-Ereignis des Formulars generiert. Diese ist jedoch leer und hat somit keinen merkbaren Einfluss auf den Ablauf des Programms.
Hinweis Wann immer Sie im Ansichts-Designer auf ein Element einen Doppelklick ausführen, springt die Anzeige in die Code-Ansicht und erzeugt den Code zur Behandlung des Standardereignis dieses Elements, soweit dieser nicht bereits vorhanden ist. Die in Listing 3.2 dargestellte Methode ist leer, weshalb sie keinen Effekt auf die Programmausführung hat, außer dass sie aufgerufen wird. Sie könnten sie deshalb auch löschen.
Hinweis Das Listing wurden für die Buchbreite formatiert, deshalb sind lange Zeilen mit Hilfe des Fortsetzungszeichen _ umgebrochen worden.
Express Edition
47
3 – Ein erstes Programm schreiben
3.7.2
Standardereignis eines Elements behandeln
Möchten Sie auf das Anklicken eines Buttons reagieren, müssen Sie sich an dessen Click-Ereignis binden. Anschließend können Sie eine Ereignisbehandlungsmethode (EventHandler-Methode) implementieren, die die gewünschten Operationen durchführt. Um eine Reaktion auf den Klick auf einen Button zu implementieren, wechseln Sie in die Code-Ansicht des Formulars (Abbildung 3.17) und wählen Sie mit Hilfe des Pulldown-Menüs im linken oberen Bereich des Editorfensters das Element Button1 aus. Anschließend klicken Sie im Deklarationen-Menü im oberen rechten Bereich des Editorfensters auf das Ereignis Click.
Hinweis Alternativ führen Sie aus der Entwurfsansicht einen Doppelklick auf den Button aus.
Abb. 3.17: Einfügen des Click-Ereignisses
Daraufhin wird der Methodenrumpf für das Click-Ereignis des Buttons generiert. Implementieren Sie innerhalb der Methode den in Listing 3.3 dargestellten Code. 48
Debug/Release-Versionen Listing 3.3: Den Klick auf einen Button behandeln Public Class Form1 Private Sub Button1_Click( _ ByVal sender As Object, _ ByVal e As System.EventArgs) _ Handles Button1.Click ' Hinweistext ausgeben MessageBox.Show("Der Button-Click-Event " & _ "wurde ausgelöst") End Sub End Class
Der implementierte Aufruf der statischen Methode Show() der MessageBox-Klasse sorgt für das Anzeigen einer Meldung. Nach dem Aufruf des Programms, vorzugsweise mit (F5), wird beim Klick auf die Schaltfläche das folgende Meldungsfenster erscheinen:
Abb. 3.18: MessageBox beim Klicken auf eine Schaltfläche
3.8 Debug/Release-Versionen Wenn man das Programm, wie es automatisch geschieht, in der Debug-Version erzeugt, dann enthält es viele Informationen für den Debugger, die im fertigen Programm nicht mehr benötigt werden. Als Beispiel seien hier Variablennamen genannt, die im Quellcode verwendet werden. Im Debug-Modus werden diese Informationen mitgeführt. Ein Programm, das bei einem Kunden installiert wird, sollte derartige Meta-Informationen nicht mehr beinhalten. Eine Release-Version erzeugen Sie per ERSTELLEN | ERSTELLEN. Dies geschieht am sinnvollsten unmittelbar vor Auslieferung des Programms. Express Edition
49
3 – Ein erstes Programm schreiben
3.8.1
Seitenblick: .NET-Versionsprobleme
Damit das Programm auch wirklich auf einem fremden Rechner läuft, muss dort die gleiche oder eine neuere .NET-Runtime-Bibliothek installiert sein. Ist dies nicht der Fall, kann beim Kunden eine nicht sehr aussagekräftige Fehlermeldung analog zu Abbildung 3.22 erscheinen.
Abb. 3.19: Programmausführung mit falscher .NET-Version
Wann immer Sie diese Meldung sehen, sollten Sie zunächst überprüfen, ob die richtige .NET-Version installiert ist. Idealerweise wird dies von einem SetupProgramm vor der eigentlichen Installation erledigt.
3.8.2
Deployment
Eine sichere Möglichkeit, eine Veröffentlichung zu erstellen, erschließt der Menüpunkt ERSTELLEN | HELLOWORLD VERÖFFENTLICHEN. Hierbei handelt es sich um eine so genannte Deployment-Funktion, womit gemeint ist, dass die Anwendung an einem bestimmten Ort zum Einsatz gebracht wird. Für Anwendungen wie das HelloWorld-Programm bietet sich die DeploymentVariante CD/DVD an. Im Kapitel 12 kommen wir noch einmal auf die Veröffentlichung von Projekten zurück.
3.9 Fazit Die ersten Schritte waren nicht schwer: Das erste Programm wurde angelegt, ausgeführt und an eigene Vorstellungen angepasst. Ebenfalls wurden der Benutzeroberfläche Komponenten hinzugefügt und eine erste eigene Ereignisbehandlungsroutine wurde implementiert. In den nächsten Kapiteln widmen wir uns vertiefend einigen wichtigen Aspekten der Programmierung mit der VBE. Aber der erste Einstieg, der ist nun geschafft!
50
4
Arbeit mit Elementen
Jedes Programm setzt sich aus verschieden Elementen wie Dialogen, Menüs und Buttons zusammen. Es gibt sichtbare und unsichtbare Elemente, einfache und komplexe Elemente – eigentlich ist alles irgendwie ein Element. In diesem Abschnitt des Buches werden verschiedene Elemente vorgestellt und gezeigt, wie vielfältig die von diesen Steuerelementen zur Verfügung gestellte Funktionalität ist.
Hinweis Dieses Kapitel kann und soll keine Einführung in die zur Verfügung stehenden Komponenten und deren Funktionalitäten darstellen, sondern möchte Sie lediglich mit den grundlegenden Prinzipien der Arbeit einiger Komponenten vertraut machen. Legen Sie am besten ein neues Projekt mit einer Windowsanwendung unter dem Namen „Test“ an, um die Beschreibungen dieses Kapitels nachvollziehen zu können.
4.1 Toolbox Die Entwicklungsumgebung stellt mit der TOOLBOX (Abbildung 4.1) einen Werkzeugkasten bereit, in den man nur noch hinein zu greifen braucht, um sich viel Arbeit zu ersparen. Neben der Nutzung der vorgefertigten Elemente gibt es auch die Möglichkeit, eigene Elemente der TOOLBOX hinzuzufügen. Dies wird man immer dann tun, wenn man ein selbst spezifiziertes Element mehrfach verwenden will.
Abb. 4.1: Toolboxübersicht
Express Edition
51
4 – Arbeit mit Elementen
Die TOOLBOX unterteilt ihre Elemente in mehrere Kategorien. Diese sollen im Folgenden jeweils kurz besprochen werden.
4.2 Allgemeine Steuerelemente Im vorigen Kapitel wurden schon die allgemeinen Steuerelemente Label und Button aus dem Bereich ALLGEMEINE STEUERELEMENTE vorgestellt. Im Folgenden sollen weitere, komplexere Steuerelemente kurz vorgestellt werden.
4.2.1
DateTimePicker
Das DateTimePicker-Steuerelement implementiert eine sehr komfortable Datumsauswahl, die dem Benutzer angeboten werden kann. Um das Steuerelement zu verwenden, markieren Sie es in der TOOLBOX und ziehen Sie es auf das Formular. Starten Sie das Programm anschließend mit der Taste [F5]. Sie sollten nun eine Darstellung analog zu Abbildung 4.2 erhalten.
Abb. 4.2: DateTimePicker-Element
Wie Abbildung 4.2 zeigt, ist das DateTimePicker-Steuerelement eine komplett implementierte Datumsauswahl, die nur gültige Datumswerte zulässt. Der ausgewählte Datumswert kann im Formular über die Eigenschaft Value des DateTimePicker-Steuerelements abgerufen werden: Dim ausgewaehltesDatum As DateTime = _ DateTimePicker1.Value
52
Allgemeine Steuerelemente
4.2.2
NotifyIcon
Ein weiteres Beispiel mit ganz anderer Funktion ist das NotifyIcon-Steuerelement, mit dessen Hilfe ein Symbol im Hinweisbereich der Taskleiste platziert werden kann. Um es zu verwenden, ziehen Sie das NotifyIcon-Steuerelement aus der TOOLBOX an eine beliebige Stelle auf dem Formular. In dessen unterer Leiste wird von der Entwicklungsumgebung das Element NotifyIcon1 erzeugt und automatisch benannt. Klicken Sie nun auf das Element und wählen Sie über EIGENSCHAFTEN | ICON ein Icon für die Anzeige in der Taskleiste aus. Verwenden Sie das im Projektordner befindliche Icon App.ico. Alternativ lässt sich dies auch auf Ebene des Elements über die Aufgabe SYMBOL AUSWÄHLEN bewerkstelligen. Starten Sie nun das Programm mit der Taste (F5). Sie sollten ein Benachrichtigungssymbol in der Taskleiste bemerken können (Abbildung 4.3).
Abb. 4.3: NotifyIcon in der Taskleiste
Die Verwendung des NotifyIcon-Steuerelements ist für Prozesse gedacht, die im Hintergrund laufen und keine eigene Oberfläche besitzen. Diese können über ein derartiges Benachrichtigungssymbol eine Interaktionsmöglichkeit für den Benutzer implementieren.
Express Edition
53
4 – Arbeit mit Elementen
4.2.3
TabControl-Steuerelement
Container dienen zur Gruppierung von Elementen. Es gibt verschiedene Container, die Ihnen vom .NET Framework zur Verfügung gestellt werden. Eines der am häufigsten gebrauchten Container-Steuerelemente ist das TabControlSteuerelement, das eine Registerdarstellung seiner untergeordneten Elemente erlaubt. Um das TabControl-Steuerelement zu verwenden, ziehen Sie es aus der TOOLBOX auf das Formular. Anschließend wird automatisch ein Element mit Reitern generiert. Diese Reiter sind in Form von TabPage-Steuerelementen ausgeführt. Ein Klick auf den jeweiligen Reiter zeigt dessen Eigenschaften im EIGENSCHAFTEN-Fenster an. Besonders interessant ist dabei die Eigenschaft Text, mit deren Hilfe sich die Reiter benennen lassen. Abbildung 4.4 zeigt ein TabControl-Steuerelement in der Entwurfsansicht, dessen Reiter bereits benannt wurden.
Abb. 4.4: TabControl-Steuerelement in der Entwicklungsansicht
54
Allgemeine Steuerelemente
Um einem TabPage-Container untergeordnete Elemente hinzuzufügen, ziehen Sie diese einfach auf die entsprechende Seite. VBE sorgt selbstständig dafür, dass die Elemente an die TabPage-Instanz gebunden werden. Entfernen können Sie die untergeordneten Komponenten auf die gleiche Art und Weise: Markieren Sie sie und ziehen Sie sie einfach an die gewünschte Stelle außerhalb des TabControl-Steuerelements. Oder drücken Sie die (Entf)-Taste, um die markierten Komponenten endgültig zu löschen. Weitere Reiter lassen sich über die TabPages-Auflistung des TabControl-Steuerelements hinzufügen. Sie können dies visuell über die Eigenschaften des TabControl-Steuerelements erledigen. In diesem Fall öffnet sich der TABPAGEAUFLISTUNGS-EDITOR, wie in Abbildung 4.5 dargestellt.
Abb. 4.5: TabPage-Auflistungs-Editor
Mit Hilfe des TABPAGE-AUFLISTUNGS-EDITORS können Sie bequem die Eigenschaften jeder TabPage-Instanz einsehen und editieren. Zur Ausrichtung der Dialogelemente können Sie auch hier die LAYOUT-Symbolleiste benutzen. In Abbildung 4.7 wird gezeigt, wie die Label- und Textbox-Steuerelemente mittig horizontal zentriert werden.
Express Edition
55
4 – Arbeit mit Elementen
Abb. 4.6: Mittige Ausrichtung von Steuerelementen
Die Vorgehensweise ist dabei recht simpel: Markieren Sie alle in Frage kommenden Steuerelemente mit gedrückter (Strg)-Taste. Klicken Sie anschließend auf das entsprechende Ausrichtungssymbol der LAYOUT-Symbolleiste.
4.3 Menüs & Symbolleisten Menüs werden in jeder größeren Windowsanwendung benötigt. Im Praxisbeispiel in Kapitel 12 finden Sie ein Beispiel für die Anwendung von Menüs (MenuStrip, ContextMenuStrip). An dieser Stelle soll deshalb die Verwendung von Symbol- und Statusleisten demonstriert werden. Diese werden über ToolStrip- und StatusStrip-Steuerelemente repräsentiert. Ein ToolStrip-Steuerelement wird in der Regel unterhalb der Menüleiste eines Formulars eingefügt und ermöglicht es, die Elemente Button, Label, SplitButton, DropDownButton, Separator, ComboBox, TextBox und ProgressBar zu platzieren. Das StatusStrip-Steuerelement erzeugt eine Statusleiste. In diese kann beispielsweise ein ProgressBar-Steuerelement eingefügt werden, um einen Fortschrittsbalken zu erzeugen. Innerhalb des StatusStrip-Steuerelements können die Elemente StatusLabel, ProgressBar, DropDownButton und SplitButton eingefügt werden.
56
Menüs & Symbolleisten
Ziehen Sie nun je ein ToolStrip- und StatusStrip-Steuerelement aus dem Bereich MENÜS UND SYMBOLLEISTEN der TOOLBOX auf das Formular, so dass eine Anzeige analog zu Abbildung 4.7 generiert wird.
Abb. 4.7: Formular mit ToolStrip- und StatusStrip-Steuerelementen
Nach dem Fallenlassen der Objekte hat die Entwicklungsumgebung automatisch zwei Elemente mit den Namen ToolStrip1 und StatusStrip1 generiert. Diesen können weitere Elemente bzw. Menüeinträge zugewiesen werden. Fügen Sie nun dem ToolStrip-Element über dessen Pulldown-Menü ein LabelSteuerelement und ein SplitButton-Steuerelement mit zwei Menüeinträgen hinzu. Dem StatusStrip-Steuerelement könnten Sie etwa ein StatusLabel- und ein ProgressBar-Steuerelement hinzufügen. Klicken Sie zu diesem Zweck auf das StatusStrip-Steuerelement und wählen Sie aus dem dann sichtbar werdenden Menü die hinzuzufügenden Steuerelemente aus.
Hinweis Dieses Kapitel kann und soll keine Einführung in die zur Verfügung stehenden Komponenten und deren Funktionalitäten darstellen, sondern möchte Sie lediglich mit den grundlegenden Prinzipien der Arbeit einiger Komponenten vertraut machen.
Express Edition
57
4 – Arbeit mit Elementen
Sie können die Reihenfolge der Steuerelemente durch Ziehen und Fallenlassen bequem steuern. Ein einfacher Klick auf das jeweils hinzugefügte Steuerelement gibt Ihnen die Möglichkeit, im EIGENSCHAFTEN-Fenster dessen Eigenschaften zu bearbeiten. So können Sie bequem Texte und Ereignisbindungen editieren. Das Programm sollte zuletzt analog zu Abbildung 4.8 aussehen.
Abb. 4.8: ToolStripSplitButton mit zwei Menüeinträgen
Ein bequemes Bearbeiten der untergeordneten Elemente von ToolStrip- und StatusStrip-Steuerelementen ist über deren Eigenschaft Items möglich. Klicken Sie auf ein ToolStrip- oder StatusStrip-Steuerelement, können Sie diese Eigenschaft über das EIGENSCHAFTEN-Fenster bearbeiten. Es öffnet sich dann der ELEMENTAUFLISTUNGS-EDITOR (Abbildung 4.9), der das Verwalten der Elemente deutlich vereinfacht. Wählen Sie im linken Bereich des Editors ein Element aus, können Sie dessen Eigenschaften im rechten Bereich bearbeiten.
58
Menüs & Symbolleisten
Abb. 4.9: Elementauflistungs-Editor des ToolStrip-Steuerelements
4.3.1
Weitere Komponenten
Mit Hilfe des Timer-Steuerelements können Sie Abläufe wiederholt oder nach bestimmten Zeiträumen ausführen. Sie finden das Steuerelement im Bereich KOMPONENTEN der TOOLBOX. Dieses Steuerelement ist zur Ausführungszeit nicht sichtbar und wird deshalb in der Designansicht unterhalb des eigentlichen Formulars dargestellt. Ziehen Sie ein Timer- und ein Label-Steuerelement auf das Formular. Dieses sollte danach analog zu Abbildung 4.10 aussehen. Nun können Sie über die Eigenschaft Interval des Timer-Steuerelements festlegen, in welchen Zeitabständen das Auslösen erfolgen soll. Die Angabe geschieht dabei in Millisekunden. Die Zuweisung des Werts 1000 sorgt somit dafür, dass das Timer-Steuerelement jede Sekunde ausgelöst wird. Um die Zuweisung vorzunehmen, klicken Sie auf das Timer-Steuerelement und weisen Sie dessen Eigenschaft Interval im EIGENSCHAFTEN-Fenster den gewünschten Wert zu.
Express Edition
59
4 – Arbeit mit Elementen
Abb. 4.10: Timer- und Label-Steuerelemente auf einem Formular
Nach Ablauf der definierten Zeitspanne wird das Tick-Ereignis des Timer-Steuerelements geworfen. An dieses können Sie sich mit Hilfe der Ereignisansicht binden. Klicken Sie zu diesem Zweck im EIGENSCHAFTEN-Fenster auf das Ereignis-Symbol (ein kleiner gelber Blitz) und suchen Sie das Tick-Ereignis. Positionieren Sie den Cursor im daneben befindlichen Eingabefeld und drücken Sie die (¢)-Taste. Nun wird automatisch die Ereignisbehandlungsmethode generiert und die Darstellung wechselt zur Code-Ansicht. Hier können Sie nun eine Zählvariable hochzählen und deren Wert ausgeben lassen. Wenn Sie eine Variable zaehler auf Instanzebene definiert haben, könnte dies dann wie in Listing 4.1 aussehen. Nach dem fünfzehnten Durchlauf wird der Timer über die Zuweisung des Werts False an seine Eigenschaft Enabled deaktiviert. Listing 4.1: Behandlung des Tick-Ereignisses des Timer-Steuerelements ' Zaehler fuer die Zeitschleife Private zaehler As Integer ''' <summary> ''' Behandelt das Tick-Ereignis des Timer''' Steuerelements ''' Private Sub Timer1_Tick( _
60
Menüs & Symbolleisten Listing 4.1: Behandlung des Tick-Ereignisses des Timer-Steuerelements (Forts.) ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Timer1.Tick ' Wert des Zaehlers erhöhen zaehler += 1 ' Text ausgeben Label1.Text = String.Format( _ "Durchlauf: {0}", zaehler) If zaehler = 15 Then ' Timer deaktivieren Timer1.Enabled = False End If End Sub
Nun fehlt nur noch eine Möglichkeit, den Timer auszulösen. Dies kann beispielsweise mit Hilfe des Click-Ereignisses eines Button-Steuerelements geschehen. Ziehen Sie zu diesem Zweck ein Button-Steuerelement auf das Formular und ändern Sie dessen dargestellten Text, indem Sie das Steuerelement einmal anklicken und anschließend den Wert der Eigenschaft Text im EigenschaftenFenster Ihren Vorstellungen anpassen. Führen Sie danach einen Doppelklick auf das Button-Steuerelement aus. Damit wird eine Behandlungsmethode für dessen Standard-Ereignis definiert. Da es sich dabei um das Click-Ereignis handelt, muss an dieser Stelle entsprechend dem in Listing 4.2 dargestellten Code nur noch der Zähler zurückgesetzt und der Timer über seine Eigenschaft Enabled aktiviert werden. Listing 4.2: Aktivieren des Timer-Steuerelements ''' <summary> ''' Behandelt den Klick auf den Button ''' Private Sub Button1_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Button1.Click ' Timer aktivieren
Express Edition
61
4 – Arbeit mit Elementen Listing 4.2: Aktivieren des Timer-Steuerelements (Forts.) Timer1.Enabled = True ' Zaehler zurücksetzen zaehler = 0 End Sub
Wenn Sie das Beispiel ausführen, werden Sie nach einem Klick auf den Button eine Ausgabe analog zu Abbildung 4.11 erhalten.
Abb. 4.11: Das Zusammenspiel von Timer und Label in Aktion
4.4 Fazit Dieses Kapitel hat Ihnen eine Auswahl von Steuerelementen mit dem Ziel, Sie näher in den Umgang mit diesen Komponenten einzuführen, vorgestellt. Dies konnte und sollte natürlich keine intensive Einführung in die verschiedenen Steuerelemente ersetzen, sondern sollte Ihnen nur einen kleinen Vorgeschmack auf die umfangreichen Möglichkeiten und die unterschiedlichen Arten von Elementen, die für eine Nutzung bereit stehen, geben. Eine Einführung in die Arbeit mit diesen Komponenten muss spezialisierten Werken vorbehalten bleiben. In folgenden Kapitel werden Ihnen darüber hinaus eine ganze Reihe weiterer Elemente vorgestellt, die die Bereitstellung von Funktionalitäten wesentlich erleichtern. Dies geschieht jedoch ebenfalls nicht in Form einer tief greifenden Einführung, sondern eher im Rahmen kleiner praktischer Beispiele. 62
5
Eigenschaften und Ereignisse
In diesem Kapitel gehen wir näher auf das EIGENSCHAFTEN-Fenster ein, das bisher schon häufiger erwähnt und benutzt wurde. Eigenschaften sind die den Elementen inne wohnenden Attribute, die deren Verhalten und Aussehen bestimmen. Programmiertechnisch gesprochen haben wir es hier mit Attributen von Klassenobjekten zu tun, die von der Entwicklungsoberfläche in überschaubarer Weise dargestellt werden. Ereignisse stellen die Verknüpfung zwischen den Aktionen des Benutzers auf der Oberfläche bzw. dem Eintreten bestimmter Zustände und einer behandelnden oder reagierenden Programmlogik her. Im EIGENSCHAFTEN-Fenster können Sie sich neben den Eigenschaften auch die Ereignisse eines Elements anzeigen lassen. Ebenfalls ist es möglich, den Namen einer Ereignisbehandlungsmethode anzugeben oder diese per Doppelklick auf ein Ereignis automatisch generieren zu lassen. Das Angebot an Eigenschaften ist durchaus umfangreich. Je nach Klasse können einige Dutzend Eigenschaften vorhanden sein. Im .NET Framework hat man sich bemüht die Eigenschaften konsistent zu benennen, was den Vorteil hat, dass verschiedene Elemente gleiche Eigenschaftsnamen haben, die das Zuweisen oder Abrufen von meist ebenfalls gleichartigen Informationen erlauben.
Hinweis Nicht jede Eigenschaft ist so benannt, dass sich ihr Einsatzzweck sofort und intuitiv erschließt. Wozu eine Size-Eigenschaft da sein könnte, erschließt sich schon aus dem Namen: Sie wird etwas mit der Größe des Elements zu tun haben. Was sich aber hinter einer Eigenschaft ImeMode verbirgt, muss man vor deren erster Verwendung sicher erst einmal nachschlagen – und ob diese Eigenschaft später jemals benutzt wird, ist eine weitere Frage. Es liegt in der Natur der Sache, dass Sie viele Eigenschaften nie ändern werden, während Sie einige wenige Eigenschaften häufig anpassen müssen.
Express Edition
63
5 – Eigenschaften und Ereignisse
5.1 Arbeit mit dem Eigenschaften-Fenster Nach dem Öffnen des EIGENSCHAFTEN-Fensters über die Taste (F4), per Rechtsklick auf ein Steuerelement und anschließendes Auswählen der Option EIGENSCHAFTEN oder im Menü über ANSICHT | EIGENSCHAFTEN-FENSTER können Sie in dessen Kopfbereich verschiedene Ansichten aktivieren oder gezielt Steuerelemente auswählen, deren Eigenschaften Sie editieren wollen. ^
Abb. 5.1: Eigenschaften-Fenster nach dem Start
Die Auswahl des zu bearbeitenden Elements können Sie auf zwei Arten vornehmen: 쐌 Entweder Sie wählen das Steuerelement im Editor aus (ein einfacher Klick genügt) und wechseln dann in das EIGENSCHAFTEN-Fenster 쐌 Oder Sie wählen das zu bearbeitende Steuerelement über das Auswahlmenü im Kopf des EIGENSCHAFTEN-Fensters aus (Abbildung 5.2). Neben der Auswahl des zu bearbeitenden Steuerelements erlaubt das EIGENSCHAFTEN-Fenster, die Art der Darstellung der Eigenschaften umzustellen: Entweder werden die Eigenschaften nach Kategorien sortiert oder in rein alphabetischer Reihenfolge dargestellt. Die Änderung der Darstellungsart können Sie über die beiden Icons im linken oberen Bereich des EIGENSCHAFTEN-Fensters vornehmen (Abbildung 5.3). 64
Arbeit mit dem Eigenschaften-Fenster
Abb. 5.2: Auswahl des bearbeitenden Steuerelements im Eigenschaften-Fenster
Abb. 5.3: Hier wurde mit Hilfe der Icons im Kopf des EigenschaftenFensters die rein alphabetische Darstellung aktiviert
Express Edition
65
5 – Eigenschaften und Ereignisse
5.2 Darstellung nach Kategorien Das EIGENSCHAFTEN-Fenster hält eine Darstellung nach Kategorien bereit, die die Orientierung dadurch erleichtern soll, dass sie die Elemente thematisch zusammenfasst.
Hinweis Welche Eigenschaften in welcher Kategorie dargestellt werden sollen, lässt sich zur Entwurfszeit einer Komponente über das Attribut Category auf Eigenschaftsebene festlegen. Abbildung 5.4 zeigt das EIGENSCHAFTEN-Fenster mit zusammengeklappten Kategorien.
Abb. 5.4: Die Kategorien des Eigenschaften-Fensters
Im Folgenden sollen die Inhalte der einzelnen Kategorien kurz näher erläutert werden.
Hinweis Aufgrund des beschränkten Platzes im Buch können nicht sämtliche Eigenschaften aller möglichen Steuerelemente besprochen werden. Stattdessen werden Sie anhand des Forms-Steuerelements auf einige interessante Eigenschaften aufmerksam gemacht. Eine komplette Übersicht aller Eigenschaften finden Sie in der Online-Hilfe, die Sie nach Auswahl eines Steuerelements über die Taste (F1) erreichen können.
66
Darstellung nach Kategorien
5.2.1
Darstellung
Der Bereich DARSTELLUNG enthält – je nach ausgewähltem Objekt – viele Optionen zur Beeinflussung der Anzeige eines Objekts. Speziell fällt hier ins Auge, wie komfortabel etwa Farbwerte angepasst werden können (Abbildung 5.5). Um einen Farbwert eines Steuerelements zu bearbeiten, klicken Sie dieses im Designer an oder wählen das gewünschte Steuerelement mit Hilfe des Auswahlmenüs im oberen Bereich des EIGENSCHAFTEN-Fensters aus. Klicken Sie anschließend auf die Eigenschaft BackColor, um etwa die Hintergrundfarbe des Steuerelements an Ihre Bedürfnisse anzupassen. Mit Hilfe der Reiter im oberen Bereich des Auswahlfensters können Sie zwischen verschiedenen Farbpaletten hin und her schalten. Im Bereich BENUTZERDEFINIERT können Sie sogar eigene Farbwerte ablegen.
Abb. 5.5: Setzen der Hintergrundfarbe eines Steuerelements, Umschaltung der Farbpalette
Express Edition
67
5 – Eigenschaften und Ereignisse
Hinweis Die Standard-Hintergrundfarbe eines Formulars ist Control aus dem Bereich SYSTEM. Der dadurch repräsentierte Farbwert kann durch den Benutzer über die Anzeigeeigenschaften seines Windows-Systems definiert werden. Sie sollten diesen Wert also nicht grundlos ändern, denn letztlich bevorzugt jeder Anwender seine eigenen Farbeinstellungen.
5.2.2
Daten
Mit Hilfe des Bereichs DATEN können Sie verschiedene Datenbindungs-Optionen definieren. Sie haben hier beispielsweise die Möglichkeit, den Titel eines Formulars an die Konfigurationsdatei der Applikation zu binden. Damit könnten Sie deren Wartbarkeit deutlich steigern, denn so kann der Titel auch nach dem Erstellen einer Applikation geändert werden, ohne diese neu kompilieren zu müssen. Um den Titel eines Formulars an ein Element von dessen Konfigurationsdatei zu binden, wählen Sie das Formular aus und wechseln in die Eigenschaftsansicht. Öffnen Sie nun den Bereich DATEN, soweit dies nicht automatisch geschehen ist. Im untergeordneten Bereich APPLICATIONSETTINGS klicken Sie nun auf die Schaltfläche neben dem Eintrag PROPERTYBINDINGS und bewegen sich im sich öffnenden Fenster ANWENDUNGSEINSTELLUNGEN FÜR "FORM1" bis zum Eintrag TEXT (Abbildung 5.6).
Abb. 5.6: Binden einer Eigenschaft an eine Anwendungseinstellung
68
Darstellung nach Kategorien
Wählen Sie nun aus dem Auswahlmenü neben der Eigenschaft einen Wert aus. Existiert dieser noch nicht, wählen Sie die Option NEU, um ein entsprechendes Konfigurationsfeld anzulegen. Anschließend öffnet sich ein Eingabefenster, in dem Sie den Wert, den Namen des Schlüssels, unter dem der Wert abgelegt werden soll und die Art des Eintrages festlegen können (Abbildung 5.7).
Abb. 5.7: Festlegen einer neuen Anwendungseinstellung
Für die Art des Eintrags sind zwei Angaben möglich: 쐌 User: Der Eintrag ist benutzerspezifisch 쐌 Application: Der Eintrag ist applikationsspezifisch Für den Titel eines Formulars kann getrost die Option Application ausgewählt werden, denn dieser Wert ist in aller Regel nicht benutzerspezifisch. Nachdem Sie das Fenster per OK geschlossen haben, werden die Einstellungen übernommen und im Designer ändert sich der Titel des Fensters auf den festgelegten Wert.
5.2.3
Eingabe-Hilfen
Der Bereich EINGABEHILFEN erlaubt es, Werte von Eigenschaften zu setzen, mit deren Hilfe sehbehinderten Menschen die Arbeit mit Steuerelementen erleichtert werden kann. Ein Beispiel wäre ein Button-Steuerelement, das statt des (vorlesbaren) Texts WEITER eine Grafik darstellt. Dies wirkt optisch sicherlich durchaus ansprechend, kann jedoch von Vorleseprogrammen nicht interpretiert werden. Mit Hilfe der über den Bereich EINGABEHILFEN erreichbaren Eigenschaft AccessibleName kann ein sprechender Name für das Steuerelement vergeben werExpress Edition
69
5 – Eigenschaften und Ereignisse
den – etwa Weiter-Button. Die Eigenschaft AccessibleDescription erlaubt es, eine weiterführende Beschreibung zu hinterlegen und somit deutlich zu erklären, wofür das Steuerelement eingesetzt werden kann. Da ein Steuerelement unterschiedliche Funktionalitäten implementieren kann, ist mit Hilfe der Eigenschaft AccessibleRole definierbar, welche Art von Funktionalität bereitgestellt wird.
Hinweis Sie sollten sich die Mühe machen, die hier angebotenen Eigenschaften mit Inhalten zu füllen.
5.2.4
Entwurf
Der Bereich ENTWURF beinhaltet Eigenschaften, die primär zum Entwurfszeitraum wirksam sind. Dabei ist besonders die Eigenschaft NAME hervorzuheben, mit deren Hilfe ein Steuerelement sprechend bezeichnet werden kann. Beim Erzeugen eines Elements wird hier automatisch ein Name von der Entwicklungsumgebung eingetragen, um die Elemente unterscheidbar zu machen. Dabei werden die Elemente innerhalb ihrer Typen durchnummeriert – das erste RichTextBox-Steuerelement heißt RichTextBox1, das zweite RichTextBox-Steuerelement heißt RichTextBox2 und so weiter. Der Wert der Name-Eigenschaft entspricht somit dem Namen der Variable, die die Instanz des Steuerelements repräsentiert. Dies heißt jedoch nicht im Umkehrschluss, dass eine Änderung der NameEigenschaft Auswirkungen auf den Namen der Instanzvariablen hätte.
Hinweis Verwenden Sie die Name-Eigenschaft immer dann, wenn Sie den Namen eines Steuerelements dem Benutzer gegenüber ausgeben müssen. Eine weitere Eigenschaft ist GenerateMember. Weisen Sie dieser Eigenschaft den Wert True zu, wird automatisch eine Instanzvariable für das Steuerelement angelegt. Die Zuweisung des Werts False an diese Eigenschaft verhindert dies. Um zu verhindern, dass ein Steuerelement verschoben oder seine Größe geändert werden kann, können Sie der Eigenschaft Locked den Wert True zuweisen. Der Standardwert ist jedoch False – Änderungen an Größe und Position sind also jederzeit möglich.
70
Darstellung nach Kategorien
5.2.5
Fensterstil
Der Bereich FENSTERSTIL findet sich nur bei Formular-Elementen. Sie können hier mit Hilfe der Eigenschaft Icon das Formular-Icon verändern oder über die Eigenschaft Opacity die Transparenz des Formulars beeinflussen. Je niedriger der Opacity-Wert ist, desto transparenter wird ein Formular dargestellt: Ein Opacity-Wert von 50% sorgt für ein halbdurchsichtiges Formular, während die Angabe von 0% für eine komplette Transparenz sorgt. Weitere interessante Eigenschaften sind: 쐌 ControlBox: Gibt an, ob die Symbole im Kopfbereich des Steuerelements angezeigt werden sollen 쐌 HelpButton: Gibt an, ob eine Hilfe-Schaltfläche angezeigt werden soll 쐌 IsMDIContainer: Gibt an, ob das Formular ein MDI-Container ist, in dem mehrere Dokumente parallel angezeigt werden können 쐌 MainMenuStrip: Gibt den Namen des MenuStrip-Steuerelements an, das als Hauptmenü fungiert 쐌 MaximizeBox, MinimizeBox: Gibt an, ob die Symbole für Maximieren und Minimieren angezeigt werden sollen 쐌 ShowIcon: Gibt an, ob ein Icon in der Titelleiste angezeigt werden soll 쐌 ShowInTaskbar: Gibt an, ob das Formular in der Taskbar angezeigt werden soll 쐌 SizeGripStyle: Gibt an, wann das Vergrößerungssymbol im unteren rechten Bereich des Formulars angezeigt werden soll 쐌 TopMost: Gibt an, ob das Formular immer als oberstes Formular fungieren soll 쐌 TransparencyKey: Definiert eine Farbe, die auf dem Formular stets transparent dargestellt wird Mit Hilfe dieser Optionen lässt sich das Aussehen eines Formulars sehr weitreichend beeinflussen. Um ein Gefühl für deren Auswirkungen zu bekommen, sollten Sie ein wenig damit experimentieren.
5.2.6
Fokus
Der Bereich FOKUS verfügt lediglich über die Eigenschaft CausesValidation. Mit dessen Hilfe lässt sich definieren, ob die Validating- und Valided-Ereignisse geworfen werden sollen, wenn das Element den Fokus erhält. Die Voreinstellung True sollte so belassen werden, da sonst untergeordnete Elemente des Formulars nicht mehr die Validierungsereignisse empfangen würden.
Express Edition
71
5 – Eigenschaften und Ereignisse
5.2.7
Layout
Der Bereich LAYOUT definiert vor allem Optionen, die Einfluss auf das Layout des Formulars und dessen untergeordnete Steuerelemente hat. So können Sie mit Hilfe der Optionen Location und Size festlegen, an welcher Stelle und in welcher Größe (in Pixeln) ein Formularfenster angezeigt wird. Die Eigenschaft Padding definiert Abstände der untergeordneten Steuerelemente vom Rand des Formulars, während mit Hilfe von StartPosition festgelegt werden kann, wo ein Formular beim initialen Aufruf angezeigt werden soll. Ebenfalls sehr nützlich ist die Eigenschaft WindowState, denn die definiert, wie ein Fenster initial angezeigt werden soll (minimiert, maximiert oder normal).
Hinweis Die zur Verfügung stehenden Eigenschaften können in Abhängigkeit von der Art des Steuerelements gerade in diesem Bereich sehr stark variieren.
5.2.8
Sonstiges
Im Bereich SONSTIGES befinden sich Optionen, die speziell für das Verhalten des Steuerelements auf Tastendrücke von Relevanz sind. Dabei handelt es sich um die Eigenschaften AcceptButton und CancelButton, die definieren, welche Schaltfläche des Formulars virtuell „angeklickt“ werden soll, wenn der Benutzer die (¢) bzw. (Esc)-Tasten drückt. Auf diese Art und Weise können diese Tasten in den Lebenszyklus von Formularen einbezogen werden und stellen oftmals nützliche Abkürzungen dar. Mit Hilfe der Eigenschaft KeyPreview können Sie festlegen, ob ein Formular über Tastendrücke informiert wird, bevor das Steuerelement, das den Eingabefokus besitzt, diese behandeln kann. Dies ist sehr nützlich, wenn das Formular schon vor einem Eingabefeld auf bestimmte Tastaturereignisse reagieren und in den weiteren Verarbeitungsablauf eingreifen soll.
5.2.9
Verhalten
Einstellungen bezüglich der Reaktionen eines Steuerelements auf Benutzeraktionen können Sie im Bereich VERHALTEN beeinflussen. So kann mit Hilfe der Eigenschaft AllowDrop festgelegt werden, ob Ziehen-und-Fallenlassen-Aktionen erlaubt sein sollen. Die Eigenschaft AutoValidate erlaubt es festzulegen, ob Vali-
72
Spezielle Eigenschaften anderer Steuerelemente
dierungen der Inhalte des Steuerelements automatisch erfolgen sollen und welches Verhalten im Fehlerfalle gewünscht ist. Haben Sie ein Kontextmenü mit Hilfe eines ContextMenuStrip-Steuerelements definiert, können Sie dies über die gleichnamige Eigenschaft bekannt machen und das Kontextmenü automatisch anzeigen lassen. Die Eigenschaft Enabled legt fest, ob das Steuerelement überhaupt aktiviert ist und benutzt werden darf. Eine Zuweisung des Werts False an diese Eigenschaft bewirkt, dass das Steuerelement zwar angezeigt, aber für weitere Interaktionen gesperrt wird. Die bereits weiter oben erwähnte Eigenschaft ImeMode erlaubt es, festzulegen, wie sich die Eingabefelder des Formulars bezüglich der Eingabe und Darstellung von koreanischen, japanischen und chinesischen Zeichen verhalten.
Hinweis Sie sollten diesen Wert nur ändern, wenn dafür eine zwingende Notwendigkeit besteht.
5.3 Spezielle Eigenschaften anderer Steuerelemente Viele Elemente besitzen weitere spezifische Eigenschaften, die sich in die Darstellung des EIGENSCHAFTEN-Fensters nahtlos einfügen, wenn diesem Steuerelement der Fokus im Designer der Entwicklungsumgebung zugewiesen worden ist. So verfügt eine ToolStripMenuItem-Instanz über die Eigenschaft ToolTipText. Mit deren Hilfe lässt sich ein Hinweistext definieren, der angezeigt wird, wenn der Benutzer den Cursor oder den Mauszeiger einige Sekunden über dem jeweiligen Menüelement ruhen lässt. Abbildung 5.8 zeigt die Definition des Hinweistexts in der Entwicklungsumgebung. Wenn Sie den Wert der Eigenschaft definieren und das Programm ausführen, können Sie beim Verweilen mit dem Mauszeiger über dem Menüpunkt eine Darstellung analog zu Abbildung 5.9 erwarten.
Express Edition
73
5 – Eigenschaften und Ereignisse
Abb. 5.8: Zuweisen eines Werts an die Eigenschaft ToolTipText einer ToolStripMenuStripItem-Instanz
Abb. 5.9: Tooltip-Anzeige im Menü
Diese Tooltips können einem Benutzer den Umgang mit einem Programm wesentlich erleichtern, denn sie sorgen für selbsterklärende Optionen. Im Bereich SONSTIGES befindet sich bei einem ToolStripMenuItem-Steuerelement nicht die Eigenschaft AcceptButton, sondern eine Eigenschaft ShortCutKeys. Mit deren Hilfe kann eine Tastenkombination für den Menüeintrag definiert werden. Hier können Sie für einen Beenden-Menüpunkt etwa die Tastenkombinationen Strg+B oder Strg+X definieren. 74
Dock-Eigenschaft
5.4 Dock-Eigenschaft Mit Hilfe der Dock-Eigenschaft können Sie festlegen, wo ein Steuerelement in Bezug auf sein übergeordnetes Steuerelement ausgerichtet wird. Diese Ausrichtung beinhaltet neben einer Positionsveränderung im Falle einer Positionsänderung des übergeordneten Steuerelements auch eine automatische Größenänderung, soweit dies sinnvoll erscheint. Die Angabe erfolgt mit Hilfe eines DockStyle-Werts. Die meisten Formularelemente verfügen über eine Ausrichtung am oberen und linken Rand des übergeordneten Steuerelements (DockStyle.Top Or DockStyle.Left) oder haben keine spezifische Ausrichtung (DockStyle.None). Sie können dies visuell mit Hilfe des Ausrichtungs-Designers ändern. Diesen rufen Sie über den nach unten gerichteten Pfeil neben dem aktuellen Dock-Wert auf (Abbildung 5.10).
Abb. 5.10: Setzen der Dock-Eigenschaft mit Hilfe des Ausrichtungs-Designers
Die gewünschten Ausrichtungen des jeweiligen Steuerelements wählen Sie aus, indem Sie die entsprechenden Schaltflächen des Ausrichtungs-Designers anklicken. Die jeweils ausgewählten Werte werden dunkler dargestellt. Die Schaltfläche NONE deaktiviert eine automatische Ausrichtung, was speziell bei Schaltflächen oder Eingabefeldern sinnvoll ist. Die mittlere Schaltfläche FILL sorgt für ein Ausfüllen des umgebenden Containers.
5.5 Ereignisse behandeln Die Implementierung von Behandlungsmethoden für Ereignisse ist auf vielfältige Arten innerhalb der Entwicklungsumgebung umsetzbar. Im Folgenden sollen diese Möglichkeiten beschrieben und erläutert werden.
Express Edition
75
5 – Eigenschaften und Ereignisse
5.5.1
Standard-Ereignis behandeln
Durch einen Doppelklick auf ein Steuerelement lassen Sie automatisch eine Ereignisbehandlungsmethode im Code-Bereich erzeugen. Diese verfügt über alle notwendigen Parameter und einen mehr oder weniger sinnvollen Namen. In jedem Fall ist die Methode bereits an das jeweilige Ereignis gebunden, so dass Sie im Code-Bereich lediglich noch den auszuführenden Code erfassen müssen.
5.5.2
Ereignis mit Standard-Behandlungsmethode behandeln
Oft möchten Sie nicht das Standard-Ereignis, sondern ein bestimmtes anderes Ereignis behandeln. Dies können Sie erreichen, indem Sie im EIGENSCHAFTENFENSTER in die Ereignisansicht wechseln. Dies geschieht mit Hilfe des Blitzsymbols in der Symbolleiste des EIGENSCHAFTEN-Fensters.
Abb. 5.11: Das Aktivieren der Ereignisansicht geschieht über das Blitz-Symbol
Anschließend werden Ihnen alle für das Steuerelement verfügbaren Ereignisse dargestellt.
76
Ereignisse behandeln
Bewegen Sie nun den Eingabefokus neben einen Ereignisnamen und drücken Sie die Eingabetaste, wird automatisch eine Ereignisbehandlungsmethode generiert. Haben Sie dies beispielsweise für das Click-Ereignis des Formulars getan, könnten Sie hier analog zu Listing 5.1 eine MessageBox mit einem Hinweistext anzeigen lassen. Listing 5.1: Ausgabe eines Hinweistexts über eine MessageBox ''' <summary> ''' Behandelt das Klicken ins Formular ''' Private Sub Form1_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles MyBase.Click ' Hinweistext anzeigen MessageBox.Show( _ "Diese Funktionalität ist noch " & _ "nicht implementiert!") End Sub
Klicken Sie nun bei der Ausführung in das Formular, wird ein Hinweis angezeigt (Abbildung 5.12).
Abb. 5.12: Anzeige eines Hinweistexts als Reaktion auf ein Ereignis
5.5.3
Ereignis mit selbst benannter Behandlungsmethode behandeln
Fast genauso einfach wie das Behandeln eines Ereignisses mit einer standardmäßig benannten Methode gestaltet sich das Verwenden einer selbst benannten Methode. Derartige Methoden unterscheiden sich in nichts von ihren automatisch benannten Geschwistern – lediglich der Name wird in den meisten Fällen eingängiger sein. Express Edition
77
5 – Eigenschaften und Ereignisse
Um eine Ereignisbehandlungsmethode mit selbst definiertem Namen zu implementieren, wechseln Sie in die Ereignisansicht des EIGENSCHAFTEN-FENSTERS und positionieren den Eingabefokus im Eingabefeld neben dem Namen des Ereignisses. Geben Sie nun einen aussagekräftigen Methodennamen ein und drücken Sie die (¢)-Taste. Alternativ drücken Sie die (ÿ)-Taste oder geben einem anderen Eingabefeld den Fokus. Direkt nach dem Verlassen des Feldes oder des Drückens der (¢)-Taste wird die neue Methode generiert und die IDE wechselt in die Code-Ansicht. Hier können Sie nun das Ereignis wie erforderlich behandeln. Listing 5.12 zeigt, wie die Behandlung eines DoubleClick-Ereignisses implementiert sein könnte. Listing 5.2: Der Name der Ereignisbehandlungsmethode ist selbst definiert ''' <summary> ''' Behandelt den Doppelklick ins Formular ''' Private Sub DoppeltGeklickt( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles MyBase.DoubleClick ' Funktionalität ist nicht implementiert MessageBox.Show( _ "Auch diese Funktionalität gibt es " & _ "noch nicht...") End Sub
Auch hier werden Sie nach dem Start des Programmes und einem anschließenden Doppelklick ins Formular einen entsprechenden Hinweis angezeigt bekommen.
5.6 Fazit Mit Hilfe des EIGENSCHAFTEN-Fensters können Sie bequem und einfach die Eigenschaften und Ereignisbindungen Ihrer Applikationskomponenten verwalten. Dabei hilft speziell die Kategorisierung von Ereignissen und Eigenschaften, einen schnellen Überblick zu gewinnen. Diverse Assistenten unterstützen Sie beim Erfassen der Informationen.
78
6
Toolbox anpassen und CodeAusschnitte verwenden
Bei der täglichen Arbeit mit der Entwicklungsumgebung werden Sie feststellen, dass Sie häufiger die TOOLBOX verwenden, um so schnell an die diversen Elemente zu gelangen. In diesem Zusammenhang ist es ungemein praktisch, dass Sie die TOOLBOX um eigene Komponenten erweitern können. Ebenfalls wichtig bei der täglichen Arbeit sind Codeausschnitte (CodeSnippets), die vorgefertigten Quelltext enthalten und Ihnen somit viel Tipparbeit abnehmen können. Sie können auch selber Codeausschnitte erstellen, wie weiter unten gezeigt wird.
6.1 Eigenes Steuerelement erstellen Anhand eines Dateidialogs soll in diesem Abschnitt gezeigt werden, wie Sie ein eigenes TOOLBOX-Element erstellen können. Zu diesem Zweck soll eine SaveFileDialog-Komponente so erweitert und angepasst werden, dass sie RTFDateien verarbeitet. Erstellen Sie deshalb eine neue WINDOWS-ANWENDUNG mit dem Projektnamen ToolBoxBeispiele. Ziehen Sie aus dem Bereich DIALOGFELDER der TOOLBOX eine SaveFileDialog-Komponente auf das einzige Formular der Lösung. Um die Komponente aufzurufen, können Sie ein Button-Steuerelement verwenden, das Sie nun ebenfalls auf das Formular ziehen sollten. Abbildung 6.1 zeigt, wie die Entwicklungsumgebung zu diesem Zeitpunkt aussehen sollte. Mit einem Doppelklick auf das Button-Steuerelement können Sie nun dessen Click-Ereignis (dies ist das Standardereignis eines Buttons) behandeln und dabei die SaveFileDialog-Komponente zunächst einmal nur anzeigen lassen (Listing 6.1).
Express Edition
79
6 – Toolbox anpassen und Code-Ausschnitte verwenden
Abb. 6.1: Dateidialog Listing 6.1: Bei der Behandlung des Click-Ereignisses wird der Dialog angezeigt Public Class Form1 ''' <summary> ''' Behandelt das Click-Ereignis des Buttons ''' Private Sub Button1_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Button1.Click ' Dialog anzeigen lassen SaveFileDialog1.ShowDialog() End Sub End Class
80
Eigenes Steuerelement erstellen
Starten Sie nun das Programm mit Hilfe der (F5)-Taste oder der AUSFÜHRENSchaltfläche in der Symbolleiste und klicken Sie auf die Schaltfläche. Sie werden eine Anzeige analog zu Abbildung 6.2 erhalten.
Abb. 6.2: Dateidialog in Aktion
Hinweis Der tatsächlich angezeigte Dateidialog wird ähnlich der Abbildung 6.2 aussehen. Initial geöffnet wird das Verzeichnis, in dem sich das Programm befindet. Wählen Sie nun eine Datei aus oder geben Sie einen beliebigen Dateinamen an und klicken Sie auf die Schaltfläche SPEICHERN. Wie zu erwarten war, geschieht an dieser Stelle bis auf das Verschwinden des Dialogs noch nichts weiter, da bisher nur dessen Anzeige implementiert worden ist.
6.1.1
Rückgabe auswerten
Die Methode ShowDialog() des SaveFileDialog-Steuerelements gibt einen Wert aus der DialogResult-Auflistung zurück. Dieser zeigt an, wie der Benutzer den Dialog beendet hat und kann beispielsweise mit Hilfe eines If-Statements ausgewertet werden (Abbildung 6.3).
Express Edition
81
6 – Toolbox anpassen und Code-Ausschnitte verwenden
Hinweis Die beste Rückgabe wäre vom Wert DialogResult.Ok, da dies einem Klick auf die SPEICHERN-Schaltfläche bei vorheriger Eingabe eines Dateinamens oder der Auswahl einer Datei entspricht.
Abb. 6.3: Rückgabewerte SaveFileDialog
In Abbildung 6.3 sehen Sie dargestellt, wie die Entwicklungsumgebung eine Auswahl der verfügbaren Rückgabewerte anzeigt. Diese Anzeige erscheint für gewöhnlich automatisch, kann aber auch mit Hilfe der Tastenkombination (Strg)+(Leertaste) erzwungen werden. Wählen Sie den Wert Windows.Forms.DialogResult.OK mit der (ÿ)-Taste oder den Pfeiltasten aus und die Entwicklungsumgebung komplettiert das If-Statement. Über den Aufruf einer MessageBox können Sie sich den gewählten Dateinamen anzeigen lassen (Listing 6.2).
82
Eigenes Steuerelement erstellen Listing 6.2: Dateidialog mit Anzeige des Dateinamens ''' <summary> ''' Behandelt das Click-Ereignis des Buttons ''' Private Sub Button1_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Button1.Click ' Anzeige des Dialogs mit anschließender ' Auswertung von dessen Rückgabe If SaveFileDialog1.ShowDialog() = _ Windows.Forms.DialogResult.OK Then ' Ausgabe erzeugen Dim message As String = _ String.Format("Gewählter Dateiname: {0}", _ SaveFileDialog1.FileName) ' ...und anzeigen MessageBox.Show(message) End If End Sub
Wenn Sie das Programm starten, einen Dateinamen angeben und die Schaltfläche SPEICHERN betätigen, wird eine entsprechende Ausgabe generiert (Abbildung 6.4).
Abb. 6.4: Ausgabe des Dateinamens
Wenn Sie eine vorhandene Datei auswählen, wird automatisch nachgefragt, ob diese überschrieben werden soll. Sie können dies bedenkenlos bejahen, da die entsprechende Sicherungsfunktionalität noch nicht implementiert ist.
Express Edition
83
6 – Toolbox anpassen und Code-Ausschnitte verwenden
6.1.2
Anpassen des Dialogs
Die SaveFileDialog-Komponente verfügt über einige interessante Eigenschaften. Deren Anpassung erlaubt es etwa, die Anzeige der verfügbaren Dateien auf bestimmte Typen einzuschränken oder ein initiales Verzeichnis auszuwählen. Tabelle 6.1 zeigt einige dieser Eigenschaften. Eigenschaft
Typ
Bedeutung
Filter
String
Zeigt nur die Dateien eines Verzeichnisses, die der Filterbedingung entsprechen
FilterIndex
Integer
Setzt den Indexwert der Eigenschaft Filter
InitialDirectory
String
Verzeichnispfad, der beim Start des Dateidialogs angezeigt wird
Tabelle 6.1: Ausgewählte Eigenschaften des Dateidialogs
Im Folgenden sollen diese Eigenschaften angepasst werden: 쐌 Der Wert der Eigenschaft Filter soll eine Vorauswahl auf RTF-Dateien ermöglichen. Sie können dies so angeben: RTF Dateien (*.rtf)|*.rtf|Alle Dateien (*.*)|*.*. 쐌 Der Eigenschaft FilterIndex wird der Wert 1 zugewiesen, damit in jedem Fall die RTF-Einschränkung des Filters aktiviert ist. 쐌 Als initiales Verzeichnis (InitialDirectory) wird C:\ definiert. Damit ist das Steuerelement einsatzbereit. Im Folgenden soll demonstriert werden, wie es der TOOLBOX hinzugefügt werden kann.
6.2 Eigene Toolbox-Elemente hinzufügen Die Entwicklungsumgebung bietet die Möglichkeit, die TOOLBOX um eigene Elemente zu erweitern. Dies sollte stets dann erfolgen, wenn ein angepasstes Steuerelement häufiger verwendet werden soll. Um der TOOLBOX ein neues Element in einer eigenen Registerkarte hinzufügen, öffnen Sie die TOOLBOX und fügen über die Option REGISTERKARTE HINZUFÜGEN des Kontextmenüs den neuen Abschnitt EIGENE ELEMENTE ein.
84
Eigene Toolbox-Elemente hinzufügen
Ziehen Sie nun die vorhin konfigurierte SaveFileDialog-Komponente aus dem Formular in diesen Abschnitt. Es wird automatisch ein Element mit dem Namen Template1 erzeugt. Dieses repräsentiert die Komponente samt deren Einstellungen und sollte deshalb einen sinnvolleren Namen erhalten. Mit Hilfe der Option ELEMENT UMBENENNEN des Kontextmenüs können Sie dem Element einen neuen Namen geben. Der Name RtfSaveFileDialog wurde für das Beispiel gewählt. Abbildung 6.5 zeigt die TOOLBOX samt der neuen Komponente.
Abb. 6.5: Eigenes Toolbox-Element RtfSaveFileDialog
Hinweis Sie können die TOOLBOX jederzeit mit Hilfe der Option TOOLBOX ZURÜCKSETZEN in den ursprünglichen Stand versetzen. Alle Erweiterungen werden dabei entfernt.
6.2.1
Weitere Elemente hinzufügen
Die TOOLBOX zeigt nicht alle Elemente an, die auf dem System vorhanden sind. Sie können deshalb selbstständig neue Komponenten hinzufügen. Dies geschieht mit Hilfe der Kontextmenü-Option ELEMENTE AUSWÄHLEN. Dabei sind Sie nicht nur auf .NET-Komponenten beschränkt, sondern können auch auf die (veralteten) COM-STEUERELEMENTE zurückgreifen.
Hinweis Beim ersten Aufruf nach dem Start der Entwicklungsumgebung kann der Aufbau des Fensters sehr viel Zeit in Anspruch nehmen. Express Edition
85
6 – Toolbox anpassen und Code-Ausschnitte verwenden
Abbildung 6.6 zeigt, wie das TOOLBOXELEMENTE AUSWÄHLEN-Fenster aussehen kann. Falls ein Steuerelement nicht angezeigt wird, liegt dies höchstwahrscheinlich daran, dass es sich nicht im globalen Assemblierungscache (GAC) des Systems befindet. In diesem Fall müssen Sie es händisch mit Hilfe der DURCHSUCHEN-Schaltfläche auswählen.
Abb. 6.6: Toolboxelementeauswahl
Ein Häkchen neben einem Steuerelement bedeutet übrigens, dass dieses Steuerelement in der TOOLBOX angezeigt wird.
6.3 Codeausschnitte Der Code-Editor bietet die Möglichkeit, vorher definierte Codemuster (CodeSnippets) in den Quelltext einzufügen. Die Entwicklungsumgebung bringt schon im Auslieferungszustand mehrere hundert Codeausschnitte mit, deren Verwendung hier beispielhaft gezeigt werden soll. Jeder Codeausschnitt beinhaltet eine in sich abgeschlossene Programmieraufgabe. Dies reicht von einfachen konditionellen Ausdrücken bis hin zur Anbindung von seriellen Anschlüssen zum Telefonieren. 86
Codeausschnitte
Mit Hilfe des CODEAUSSCHNITT-MANAGERS (Abbildung 6.7) können Sie auf diese CodeSnippets zurück greifen. Sie erreichen ihn in der Code-Ansicht über die Option AUSSCHNITT EINFÜGEN des Kontextmenüs oder über EXTRAS | CODEAUSSCHNITT-MANAGER.
Abb. 6.7: Codeausschnitt-Manager
6.3.1
Konditionelles Statement definieren
Als Erstes soll ein konditionelles Statement erstellt werden. Positionieren Sie den Cursor zu diesem Zweck dort, wo der Code eingefügt werden soll. Rufen Sie den Manager über die Option AUSSCHNITT EINFÜGEN des Kontextmenüs auf und wählen Sie ALLGEMEINE CODEMUSTER | KONDITIONELLE ABSCHNITTE UND SCHLEIFEN | SELECT CASE ANWEISUNG. Es wird der leere Rumpf einer Select Case Anweisung eingefügt, der nur noch ausgefüllt werden muss (Abbildung 6.8).
Express Edition
87
6 – Toolbox anpassen und Code-Ausschnitte verwenden
Abb. 6.8: Codemuster – Select-Case-Anweisung
Die grün hinterlegten Bereiche zeigen den logischen Zusammenhang zwischen der Auswahlvariable und ihren möglichen Ausprägungen.
6.3.2
Komplexeres Statement einfügen
Ein weiteres Beispiel soll jetzt zeigen, wie man mit Hilfe der Codeausschnitte ein Array erstellt und anschließend durchläuft. Das Ganze wird mit Hilfe eines Button-Steuerelements in Szene gesetzt, an dessen Click-Ereignis eine Methode gebunden werden soll. Fügen Sie innerhalb der Methode zunächst die Array-Deklaration ein: ALLGEMEINE CODEMUSTER | AUFLISTUNGEN UND ARRAYS | EINDIMENSIONALES ARRAY INITIALISIEREN. Anschließend können Sie das Durchlaufen des Arrays ebenfalls über den CODEAUSSCHNITT-MANAGER einfügen lassen: ALLGEMEINE CODEMUSTER | AUFLISTUNGEN UND ARRAYS | AUFLISTUNG DURCHLAUFEN. Der so generiert Code wird in Abbildung 6.9 dargestellt.
Abb. 6.9: Codemuster für Arrays
Das erste Codemuster erzeugt ein Array aus Integer-Werten, während das zweite Codemuster ein Array aus Strings durchläuft. Beide Codemuster passen aufgrund der unterschiedlichen Variablentypen nicht zueinander und führen zu Übersetzungsfehlern. Der Code muss deshalb so angepasst werden, dass das Array und die For-Each Schleife den gleichen Array-Typ erwarten und das gleiche Array referenzieren.
88
Codeausschnitt-Manager erweitern
Passen Sie deshalb den Namen des zu durchlaufenden Arrays an den Namen des ursprünglich deklarierten Arrays an. Ändern Sie ebenfalls den Datentyp von String auf Integer. Letztlich sollte Ihr Code Listing 6.3 entsprechen, Listing 6.3: Array-Codemuster im Typ angepasst ''' <summary> ''' Click-Ereignis Button1 ''' ''' <param name="sender"> ''' <param name="e"> Private Sub Button1_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Button1.Click Dim oneDimArray() As Integer = _ {1, 2, 3} ' Iterate through a collection For Each value As Integer In oneDimArray MessageBox.Show(value) Next End Sub
6.4 Codeausschnitt-Manager erweitern Es ist auch möglich, eigene Codemuster mit Hilfe des CODEAUSSCHNITT-MANAGERS zu erstellen. Wenn man oft ähnlichen Code eingeben muss, kann diese Funktion sehr hilfreich sein.
Hinweis Der CODEAUSSCHNITTS-MANAGER ermöglicht es, Codeausschnitte online zu suchen. Nutzen Sie diese Möglichkeit, bevor Sie sich selber an die Erstellung eines Codeauschnittes machen.
Express Edition
89
6 – Toolbox anpassen und Code-Ausschnitte verwenden
Im Folgenden soll ein eigenes Codemuster erstellt werden, das ein String-Array anlegt und durchläuft. Dabei muss zunächst eine Codemusterdatei erstellt werden, die dann später im CODEAUSSCHNITTS-MANAGER importiert werden kann. Dabei handelt es sich um eine XML-Datei mit der Dateinamenerweiterung .snippet, die in einem speziellen Format die Informationen über das Codemuster enthält. Diese können Sie Ihrem Projekt in Form einer einfachen Text- oder XMLDatei hinzufügen. Achten Sie darauf, die korrekte Dateiendung zu vergeben. Eine Snippet-Datei beinhaltet alle notwendigen Informationen, um einen CodeAusschnitt zu deklarieren und in den Code einbinden zu können. Dabei befinden sich im Bereich Header die Informationen zur Anzeige des Snippets im Manager, im Bereich References werden die erforderlichen Referenzen definiert und der Bereich Code nimmt den jeweiligen Code innerhalb eines CData-Bereichs auf. Wichtig ist auf Ebene des Code-Knotens die Angabe der verwendeten Sprache mit Hilfe des Attributs Language. Listing 6.4 zeigt, wie eine derartige Datei letztlich aussehen kann. Listing 6.4:
Codeauschnitt – XML-Definitionsdatei
<Snippet> System.Windows.Forms.dll
90
Codeausschnitt-Manager erweitern Listing 6.4:
Codeauschnitt – XML-Definitionsdatei (Forts.)
{"Wert 1", "Wert 2", "Wert 3"} ' Arraydurchlauf For Each name As String In oneDimArray Next ]]>
Nach dem Speichern können Sie den Codeausschnitt mit Hilfe des CODEAUSSCHNITT-MANAGERS importieren. Wählen Sie zu diesem Zweck dessen Option IMPORTIEREN und laden Sie anschließend Ihr Snippet in den Manager. Dieses wird nach dem erfolgreichen Laden dargestellt und kann den verschiedenen Bereichen des Managers zugeordnet werden (Abbildung 6.10).
Abb. 6.10: Import eines Codemusters
Express Edition
91
6 – Toolbox anpassen und Code-Ausschnitte verwenden
Nach der Fertigstellung können Sie das Codemuster ausprobieren (Abbildung 6.11).
Abb. 6.11: Aufruf des eigenen Codemusters
Als Ergebnis erhalten Sie den in der Abbildung 6.12 dargestellten Programmcode.
Abb. 6.12: Eigenes Codemuster in Aktion
Wie an diesem Beispiel zu sehen ist, benötigen Sie zwar einige XML-Kenntnisse, um eine Codemuster-Importdatei zu erstellen. Der Lohn der Arbeit kann sich aber durchaus sehen lassen.
6.5 Fazit Die TOOLBOX, deren Erweiterungen und die verschiedenen mitgelieferten Codemuster erleichtern die Arbeit mit Visual Basic 2005 erheblich. Wenn Sie zusätzlich noch die Möglichkeit nutzen, eigene Toolbox-Elemente und Codemuster zu erstellen, dann können Sie sich mit geringem Aufwand eine sehr produktive Arbeitsumgebung schaffen.
92
7
Suche und Lesezeichen
Je größer ein Projekt wird, desto unübersichtlicher gerät es in der Regel. Hier helfen letztlich nur eine geeignete Hierarchie und eine leistungsfähige Suche dabei, den Überblick zu behalten.
7.1 Gehe zu ... Die einfachste Art, eine Position wiederzufinden, besteht darin, sie direkt aufzurufen. Über BEARBEITEN | GEHE ZU können Sie dies für die aktuelle Klasse erreichen. Beim Aufruf wird automatisch die Zeilennummer der aktuellen Cursor-Position voreingestellt und markiert (Abbildung 7.1). Oberhalb des Eingabebereichs werden die möglichen Zeilennummern dargestellt.
Abb. 7.1: Gehe-zu-Zeile-Dialog
Ein Druck auf die Schaltfläche OK oder das Betätigen der (¢)-Taste übernimmt die Zeilennummer und positioniert den Eingabefokus entsprechend. Sollten Sie eine unerreichbare Zeilennummer angegeben haben, wird die letzte erreichbare Zeile angesprungen. Analog wird bei der Eingabe von 0 verfahren: Hier wird jedoch nicht auf die letzte erreichbare Zeile, sondern auf die erste Zeile positioniert. Eine Eingabe von Buchstaben oder negativen Zahlen ist nicht möglich. Möchten Sie die aktuelle Position nach Aufruf des Fensters nicht verändern, klicken Sie die Schaltfläche ABBRECHEN an oder betätigen die (Esc)-Taste.
7.2 Suchen Den SUCHEN UND ERSETZEN-Dialog gibt es in zwei Ausführungen: als reinen SUCHEN- und als kombinierten SUCHEN UND ERSETZEN-Dialog. Beide Formen können einfach zur jeweils anderen Form umgeschaltet werden. Express Edition
93
7 – Suche und Lesezeichen
Der Aufruf des SUCHEN-Dialogs geschieht mit Hilfe der Tastenkombination (Strg)+(F). Befindet sich der Cursor über einem Begriff, wird dieser im Suchfeld SUCHEN NACH eingetragen. Eventuell bereits zuvor genutzte Begriffe können über den nach unten gerichteten Pfeil neben dem Eingabebereich erneut ausgewählt werden (Abbildung 7.2).
Abb. 7.2: Suchen-Dialog
Ebenfalls können Sie auswählen, welchen Fokus die Suche haben soll. Zur Auswahl stehen im Bereich SUCHEN IN folgende Optionen: 쐌 AUSWAHL: Ist verfügbar, wenn ein Bereich im Dokument markiert ist. Begrenzt die Suche auf diesen Bereich und ist dann voreingestellt. 쐌 AKTUELLER BLOCK (): Ist verfügbar, wenn sich die aktuelle Auswahl oder der Cursor innerhalb eines Blocks (Region) befindet. Begrenzt die Suche auf diesen Block. 쐌 AKTUELLES DOKUMENT: Sucht im derzeit aktiven Dokument nach dem Suchbegriff entsprechend der Suchoptionen. 쐌 ALLE GEÖFFNETEN DOKUMENTE: Sucht in allen derzeit geöffneten Dokumenten, unabhängig von deren Projektzugehörigkeit und Speicherposition. 쐌 AKTUELLES PROJEKT: Die Suche findet in allen zum aktuellen Projekt gehörenden Dateien statt. Über den entsprechenden Knoten können diverse Optionen angezeigt und gesetzt werden. Diese beeinflussen, wie Ergebnisse ermittelt werden. Tabelle 7.1 erläutert die verschiedenen Suchmöglichkeiten.
94
Suchen Option
Bedeutung
GROß- / KLEINSCHREIBUNG
Legt fest, dass auf exakte Groß- und Kleinschreibung geachtet wird. In diesem Fall würde die Eingabe von Test andere Suchergebnisse als die Eingabe von test liefern.
BEACHTEN
NUR GANZES WORT SUCHEN
Der eingegebene Begriff wird als komplettes Wort aufgefasst und nur gefunden, wenn er freistehend ist. Allein stehend meint, dass der Begriff von Leerzeichen oder Punkten oder anderen Satzzeichen umschlossen sein muss.
SUCHRICHTUNG NACH OBEN
Per Default wird nach unten von der aktuellen Position gesucht. Wird diese Option gesetzt, erfolgt die Suche nach oben zum Anfang des aktuellen Dokuments hin.
AUSGEBLENDETEN TEXT
In der Standardeinstellung wird ausgeblendeter oder minimierter Text nicht durchsucht. Ist diese Option aktiviert, werden die entsprechenden Texte ebenfalls in die Suche einbezogen.
DURCHSUCHEN
SUCHEN MIT
In der Standardeinstellung wird nach den eingegebenen Begriffen gesucht. Dabei werden Platzhalter (etwa * oder ?), sowie reguläre Ausdrücke als gewöhnliche Zeichen behandelt. Dieses Verhalten kann aufgehoben werden, indem diese Option aktiviert wird. Anschließend stehen die Optionen PLATZHALTER und REGULÄRE AUSDRÜCKE zur Verfügung. Auf deren Verwendung wird weiter unten eingegangen.
Tabelle 7.1: Suchoptionen
Geben Sie einen Suchbegriff ein, können Sie nach Auswahl der für Sie relevanten Optionen die nächste Fundstelle über die Schaltfläche WEITERSUCHEN erreichen.
Express Edition
95
7 – Suche und Lesezeichen
7.2.1
Platzhalter
Aktivieren Sie die Suchoption SUCHEN MIT | PLATZHALTER, so können Sie verschiedene Platzhalter einsetzen. Tabelle 7.2 listet die zur Verfügung stehenden Platzhalter mit ihren Bedeutungen auf. Platzhalter
Bedeutung
Beispiel Übereinstimmungen
?
Ein beliebiges einzelnes Zeichen
te?t
*
Eine oder mehrere te*t beliebige Zeichen, geht auch über Wortgrenzen hinaus
test, tessst, tess12t, tesSt, tee mit, ...
#
Eine beliebige einzelne Ziffer
te#t
te1t, te0t, ...
[]
Zeichenmenge
te[sn]t
test, tent, teSt, ...
[!]
Eine beliebige Zeichen- te[!rn]t menge, die nicht im Testausdruck enthalten ist
test, temt, teet, ...
\ Escape-Zeichen,
te\*t
test, tert, tept, tedt, teAt, te2t, ...
te*t
erlaubt die Verwendung der PlatzhalterZeichen in den Suchbedingungen Tabelle 7.2: Platzhalter und deren Verwendung
Die Platzhalter sind mehrfach innerhalb einer Suchabfrage einsetzbar. Aktivieren Sie die Verwendung von Platzhaltern über die Option SUCHEN MIT | PLATZHALTER, wird der Ausdrucksgenerator für Platzhalter verfügbar gemacht. Dieser ist über den nach rechts gerichteten Pfeil neben dem Eingabefeld für den Suchbegriff erreichbar (Abbildung 7.3).
96
Suchen
Abb. 7.3: Ausdrucksgenerator für die Suche mit Platzhaltern
7.2.2
Reguläre Ausdrücke
Reguläre Ausdrücke verwenden eine eigene Notation, um Muster zu finden. Diese Notation kann durchaus schwierig zu lesen sein, ist aber äußerst mächtig. Wenn Sie die Option SUCHEN MIT | REGULÄRE AUSDRÜCKE aktivieren, wird der Ausdrucksgenerator aktiviert. Dieser ist erkennbar über einen nach rechts gerichteten Pfeil neben dem Eingabefeld für den Suchbegriff (Abbildung 7.4).
Abb. 7.4: Ausdrucksgenerator für die Suche mit regulären Ausdrücken
Express Edition
97
7 – Suche und Lesezeichen
Hinweis Sollten Sie bereits reguläre Ausdrücke kennen und verwenden, werden Sie einige Unterschiede zwischen den hier anwendbaren regulären Ausdrücken und den von Ihnen gewohnten regulären Ausdrücken finden. Diese Unterschiede sind im Sinne einer einfacheren Verwendbarkeit implementiert worden. Generell sind die hier einsetzbaren regulären Ausdrücke beschränkter als ihre im gewöhnlichen Code verwendbaren Entsprechungen. Tabelle 7.3 zeigt die zur Verfügung stehenden Ausdrücke. Deren Verwendung wird im Anschluss kurz erläutert. Ausdruck
Bedeutung
.
Beliebiges Zeichen
*
Null oder mehr Vorkommnisse (Optionale Elemente)
+
Ein oder mehr Vorkommnisse
@
Entspricht *, sucht aber nach der kürzest möglichen Übereinstimmung (nicht gierig)
#
Entspricht +, sucht aber nach der kürzest möglichen Übereinstimmung (nicht gierig)
^
Zeilenanfang
$
Zeilenende
Wortende
\n
Zeilenumbruch
[]
Beliebiges Zeichen innerhalb der angegebenen Menge
[^]
Beliebiges, nicht in der angegebenen Menge enthaltene Zeichen
|
Oder-Verknüpfung von Zeichen
\
Escape-Symbol, mit dessen Hilfe der folgende Ausdruck als Text interpretiert werden kann (\^ sucht etwa nach dem ^-Zeichen)
Tabelle 7.3: Mögliche reguläre Ausdrücke
98
Suchen Ausdruck
Bedeutung
{}
Sucht nach dem enthaltenen Ausdruck in exakter Notation
:i
Findet Groß- und Kleinbuchstaben sowie die Sonderzeichen $ und €, optional gefolgt von Groß- und Kleinbuchstaben, Ziffern und den Sonderzeichen $ und €
:q
Findet Zeichenfolgen in Anführungsstrichen
:b
Leerzeichen oder TAB
:z
Ganze Zahl (mehr als eine Ziffer möglich)
^n
n-malige Wiederholung des zuvor gehaltenen Ausdrucks
()
Gruppierung von Zeichen
\
Entspricht der n-ten Gruppierung von Zeichen, wobei die Zählung von 1 bis maximal 9 geht
~()
Schließt die enthaltene Zeichenkette aus. Findet nur Texte, in denen die angegebene Zeichenkette nicht enthalten ist.
:a
Findet alphanumerische Zeichen (Buchstaben, Ziffern)
:c
Findet einen beliebigen Buchstaben
:d
Findet eine einzelne Ziffer
:f
Findet eine einzelne hexadezimale Zahl
:w
Findet ganze Wörter
\e
Das Escape-Zeichen
\b
Findet das Rückschritt-Symbol
\t
Findet das Tabstopp-Zeichen
\x#### oder \u#### Findet ein Unicode-Zeichen anhand seines Zeichen-
codes Tabelle 7.3: Mögliche reguläre Ausdrücke (Forts.)
Da die Verwendung von regulären Ausdrücken nicht immer trivial ist, sollen in Tabelle 7.4 einige Beispiele deren Möglichkeiten illustrieren.
Express Edition
99
7 – Suche und Lesezeichen Suchbegriff
Treffer
tes*t
tet, test, tessst, ...
tes+t
test, tesst, tessst, ...
te.t
test, tert, teat, temt, ...
tes?t
tet, test
^tes?t
tet, test (nur, wenn der Begriff am Zeilenanfang steht)
tes*t$
tet, test, tessst, ... (nur, wenn der Begriff am Zeilenende steht)
Worte, die mit test enden
Findet test als Wort
test\ntest
Findet test test
test[ ]*test
testtest, test test, test test test, test test, ...
test[ ]@test
testtest, test test, test test, test test, ...
test[ ]#test
test test, test test, ...
te:it
test, te_t, te$t, te$1t, ...
te:c#t
test, teat, temt, ...
te:c*t
tesssst, tettttt, teasyrishat, ...
test~(er)
Findet test in testat oder testum, nicht jedoch in tester
teste^5r
testeeeeer
test:d^3
test123, test000, test456
:a@test
1test, 0test, ...
{test}|{tast}er@ teste, taste, tester, taster test, taste
Tabelle 7.4: Beispiele für reguläre Ausdrücke bei der Suche
100
Lesezeichen
Hinweis Die Verwendung regulärer Ausdrücke ist – wie Sie den obigen Beispielen bereits entnehmen konnten – nicht immer ganz einfach hinsichtlich des Verstehens der Ausdrücke. Hier sollten Sie gegebenenfalls ein wenig Geduld mit sich selbst aufbringen und möglicherweise zuvor genau definieren, welche Positionen Sie finden möchten. Eine gute Vorarbeit kann an dieser Stelle bei der Formulierung der Suchkriterien wahre Wunder wirken.
7.3 Lesezeichen Einmal ermittelte Fundstellen können Sie mit Hilfe der Lesezeichen-Funktionalität bequem markieren und später wiederfinden. Klicken Sie zu diesem Zweck auf die Schaltfläche LESEZEICHEN des SUCHEN-Dialogs. Automatisch werden an allen Stellen im Code mit Lesezeichen markiert. Leider fehlt der Express Edition das komfortable LESEZEICHEN-FENSTER der kostenpflichtigen Entwicklungsumgebungen. Hier müssen Sie sich mit der Navigation über die Menüleiste TEXT-EDITOR begnügen, die Sie über ANSICHT | SYMBOLLEISTEN | TEXT-EDITOR aktivieren können (Abbildung 7.5).
Abb. 7.5: Symbolleiste Text-Editor mit Lesezeichen-Schaltflächen
Die Symbolleiste TEXT-EDITOR bietet auf der rechten Seite sechs Schaltflächen für die Arbeit mit Lesezeichen. Von links nach rechts erschließen diese folgende Tätigkeiten: 쐌 Lesezeichen für die aktuelle Zeile ein- und ausschalten (ein vorhandenes Lesezeichen wird gelöscht, ist kein Lesezeichen vorhanden, wird eines angelegt) 쐌 Zum vorherigen Lesezeichen bewegen 쐌 Zum nächsten Lesezeichen bewegen 쐌 Zum vorherigen Lesezeichen einer im aktuellen Ordner befindlichen Datei navigieren 쐌 Zum nächsten Lesezeichen einer im aktuellen Ordner befindlichen Datei navigieren 쐌 Alle Lesezeichen in allen Dateien löschen Express Edition
101
7 – Suche und Lesezeichen
Da Lesezeichen auch über das Speichern von Dateien und Neustarts der Entwicklungsumgebung hinaus verfügbar bleiben, bieten Sie eine einfache Möglichkeit, interessante Fundstellen und Positionen im Quellcode zu markieren und verfügbar zu halten.
7.4 Suchen und Ersetzen Der SUCHEN UND ERSETZEN-Dialog ähnelt in seinem grundsätzlichen Aufbau dem SUCHEN-Dialog sehr stark. Tatsächlich stimmen die verfügbaren Optionen und die Suchbereiche komplett überein. Offensichtlichster Unterschied ist die zusätzliche Eingabemöglichkeit für den Ersetzungsbegriff (Abbildung 7.6).
Abb. 7.6: Suchen- und Ersetzen-Dialog
Der Aufruf des Suchen und Ersetzen-Dialogs erfolgt über BEARBEITEN | SCHNELLAlternativ können Sie die Tastenkombination (Strg)+(H) verwenden.
ERSETZUNG.
Die grundlegenden Optionen des SUCHEN UND ERSETZEN-Dialogs gleichen denen der Suche. Dies gilt ebenfalls für die erweiterten Suchoptionen und speziell auch die regulären Ausdrücke. Diesen soll jedoch etwas weiter unten noch einmal ein wenig Aufmerksamkeit gewidmet werden.
7.4.1
Vorgang durchführen, Ergebnisnavigation
Nach Eingabe von Such- und Ersetzungsbegriff (ein leerer Ersetzungsbegriff ist auch möglich und würde die entsprechenden Fundstellen löschen) können Sie die nächste Fundstelle über die Schaltfläche WEITERSUCHEN anspringen. Mit
102
Suchen und Ersetzen
Hilfe der Schaltfläche ERSETZEN können Sie dort die gewünschte Ersetzung vornehmen. Die Schaltfläche ALLE ERSETZEN ersetzt alle Vorkommnisse entsprechend der Suchoptionen mit der Ersetzung. Am Ende des Vorgangs wird ein Hinweisfenster eingeblendet, das Ihnen die Anzahl der vorgenommenen Ersetzungen anzeigt (Abbildung 7.7).
Abb. 7.7: VBE informiert Sie über die Anzahl der vorgenommenen Ersetzungen
Entfernen Sie das Häkchen vor der Option DIESE MELDUNG IMMER ANZEIGEN, werden Sie zukünftig von dieser Information verschont. In diesem Falle können Sie in der Statusleiste sehen, wie viele Ersetzungen vorgenommen worden sind. Möchten Sie die Meldung wieder aktivieren, können Sie dies über EXTRAS | OPTIONEN | UMGEBUNG | SUCHEN UND ERSETZEN | INFORMATIONSMELDUNGEN ANZEIGEN erreichen. Setzen Sie gegebenenfalls zuvor das Häkchen vor der Option ALLE EINSTELLUNGEN ANZEIGEN.
7.4.2
Ersetzen mit Hilfe regulärer Ausdrücke
Bereits weiter oben haben Sie reguläre Ausdrücke kennen gelernt. Dabei sind auch Gruppierungs- und Referenzierungsfunktionen erwähnt worden. Diese Funktionalitäten machen bei der reinen Suche zwar in einigen Fällen Sinn, spielen jedoch ihre wahre Stärke erst beim Ersetzen mit Hilfe regulärer Ausdrücke aus, denn so können bestimmte Wortelemente vollautomatisch in die Ersetzung übernommen werden. Tabelle 7.5 zeigt einige Beispiele für das Suchen und Ersetzen mit Hilfe regulärer Ausdrücke.
Express Edition
103
7 – Suche und Lesezeichen Suchen
Ersetzen
Ergebnis
Tester testatur -> Testatur test -> Test
({test})(e@)
Tast\2
test -> Tast teste -> Taste testat -> Tastat
test~(er)
Tast
test -> Tast teste -> Taste tester -> tester
[a-e]
i
test -> tist Taste -> Tisti Essen -> issin
Test tast -> Test tastatur -> Testatur
Test tester -> tester test123 -> Test123
test tester -> tester test123 -> Test123
Tabelle 7.5: Beispiele für das Suchen und Ersetzen mit Hilfe regulärer Ausdrücke
Auch und gerade beim Ersetzen mit Hilfe regulärer Ausdrücke sollten Sie sich gegebenenfalls ein wenig Zeit geben, sich an die Syntax und deren Möglichkeiten zu gewöhnen. Ist Ihnen dies jedoch gelungen, eröffnen sich interessante Möglichkeiten, gerade komplexe Vorgänge schnell zu erledigen.
7.5 Suchen in Dateien Die Schaltfläche SCHNELLSUCHE erlaubt über den nach unten gerichteten Pfeil, auch eine Suche in Dateien vorzunehmen (Abbildung 7.8).
104
Suchen in Dateien
Abb. 7.8: Suche in Dateien aktivieren
Bei dieser Art der Suche entsprechen die grundlegenden Optionen der einer gewöhnlichen Suche. Der Suchvorgang ist jedoch nicht nur auf Dateien im aktuellen Projekt beschränkt, sondern kann auf Dateien an beliebigen Stellen und mit beliebigen Dateiendungen ausgedehnt werden.
7.5.1
Suchordner festlegen
Die gewünschte Ausdehnung des Suchvorgangs können Sie mit Hilfe der neben dem Suchort neu erschienenen Schaltfläche zur Auswahl im Dateisystem festlegen. Klicken Sie diese Schaltfläche an, erscheint ein Dialog analog zu Abbildung 7.9. Innerhalb dieses Dialogs können Sie festlegen, wo gesucht werden soll. Dabei können Sie auf Ebene von Laufwerken und Ordnern suchen. Markieren Sie die gewünschten Laufwerke und klicken den nach rechts gerichteten Pfeil an, werden diese in den Bereich AUSGEWÄHLTE ORDNER übernommen. Elemente dieses Bereichs können Sie über ein Markieren und anschließendes Klicken auf den nach links gerichteten Pfeil aus der Auswahl entfernen. Ebenfalls können Sie Objekte mit Hilfe von Doppelklicken auf Laufwerke und Ordner öffnen und dort enthaltene Ordner auswählen. Sie können so ganz gezielt festlegen, wo gesucht werden soll. Mit Hilfe der Aufwärts-Schaltfläche neben dem Feld VERFÜGBARE ORDNER können Sie stets auf die jeweils übergeordnete Ebene zurückkehren.
Express Edition
105
7 – Suche und Lesezeichen
Abb. 7.9: Festlegung der Suchordner
Sobald Sie Ihre Auswahl abgeschlossen haben, können Sie diese mit Hilfe der Schaltfläche OK übernehmen. Damit Sie den Auswahlprozess nicht immer wieder erneut durchlaufen müssen, können Sie im Feld ORDNERSATZ einen Namen für die von Ihnen getroffene Auswahl vergeben. Dieser wird nach einem Klick auf die Schaltfläche ÜBERNEHMEN gespeichert und steht auch nach einem Neustart zur Verfügung (Abbildung 7.10). Ordnersätze sind jedoch projektgebunden. Einen bereits vorhandenen Ordnersatz können Sie über den rechts neben dem Feld ORDNERSATZ befindlichen, nach unten gerichteten Pfeil anzeigen lassen und auswählen. Möchten Sie den Ordnersatz nicht verwenden, sondern löschen, können Sie dies über die gleichnamige Schaltfläche erreichen. Ebenfalls können Sie hier die Bestandteile des Ordnersatzes editieren und die vorgenommenen Änderungen per ÜBERNEHMEN sichern.
106
Suchen in Dateien
Abb. 7.10: Festlegen und Bearbeiten eines Ordnersatzes
7.5.2
Weitere Optionen
Innerhalb des Suchen-Dialogs können Sie vor dem Ausführen des Suchvorgangs mit Hilfe der Option UNTERGEORDNETE ORDNER DURCHSUCHEN festlegen, ob nur die aktuell ausgewählten Ordner oder auch deren untergeordnete Ordner (bis hin zur tiefsten Ebene) durchsucht werden sollen. Beachten Sie bitte, dass ein Suchvorgang beim Aktivieren dieser Option unter Umständen sehr lange dauern und viele Systemressourcen binden kann. Ebenfalls können Sie mit Hilfe der Option ERGEBNISBEREICH | NUR DATEINAMEN festlegen, ob im Ergebnisbereich nur Dateinamen von Dateien mit Übereinstimmungen oder auch Auszüge aus diesen Dateien mit jeweiligen Zeilen angezeigt werden sollen. Diese Option sollten Sie dann aktivieren, wenn Sie mit sehr vielen Suchergebnissen in unterschiedlichen Dateien rechnen oder später innerhalb der Dateien ohnehin gezielter suchen möchten.
ANZEIGEN
7.5.3
Vorgang durchführen, Ergebnisnavigation
Die Betätigung der Schaltfläche ALLE SUCHEN startet die Suche im Hintergrund. Gefundene Suchergebnisse werden schon im gleichnamigen Fenster eingeblendet (Abbildung 7.11). Express Edition
107
7 – Suche und Lesezeichen
Abb. 7.11: Anzeige der Suchergebnisse einer Suche in Dateien
Mit Hilfe der Schaltflächen innerhalb des Ergebnisfensters können Sie zwischen den einzelnen Suchergebnissen navigieren oder alle Suchergebnisse löschen. Ebenfalls haben Sie hier die Möglichkeit, eine bereits laufende Suche abzubrechen.
7.6 Suchen und Ersetzen in Dateien Das Suchen und Ersetzen in Dateien funktioniert analog zum gewöhnlichen Suchen in Dateien und dem bereits weiter oben besprochenen Ersetzen. Auch hier können Sie festlegen, wo gesucht werden soll oder Ersetzungen mit Hilfe regulärer Ausdrücke vornehmen. Den Dialog zum SUCHEN UND ERSETZEN IN DATEIEN (Abbildung 7.12) erreichen Sie über BEARBEITEN | SCHNELLERSETZUNG oder über die Tastenkombination (Strg)+(H). Anschließend wählen Sie mit Hilfe der nach unten gerichteten Pfeilschaltfläche neben SCHNELLERSETZUNG die Option IN DATEIEN ERSETZEN aus. Zusätzlich zu den bereits bekannten Möglichkeiten und Optionen des Suchens in Dateien und des bereits besprochenen Ersetzens können Sie über die Option ERGEBNISBEREICH | NACH DEM ERSETZEN, GEÄNDERTE DATEIEN GEÖFFNET LASSEN festlegen, ob geänderte Dateien in der Entwicklungsumgebung angezeigt werden sollen oder ob dies unterbleiben soll. Sie haben so die Möglichkeit, vorgenommene Änderungen über die Funktionalitäten der Visual Basic Express Edition rückgängig zu machen. Das Aktivieren dieser Option kostet jedoch Ressourcen und führt im schlechtesten Fall zu einer schier unüberschaubaren Menge an geöffneten Dateien.
108
Suchen und Ersetzen in Dateien
Abb. 7.12: Dialog zum Suchen und Ersetzen in Dateien
7.6.1
Vorgang durchführen, Ergebnisnavigation
Mit Hilfe der Schaltfläche WEITERSUCHEN navigieren Sie zur nächsten Fundstelle. Dabei wird die entsprechende Datei in der Entwicklungsumgebung geöffnet und die Fundstelle innerhalb der Datei markiert. Die Schaltfläche ERSETZEN führt die definierte Ersetzung aus. Möchten Sie in einer Datei keine weiteren Ersetzungen vornehmen, können Sie dies über Schaltfläche DATEI ÜBERSPRINGEN kundtun. Die Anzeige springt dann zur nächsten Fundstelle in einer anderen Datei weiter. Die Schaltfläche ALLE ERSETZEN nimmt vollautomatisch die gewünschten Ersetzungen vor.
Hinweis Beachten Sie, dass bei Nichtaktivieren der Option ERGEBNISBEREICH | NACH DEM ERSETZEN, GEÄNDERTE DATEIEN GEÖFFNET LASSEN keine Möglichkeit besteht, vorgenommene Änderungen rückgängig zu machen!
Express Edition
109
7 – Suche und Lesezeichen
7.7 Symbolsuche Die SYMBOLSUCHE (Abbildung 7.13) ist die letzte Art der Suche, die zur Verfügung steht. Sie kann über BEARBEITEN | SYMBOL SUCHEN, die Tastenkombination (Alt)+(F12) oder die Suchtypen-Auswahl des Suchfensters aktiviert werden.
Abb. 7.13: Symbolsuche
Der Zweck der Symbolsuche besteht darin, Objekte (Klassen, Assemblierungen, Schnittstellen) oder Elemente (Methoden, Variablen, Eigenschaften, Ereignisse) zu finden. Sie kann zu diesem Zweck automatisch die Referenzen des aktuellen Projekts in die Suche einbeziehen. Den gewünschten Suchbegriff geben Sie im Eingabefeld SUCHEN NACH an. Beim Start wird in diesem Feld automatisch der Begriff eingegeben, über dem sich der Cursor in der Entwicklungsumgebung beim Aufruf der Suche befindet. Über den nach unten gerichteten Pfeil können Sie alternativ auch einen der letzten zwanzig Suchbegriffe auswählen.
7.7.1
Komponenten definieren
Mit Hilfe der Option SUCHEN IN können Sie festlegen, welche Komponenten in die Suche einbezogen werden sollen. Tabelle 7.6 listet die zur Verfügung stehenden Optionen auf.
110
Symbolsuche Einstellung
Bedeutung
Alle Komponenten
Beinhaltet alle Komponenten des .NET Framework und des aktuellen Projekts, sowie im aktuellen Projekt ggf. referenzierte Komponenten von Drittanbietern
.NET-Framework
Beschränkt die Anzeige auf Komponenten des .NET Framework. Hier werden keine Komponenten von Drittanbietern eingeblendet. Ebenfalls sind die Komponenten des eigenen Projekts nicht sichtbar.
Eigene Projektmappe
Beschränkt die Anzeige auf alle Komponenten, die in der Projektmappe verwendet oder referenziert werden
Benutzerdefinierter Komponentensatz (Objektbrowser)
Beinhaltet nur die Komponenten, die im Objektbrowser einem benutzerdefinierten Komponentensatz hinzugefügt worden sind (siehe Kapitel 11)
Benutzerdefinierter Komponentensatz (Symbolsuche)
Beinhaltet nur die Komponenten, die in der Symbolsuche einem benutzerdefinierten Komponentensatz hinzugefügt worden sind
Tabelle 7.6: Optionen zur Festlegung der Komponenten, auf die sich die Symbolsuche erstrecken soll
Die Schaltfläche neben der Komponentenauswahl erlaubt es, spezifisch zu definieren, welche Komponenten in die Suche einzubeziehen sind und somit einen benutzerdefinierten Komponentensatz zu erstellen. Dies geschieht auf Ebene von Assemblierungen, COM-Komponenten oder Projekten (Abbildung 7.14). Ebenfalls können Sie Assemblierungen im Bereich DURCHSUCHEN explizit laden oder im Bereich AKTUELL kürzlich verwendete Komponenten auswählen. Über ein Markieren einer Komponente und Betätigen der Schaltfläche HINZUFÜGEN oder einen Doppelklick nehmen Sie die Komponente in den Komponentensatz auf. Aufgenommene Komponenten werden im Bereich AUSGEWÄHLTE PROJEKTE UND KOMPONENTEN angezeigt. Markieren Sie hier eine Komponente und betätigen die Schaltfläche ENTFERNEN oder führen einen Doppelklick auf die Komponente aus, wird diese der Auswahl entnommen.
Express Edition
111
7 – Suche und Lesezeichen
Abb. 7.14: Erstellen eines benutzerdefinierten Komponentensatzes
Ein Klick auf die Schaltfläche OK übernimmt den Komponentensatz in die Auswahl und speichert ihn gleichzeitig, so dass der Vorgang beim nächsten Aufruf unter Umständen deutlich abgekürzt werden kann.
Hinweis Es ist nicht möglich, unterschiedliche Komponentensätze zu definieren und etwa über den Namen zu verwalten.
7.7.2
Weitere Suchoptionen
Die Symbolsuche stellt eigene Suchoptionen bereit, die es erleichtern sollen, die Ergebnisse der Suche besser einzuschränken. Im Bereich SUCHOPTIONEN können Sie deshalb festlegen, welche Art der Übereinstimmung erreicht werden muss.
112
Symbolsuche
Zur Auswahl stehen folgende Optionen: 쐌 GANZES WORT: Der Suchbegriff muss ein eigenständiger Objekt- oder Elementname sein. 쐌 WORTANFANG: Der Suchbegriff muss am Anfang eines Objekt- oder Elementnamens stehen. 쐌 UNTERGEORDNETE ZEICHENFOLGE: Der Suchbegriff muss an beliebiger Stelle im Objekt- oder Elementnamen vorkommen. Mit Hilfe der Option GROß- / KLEINSCHREIBUNG BEACHTEN können Sie festlegen, ob der Suchbegriff in exakt der angegebenen Schreibweise gefunden werden soll.
7.7.3
Vorgang durchführen, Ergebnisnavigation
Die Schaltfläche ALLE SUCHEN führt die Suche nach dem gewünschten Symbol aus. Sämtliche Treffer werden in einem eigenen Ergebnisfenster dargestellt (Abbildung 7.15).
Abb. 7.15: Ergebnisse der Symbolsuche
Express Edition
113
7 – Suche und Lesezeichen
Führen Sie hier einen Doppelklick auf einen Treffer aus, wird zu dessen Definition gesprungen. Handelt es sich dabei um ein Element des aktuellen Projekts, wird die entsprechende Stelle im Quellcode angezeigt. Anderenfalls erfolgt die Darstellung weiterer Informationen im Objektbrowser (siehe Kapitel 11).
7.8 Fazit Bereits die Express Edition bietet ausgefeilte Such- und Ersetzungsmechanismen. Insbesondere die Möglichkeit, Platzhalter und reguläre Ausdrücke zu verwenden, steigert den potentiellen Nutzen enorm. Allerdings ist die Arbeit gerade mit regulären Ausdrücken anfangs ungewohnt und stellenweise durchaus komplex. Hier hilft es, sich möglichst genau zu definieren, wonach gesucht und wie ersetzt werden soll.
114
8
AutoCompletion, IntelliSense und XML-Kommentare
Die in diesem Kapitel besprochenen Themen sind nicht primär für das Erstellen von Programmen notwendig. Sie erleichtern es jedoch ungemein, denn mit ihrer Hilfe wird die notwendige Tipparbeit deutlich verringert. Kommentare nehmen dabei noch eine weitere Sonderstellung ein, denn sie sind kein spezielles Feature der Express Edition, sondern Sprachbestandteil. Jedoch können XML-Kommentare auf Ebene von Objekten und Elementen viele nützliche Informationen transportieren und verdienen es deshalb durchaus, an dieser Stelle besprochen zu werden.
8.1 Kommentare Wenn an dieser Stelle von Kommentaren die Rede ist, sind nicht die gewöhnlichen Kommentare innerhalb von Methoden, sondern die seit .NET 2.0 auch in Visual Basic unterstützten XML-Kommentare gemeint. Diese erlauben es, zusätzliche Informationen zu transportieren, die später in der Entwicklungsumgebung zusammen mit den Objekt- oder Elementnamen angezeigt werden. Auf diese Art kann besser auf Abhängigkeiten oder Zusammenhänge hingewiesen und beim Schreiben des Codes ein besseres Verständnis für die genutzten Funktionalitäten erzielt werden.
8.1.1
Definition von XML-Kommentaren
XML-Kommentare werden mit Hilfe von drei Apostrophen (''') definiert. Sie befinden sich stets direkt über dem Objekt, das sie näher beschreiben sollen. Ihr Einsatz ist nur auf Ebene von Elementen oder Objekten, nicht jedoch in Methoden sinnvoll. XML-Kommentare sind meist mehrzeilig aufgebaut. Sie strukturieren ihre Informationen innerhalb bestimmter, vorgegebener Elemente. Diese Elemente sind in XML-Notation verfasst – daher auch der Namensbestandteil XML. Die sinnvoll verwendbaren Elemente sind vorgegeben.
Express Edition
115
8 – AutoCompletion, IntelliSense und XML-Kommentare
Tabelle 8.1 zeigt die wichtigsten Elemente, die eingesetzt werden können. Element Beschreibung summary
Fasst den Zweck des Elements zusammen ''' <summary> ''' Dies ist die Zusammenfassung ''' Public Sub MacheWas()
c
Wird innerhalb eines summary-Elements verwendet und kennzeichnet den enthaltenen Text als Code ''' <summary> ''' Dies ist der Code '''
code
Umfasst Text, der mehrere Zeilen Code enthalten soll ''' ''' ''' ''' ''' ''' ''' '''
example
<summary> So sieht ein Beispielcode aus Dim a As Int32 = 0 a += 1 Console.WriteLine(a)
Kennzeichnet den enthaltenen Text als Beispieltext. Wird meist verwendet, um per code-Tag ausgezeichnete Inhalte zu beschreiben. ''' ''' ''' ''' ''' ''' ''' ''' '''
<summary> Hier kommt ein wenig <example>Beispielcode: Dim a As Int32 = 0 a += 1 Console.WriteLine(a)
Tabelle 8.1: Wichtige XML-Kommentare und deren Verwendung
116
Kommentare Element Beschreibung exception Kennzeichnet eine Ausnahme. Das Attribut cref gibt den Typ der
Ausnahme an. ''' ''' ''' ''' ''' ''' para
Kennzeichnet einen Absatz ''' ''' ''' ''' ''' ''' ''' '''
param
<summary> Dividiert zwei Zahlen voneinander. <exception cref="DivideByZeroException"> Wird geworfen, wenn als zweiter Parameter 0 übergeben wird. <summary> <para> Dies ist ein Absatz <para> Und hier kommt noch einer
Beschreibt einen Parameter. Das Attribut name gibt dessen Namen an. ''' <summary> ''' Dividiert zwei Zahlen voneinander ''' ''' <param name="a">Der erste Wert ''' <param name="b">Der Wert, durch den geteilt wird Public Function Divide( _ ByVal a As Integer, _ ByVal b As Integer) As Double
remarks
Definiert einen Anmerkungsbereich ''' ''' ''' ''' ''' '''
<summary> Dividiert zwei Zahlen voneinander Die klassische Form der Division.
Tabelle 8.1: Wichtige XML-Kommentare und deren Verwendung (Forts.)
Express Edition
117
8 – AutoCompletion, IntelliSense und XML-Kommentare Element Beschreibung returns
Beschreibt den Rückgabewert einer Funktion ''' ''' ''' ''' ''' '''
see
Verweist auf ein im aktuellen Kontext erreichbares Objekt. Der Parameter cref gibt an, was referenziert wird. ''' ''' ''' ''' ''' '''
seealso
<summary> Dividiert zwei Zahlen voneinander. Verwenden Sie die Methode <see cref="ValidateDivision" />, um zu sehen, ob die Operation zulässig ist.
Verweist analog zu see auf ein im aktuellen Kontext erreichbares Objekt, jedoch wird dieses im SIEHE AUCH-Abschnitt ausgegeben. Der Parameter cref gibt an, was referenziert wird. ''' ''' ''' ''' ''' '''
value
<summary> Dividiert zwei Zahlen voneinander Das Ergebnis der Operation (a/b).
<summary> Dividiert zwei Zahlen voneinander. <seealso cref="ValidateDivision" />
Beschreibt eine Eigenschaft ''' ''' ''' ''' ''' ''' '''
<summary> Zugriff auf den Quotienten Der Quotient, der im Code verwendet wird
Tabelle 8.1: Wichtige XML-Kommentare und deren Verwendung (Forts.)
Setzen Sie eines der Elemente ein, hat dies sofort Auswirkungen auf die Darstellung in der Entwicklungsumgebung. Bereits beim Tippen werden die von Ihnen vergebenen Informationen angezeigt (Abbildung 8.1).
118
Kommentare
Abb. 8.1: IntelliSense blendet erweiterte Informationen ein
8.1.2
Erstellen von Dokumentationsdateien
Beim Erstellen des Projekts wird im Release-Verzeichnis (\bin\Release) automatisch eine XML-Datei angelegt, die die Dokumentationsinformationen enthält. Diese Datei kann mit Hilfe eines externen Tools (etwa NDoc oder auch Doxygen) in ein menschenlesbares Format gebracht werden. Um NDoc, ein Open-Source-Projekt, einsetzen zu können, müssen Sie sich die aktuelle Version der Software besorgen. Erste Anlaufstelle sollte hier die offizielle Projekt-Homepage unter http://ndoc.sourceforge.net sein, die jedoch leider nur eine recht angestaubte Version zur Verfügung stellt. Die derzeit aktuellste Version 1.3.1 v16 können Sie unter der Adresse http://jonas.lagerblad.com/ blog/ herunterladen. Da Sie höchstwahrscheinlich nicht direkt an der Weiterentwicklung von NDoc teilnehmen möchten, reicht in jedem Fall die binäre Version aus. Diese müssen Sie lediglich entpacken und können dann NDocGui.exe aus dem Ordner Release ausführen (Abbildung 8.2).
Express Edition
119
8 – AutoCompletion, IntelliSense und XML-Kommentare
Abb. 8.2: Dokumentation per NDoc
Nach dem Start müssen Sie zunächst die zu dokumentierenden Assemblierungen laden. Klicken Sie dafür auf die Schaltfläche ADD und wählen Sie die Assemblierungen oder ausführbaren Dateien aus, die kommentiert werden sollen. Gegebenfalls müssen Sie noch festlegen, ob auch interne Elemente kommentiert werden sollen. Scrollen Sie zu diesem Zweck in den Bereich VISIBILITY der Einstellungen und setzen Sie den Eintrag DocumentInternals auf True. Das Ausgabeverzeichnis für die generierte Dokumentation legen Sie mit Hilfe der Option OutputDirectory im Bereich Documentation Main Settings fest. Nachdem Sie alle Einstellungen getroffen haben, können Sie die Dokumentation per (Strg)+(ª)+(B) oder über den Menüpunkt DOCUMENTATION | BUILD erzeugen lassen. Wenn Sie den MSDN-Stil wählen, wird eine Dokumentation wie in Abbildung 8.3 erzeugt. 120
IntelliSense und AutoCompletion
Abb. 8.3: Die erzeugte Dokumentation im Browser
8.2 IntelliSense und AutoCompletion Der Begriff AutoCompletion bezeichnet die automatische Vervollständigung von Variablennamen, Typen, Bezeichnern und Methoden anhand der in einer Datenbank vorhandenen Informationen. Diese sind meist recht unstrukturiert, so dass auch Informationen dargestellt werden, die im aktuellen Kontext keine Rollen spielen. An dieser Stelle kommt IntelliSense ins Spiel. Diese Technologie erweitert die AutoCompletion-Funktionalität dahin gehend, dass nur noch die im aktuellen Kontext und für die jeweils verwendete Sprache relevanten Informationen dargestellt werden. Der Einsatz von IntelliSense erlaubt es, den Schreibaufwand beim Programmieren deutlich zu verringern. Wann immer Sie Variablennamen oder Typen schreiben sowie auf Methoden oder Objekteigenschaften zugreifen möchten, können Sie nach wenigen Buchstaben die Tastenkombination (Strg)+(Leertaste) drücken. Ist dem System klar, was Sie meinen, wird Ihre Eingabe sofort ergänzt. Wenn es dagegen mehrere Auswahlmöglichkeiten gibt, können Sie aus einem Drop-Down-Menü auswählen (Abbildung 8.4). Tippen Sie bei geöffneter DropDown-Liste weiter, wird deren Inhalt immer weiter an Ihre Eingabe angepasst. Sobald Sie ein passendes Element angezeigt bekommen, können Sie dieses markieren und per Eingabetaste übernehmen. Express Edition
121
8 – AutoCompletion, IntelliSense und XML-Kommentare
Abb. 8.4: AutoCompletion und IntelliSense für Objekte und Variablen
Gleiches gilt, wenn Sie mit einer Objektinstanz arbeiten: Nach Eingabe des Instanznamens und des Punktes können Sie über das Drop-Down-Menü auf die Eigenschaften und Methoden der Instanz zugreifen (Abbildung 8.5).
Abb. 8.5: AutoCompletion auf Ebene von Methoden und Eigenschaften
122
IntelliSense und AutoCompletion
Im Optionsmenü (Abbildung 8.6) können Sie unter TEXTEDITOR | ALLGEMEIN das Verhalten von AutoCompletion und IntelliSense auf Ebene von Methoden und Eigenschaften ändern. Verantwortlich dafür ist die Einstellung MEMBER AUTOMATISCH AUFLISTEN. Ist diese deaktiviert, wird kein automatisches IntelliSense nach dem Punkt zwischen Objektinstanz und den anzusprechenden Membern vorgenommen. In diesem Fall muss stets die Tastenkombination (Strg)+ (Leertaste) gedrückt werden. Aktivieren Sie die Option, werden nach dem Tastendruck die Member automatisch angezeigt. An gleicher Stelle lässt sich mit Hilfe der Option PARAMETERINFORMATIONEN die Anzeige der Parameter für Methoden und Prozeduren ein- bzw. ausschalten. Das Deaktivieren sorgt dafür, dass die Parameterliste nicht angezeigt wird.
Abb. 8.6: In den Optionen lässt sich konfigurieren, wie Parameter- und Memberinformationen angezeigt werden
Express Edition
123
8 – AutoCompletion, IntelliSense und XML-Kommentare
8.3 Fazit XML-Kommentare helfen Ihnen und anderen, mit Klassen, Methoden und Elementen zu arbeiten. Sie können mit Hilfe externer Tools, etwa NDoc oder Doxygen in einem menschenlesbaren Format ausgegeben und anderen damit als so genannte API-Dokumentation zur Verfügung gestellt werden. Gleichzeitig hilft eine sorgfältige Kommentierung auch beim Entwickeln, denn die Kommentare und Anmerkungen werden von der Entwicklungsumgebung auf Wunsch eingeblendet. Diese Einblendungen sorgen zusammen mit AutoCompletion und IntelliSense dafür, dass auch der Tippaufwand verringert wird. Viele Möglichkeiten also, deren Nutzung jede Menge Sinn macht.
124
9
Debugging
Debugging ist sehr hilfreich, um Fehler im Code zu finden. Wer einmal seinen Code schrittweise durchlaufen und analysiert hat, möchte diese Funktionalität nicht mehr missen. Das Grundprinzip ist, dass an nahezu beliebigen Stellen im Code so genannte Haltepunkte gesetzt werden können. An diesen Stellen wird die Ausführung des Programms unterbrochen und Sie haben die Möglichkeit, die Werte einzelner Variablen gezielt unter die Lupe zu nehmen. Mit Hilfe des DIREKTFENSTERS können Sie sogar Manipulationen vornehmen. Ebenfalls besteht die Möglichkeit, die Ausführung an eine weiter oben stehende Stelle zurückzusetzen.
9.1 Haltepunkte setzen und entfernen Das Setzen eines Haltepunkts gestaltet sich sehr einfach: Entweder klicken Sie an der gewünschten Stelle auf die linke Seite des aktiven Fensters oder Sie positionieren den Cursor in die gewünschte Zeile und drücken die Taste (F9). Eine weitere Möglichkeit besteht darin, den Haltepunkt per DEBUGGEN | HALTEPUNKT UMSCHALTEN zu aktivieren.
Abb. 9.1: Eine Zeile ist als Haltepunkt gekennzeichnet
Express Edition
125
9 – Debugging
Sobald Sie einen Haltepunkt gesetzt haben, wird die betreffende Zeile rot markiert (Abbildung 9.1). Einen bereits gesetzten Haltepunkt können Sie auf die gleiche Art wieder entfernen, wie Sie ihn gesetzt haben: Klicken Sie auf der linken Seite auf den roten Punkt oder drücken Sie in der entsprechenden Zeile die Taste (F9) oder nutzen Sie DEBUGGEN | HALTEPUNKT UMSCHALTEN.
9.2 Debuggen starten Bei der Ausführung eines Programms werden zwei Ausführungsmodi unterschieden: Debug und Release. Letzteres ist ein Modus, in dem Haltepunkte ignoriert werden – dafür läuft der Code schneller und es werden keine Interna der Applikation in spezielle Log-Dateien geschrieben. Beim Debuggen ist jedoch die Ausführung im Debug-Modus interessant. Diesen aktivieren Sie, indem Sie innerhalb der Entwicklungsumgebung auf den grünen Pfeil in der Symbolleiste klicken, die Taste (F5) drücken oder DEBUGGEN | DEBUGGEN STARTEN aus dem Menü auswählen. Die Applikation wird nun wie gewohnt laufen – mit dem einzigen Unterschied, dass sie an einem Haltepunkt nicht weiter läuft. Wird eine derartige Position erreicht, wird diese Gelb markiert und die Ausführung stoppt (Abb. 9.2).
Abb. 9.2: Die Programmausführung wurde an einem Haltepunkt gestoppt
126
Werte einsehen
Nun haben Sie die Möglichkeit, die Werte von Variablen einzusehen, im DIREKTFENSTER Operationen vorzunehmen oder die Aufrufhistorie einzusehen. Ebenfalls können Sie das Programm von der aktuellen Position aus schrittweise fortsetzen (Einzelschritt oder Prozedurschritt) oder die Programmausführung bis zum nächsten Haltepunkt fortsetzen zu lassen.
9.3 Werte einsehen Um den Wert einer Variablen einzusehen, fahren Sie mit dem Mauszeiger über die Variable und halten Sie ihn dort kurz. In einem Tooltip erscheint der Wert der Variablen. Eine alternative und auch bequemere Möglichkeit besteht in der Verwendung der zwei Informationsfenster LOKAL (DEBUGGEN | FENSTER | LOKAL) und ÜBERWACHEN (DEBUGGEN | FENSTER | LOKAL). Ersteres gibt einen Überblick über die im aktuellen Kontext vorhandenen Variablen und deren Werte, während Letzteres alle überwachten Variablen enthält, auch wenn diese im aktuellen Kontext nicht verfügbar sein sollten. Um eine Variable zum Überwachungsfenster hinzuzufügen, führen Sie einen Rechtsklick auf diese Variable aus und wählen Sie die Option ÜBERWACHUNG HINZUFÜGEN aus dem Kontextmenü aus. Anschließend befindet sich die Variable im Überwachungsfenster und kann dort eingesehen werden. Wollen Sie sich nur kurz über eine Variable informieren, ohne diese dauerhaft in die Überwachung einzubeziehen, können Sie dies durch einen Rechtsklick und die Auswahl der Option SCHNELLÜBERWACHUNG aus dem Kontextmenü erreichen. Wie auch immer Sie sich über eine Variable informieren möchten: Rechts neben deren Namen und/oder Wert befindet sich ein kleines Lupen-Symbol, das Ihnen die Anzeige des enthaltenen Wertes in Text-, XML- oder HTML-Form erlaubt. Sie können dies mit Hilfe des nach unten gerichteten Pfeils neben dem LupenSymbol umschalten. Handelt es sich bei der Variablen um eine Objektinstanz, ist links neben deren Namen ein Plus-Zeichen verfügbar. Dieses erlaubt den Zugriff auf die aus dem aktuellen Kontext heraus erreichbaren Eigenschaften der Variablen. Diese sind in Form einer Baumstruktur angeordnet und können gegebenenfalls ihrerseits noch weiter aufgeklappt werden (Abb. 9.3).
Express Edition
127
9 – Debugging
Abb. 9.3: Detailansicht eines überwachten Wertes
9.4 Aktionen vornehmen Ist die Code-Ausführung unterbrochen, können Sie mit Hilfe des DIREKT-Fensters (DEBUGGEN | FENSTER | DIREKT) weitere Operationen vornehmen. Tabelle 9.1 zeigt einige mögliche Operationen. Aufgabe
Beispiel
Auswertung eines Ausdrucks
? a+b
Auswerten des Wertes einer Variablen
?a
Ausführen eines Befehls / einer Operation der Entwicklungsum- > help gebung Tabelle 9.1: Mögliche Aktionen im Direktfenster
128
Ausführungsposition festlegen
Um beispielsweise den Wert, der durch die Eigenschaft VALUE repräsentiert wird, einzusehen, können Sie die Anweisung ? Me.Value
im Direktfenster eingeben. Anschließend erhalten Sie eine Ausgabe analog zu Abbildung 9.4.
Abb. 9.4: Ausgabe eines Werts im Direktfenster
9.5 Ausführungsposition festlegen Bei angehaltener Code-Ausführung haben Sie ebenfalls die Möglichkeit, die Code-Ausführung an einer anderen Stelle fortsetzen zu lassen. Dies kann sinnvoll sein, wenn Sie etwa über das DIREKT-Fenster einen Wert geändert haben und nun überprüfen möchten, ob Ihre Applikation das gewünschte Verhalten zeigt.
Hinweis Die Ausführungsposition kann nur nach oben, nicht nach unten verschoben werden. Ebenfalls ist ein methodenübergreifendes Verschieben nicht möglich. Um die Ausführungsposition zu verändern, klicken Sie auf den gelben Pfeil, der die aktuelle Ausführungsposition kennzeichnet und ziehen diesen an die gewünschte Stelle im Code. Dort lassen Sie die Maustaste los – sollte die Ausführung an der gewünschten Stelle möglich sein, wird die gelbe Markierung an die gewählte Stelle verschoben. Ist dem nicht so, erkennen Sie dies bereits vor dem Loslassen an einem entsprechenden Symbol.
9.6 Aufrufliste Die Aufrufliste einer Methode können Sie einsehen, indem Sie innerhalb der Methode oder der Eigenschaft einen Haltepunkt setzen und beim Erreichen dieses Haltepunkts in das Fenster AUFRUFLISTE (DEBUGGEN | FENSTER | AUFRUFLISTE)
Express Edition
129
9 – Debugging
wechseln. Die aktuelle Position ist in der Aufrufliste markiert und die darunter dargestellten Methoden bezeichnen die jeweils aufrufenden Methoden in umgekehrter Reihenfolge ihres Durchlaufens – die Methode, die die aktuelle Methode aufgerufen hat, steht direkt unterhalb der aktuellen Methode. Deren Aufrufmethode ist darunter dargestellt und so weiter. Klicken Sie die jeweilige Methode an, ist die Position, von der aus die folgende Methode aufgerufen worden ist, Grün gekennzeichnet. Sie können auch an dieser Stelle die Werte der jeweils lokal vorhandenen Variablen einsehen. Abbildung 9.5 zeigt die Aufrufliste einer Methode und eine zuvor durchlaufende Methode, die über das AUFRUFLISTE-Fenster angezeigt worden ist.
Abb. 9.5: Ansicht der aufrufenden Methode und eines Werts
9.7 Einzel- oder Prozedurschritte Generell haben Sie zwei Möglichkeiten, sich während des Debuggings fortzubewegen: im Einzelschritt- oder im Prozedurschritt-Verfahren. Ersteres führt jede Anweisung einzeln aus, während die zweite Variante der Navigation untergeordnete Prozeduren zwar durchläuft, jedoch nicht zur Anzeige bringt. Sie können so das Debuggen von Hilfscode oder Eigenschaften vermeiden. 130
Ausnahmen konfigurieren
Die Fortbewegung im Einzelschritt können Sie per Tastatur oder Maus aktivieren. Mögliche Aktivierungsvarianten sind der Aufruf aus dem Menü via DEBUGGER | EINZELSCHRITT, das Klicken auf das entsprechende Symbolleisten-Element oder der Druck auf die Taste (F8). Anschließend wird die nächste Anweisung ausgeführt und danach wartet der Debugger auf das Auslösen der nächsten Aktion. Auf diese Weise können Sie sich Schritt für Schritt durch den Code bewegen und diesen dabei genau inspizieren und analysieren. Unter Umständen kann eine Fortbewegung im Einzelschritt-Verfahren sehr lästig werden, speziell wenn die Verschachtelungstiefe recht hoch ist. Aus diesem Grund gibt es ebenfalls die Möglichkeit, Code auszuführen, dabei jedoch untergeordnete Methoden, Prozeduren und Eigenschaften nicht im Einzelschritt-Verfahren zu betrachten. Drücken Sie vor der Ausführung der Anweisung die Tastenkombination (ª)+(F8), so wird ein so genannter Prozedurschritt ausgeführt, der untergeordnete Prozeduren zwar ausführt, jedoch nicht im Debugger darstellt. Sie befinden sich somit nach Ausführung der Anweisung auf der gleichen Ebene wie zuvor und können ohne Unterbrechung weiter arbeiten. Wollen Sie automatisch bis zum Ende des Programms oder bis zum nächsten Haltepunkt gelangen, drücken Sie die Taste (F5).
9.8 Ausnahmen konfigurieren Standardmäßig ist VBE so konfiguriert, dass es im Falle von Ausnahmen nur dann mit der Programmausführung im Debug-Modus stoppt, wenn eine Ausnahme nicht behandelt worden ist. Sie können dieses Verhalten über den Menüpunkt DEBUGGEN | AUSNAHMEN konfigurieren und Ihren Bedürfnissen anpassen. Alternativ können Sie auch die Tastenkombination (Strg)+(Alt)+(E) nutzen. Im sich öffnenden Dialog (Abbildung 9.6) können Sie für jede einzelne Ausnahme festlegen, wie VBE sich verhalten soll. In den allermeisten Fällen ist es sinnvoll, hier das Stoppen bei einer nicht behandelten Ausnahme aktiviert zu lassen, da dies auch dem Verhalten in der Praxis entspricht. Denkbar und unter bestimmten Umständen sinnvoll erscheint es, die Ausführung ebenfalls zu stoppen, wenn bestimmte Ausnahmen ausgelöst und behandelt worden sind. Dies entspräche einem Haltepunkt innerhalb eines Catch-Blocks zur AusnahmenBehandlung, gilt jedoch projektweit.
Express Edition
131
9 – Debugging
Abb. 9.6: Konfiguration der zu behandelnden Ausnahmen
9.9 Debuggen programmatisch erzwingen Möchten Sie das Debuggen aus dem Code heraus erzwingen, etwa weil bestimmte Zustände eingetreten sind, können Sie dies mit Hilfe des Schlüsselwortes Stop erledigen. Die Programmausführung stoppt an der Stelle, der Debugger wird gestartet, und erlaubt es Ihnen, den Code im Einzel- oder Prozedurschritt-Verfahren zu durchlaufen oder die Werte der lokalen Variablen einzusehen. Die Anweisung Stop stellt somit eine Möglichkeit dar, ein bedingtes Debuggen zu implementieren. Das Visual Studio erlaubt es übrigens, bedingte Haltepunkte direkt zu setzen – diese Funktionalität ist Benutzern der VBE jedoch vorenthalten worden. Um beim Eintreffen einer bestimmten Bedingung den Debugger zu starten, könnten Sie einen Code wie in Listing 9.1 implementieren. Listing 9.1: Starten des Debuggers per Stop-Schlüsselwort ' Debuggen nur von 20-21 Uhr... If DateTime.Now.Hour = 20 Then ' Debugger starten Stop End If
132
Tastenkombinationen
Führen Sie diesen Code aus, wird zwischen 20 und 21 Uhr (genauer: bis 20:59:59 Uhr) der Debugger gestartet. Zu jeder anderen Tageszeit geschieht jedoch nichts.
Hinweis Das Starten des Debuggers per Stop-Anweisung funktioniert auch, wenn der Code bei einem Kunden läuft, denn das Stop-Schlüsselwort ist ein VisualBasic-Sprachbestandteil – anders als die im Code gesetzten Haltepunkte, die auf Ebene der VBE verwaltet und gehalten werden. Sie sollten deshalb vor einer Veröffentlichung des Codes sämtliche Vorkommen des Stop-Schlüsselworts entfernen oder auskommentieren.
9.10 Tastenkombinationen Das Debuggen funktioniert zwar hervorragend über die Menü-Elemente der IDE, kann jedoch meist schneller mit einigen wenigen Tastenkombinationen durchgeführt werden. Tabelle 9.2 zeigt die wichtigsten dieser Kombinationen. Tastenkombination Bedeutung (F5)
Startet das Debugging, fährt bis zum nächsten Haltepunkt oder bis zum Ende des Programms fort
(F8)
Einzelschritt-Debuggen
(ª)+(F8)
Prozedurschritt-Debuggen
(F9)
Haltepunkt definieren oder entfernen
(Strg)+(Alt)+(E)
Ausnahmen konfigurieren
(Strg)+(G)
Direktfenster anzeigen
Tabelle 9.2: Wichtige Tastenkombinationen beim Debuggen
9.11 Fazit Mit Hilfe des Debuggers können Sie Fehler besser finden, Werte von Variablen zur Laufzeit einsehen und genauer erkennen, an welchen Stellen sich Ihre Applikation wie verhält. Einige wenige Tastenkombinationen und das strategische Setzen von Haltepunkten sorgen somit für bessere und zuverlässigere Applikationen. Und auch wenn einige fortgeschrittene Funktionalitäten bei der VBE nicht enthalten sind – alles, was notwendig ist, funktioniert auch. Express Edition
133
10 Datenbank Die Verwaltung von Datenbanken mit Hilfe von VBE erlaubt es, sich mit existierenden Datenbankdateien zu verbinden und diese in eigenen Applikationen anzubinden. Wesentlich mehr an Funktionalität steht jedoch nicht zur Verfügung.
10.1 Datenbank-Explorer Dreh- und Angelpunkt bei der Arbeit mit Datenbanken ist der DATENBANKEXPLORER. Diesen finden Sie unter ANSICHT | DATENBANK-EXPLORER oder öffnen ihn über die Tastenkombination (Strg)+(Alt)+(S). Nach dem ersten Start ist der DATENBANK-EXPLORER noch leer. Um seine Funktionalität nutzen zu können, müssen Sie eine bereits existierende Datei öffnen oder eine neue Datenbankdatei anlegen.
Hinweis Der DATENBANK-EXPLORER kann nur mit Datenbankdateien betrieben werden. Es ist nicht möglich, direkt zu Datenbank-Instanzen zu verbinden und die dort definierten Datenbanken zu verwalten.
10.2 Datenbank öffnen oder anlegen Um eine bereits existierende Datenbankdatei zu öffnen oder eine neue Datenbankdatei anzulegen, führen Sie einen Rechtsklick in den DATENBANK-EXPLORER aus und wählen aus dem Kontextmenü die Option VERBINDUNG HINZUFÜGEN. Anschließend öffnet sich ein Dialog, mit dessen Hilfe Sie den zu verwendenden Datenanbieter festlegen können (Abbildung 10.1). Zur Auswahl stehen bei VBE zwei Datenquellen: 쐌 MICROSOFT ACCESS DATENBANKDATEI (Anbieter: .NET-Framework-Datenanbieter für OLE DB) 쐌 MICROSOFT SQL SERVER DATENBANKDATEI (Anbieter: .NET-Framework-Datenanbieter für SQL Server)
Express Edition
135
10 – Datenbank
In Abhängigkeit vom gewünschten Leistungsspektrum Ihrer Applikation, der Art der Datenbearbeitung und der Lauffähigkeit auch auf älteren Systemen können Sie an dieser Stelle Ihre Auswahl treffen.
Hinweis Access Datenbankdateien empfehlen sich speziell, wenn Sie wenige Änderungen erwarten oder besonders großen Wert auf eine möglichst weit reichende Lauffähigkeit Ihrer Lösung auch ohne Installation eines zusätzlichen Datenbanksystems legen.
Hinweis Verwenden Sie eine SQL Server Datenbankdatei, wenn für Sie die Leistungsfähigkeit des Servers wichtig ist oder Sie regelmäßige und umfangreiche Änderungen erwarten können. SQL Server ist um ein Vielfaches mächtiger als Access, hat aber den Nachteil, dass zuvor eine Installation auf dem Clientsystem notwendig ist.
Abb. 10.1: Auswahl der Datenquelle und des Datenanbieters
Im nächsten Schritt können Sie die Datenbankdatei auswählen oder neu anlegen (Abbildung 10.2). Klicken Sie zu diesem Zweck auf die Schaltfläche DURCHSUCHEN und wählen Sie die gewünschte Datenbankdatei aus. Möchten Sie eine neue Datenbankdatei anlegen, wechseln Sie mit Hilfe des Dialogs in das gewünschte Verzeichnis und geben einen Dateinamen an.
136
Datenbank öffnen oder anlegen
Abb. 10.2: Auswahl der Datenbankdatei
Mit Hilfe der Schaltfläche ERWEITERT können Sie fortgeschrittene Verbindungsinformationen konfigurieren. Dies ist insbesondere dann von Sinn, wenn eine andere als die per Default verwendete SQL Server Express-Datenbank-Instanz .\SQLExpress verwendet werden soll. Ebenfalls können Sie hier mit Hilfe der Eigenschaft USER INSTANCE definieren, ob eine Datenbankinstanz nur im Rahmen des aktuellen Benutzerkontos oder eine bereits existierende Datenbankinstanz verwendet werden soll. Auch den zu verwendenden Benutzeraccount können Sie in diesem Dialog konfigurieren. Für gewöhnlich ist es mehr als ausreichend, mit dem aktuell angemeldeten Benutzerkontext auf die Datenbank zuzugreifen. In Ausnahmefällen kann es aber notwendig sein, im Kontext eines anderen Datenbankbenutzers mit mehr oder weniger Rechten zu arbeiten. Dies können Sie durch Auswahl der Option SQL SERVER BASIERENDE ANMELDUNG aktivieren. Die erfassten Verbindungsinformationen können Sie durch einen Klick auf die Schaltfläche VERBINDUNG TESTEN überprüfen. Dies macht jedoch nur für bereits bestehende Datenbankdateien Sinn, denn bei einer neu anzulegenden Datenbankdatei kann diese noch nicht existieren und der Verbindungsversuch wäre bereits im Vorfeld zum Scheitern verurteilt.
Express Edition
137
10 – Datenbank
Den eigentlichen Verbindungsaufbau (und das Anlegen einer neuen Datenbankdatei, soweit dies notwendig ist), nehmen Sie über die Schaltfläche OK vor. Im Erfolgsfall wird die neu eingerichtete Verbindung dem DATENBANK-EXPLORER hinzugefügt und kann zukünftig genutzt werden.
10.3 Auf die Datenbank zugreifen Der Zugriff auf eine bereits eingerichtete Datenbank geschieht, indem Sie den Knoten mit dem Namen der Datenbank im DATENBANK-EXPLORER erweitern. Wurde noch keine Verbindung hergestellt, versucht der Datenbankanbieter nun, auf die Datenbankdatei zuzugreifen und generiert im Misserfolgsfall eine entsprechende Fehlermeldung. Typische Misserfolgsfaktoren sind: 쐌 Mangelnde Berechtigungen: Der aktuell am System angemeldete Benutzer darf nicht auf die Datenbank zugreifen. Dies muss ggf. im SQL Server Management Studio im Bereich SICHERHEIT | ANMELDUNGEN konfiguriert werden, indem der Windows-Benutzeraccount der Benutzerliste hinzugefügt wird. 쐌 Fehlende Protokolle: Zumindest Shared Memory sollte als Protokoll sowohl auf Instanz- als auch auf Client-Ebene aktiviert sein. Sie können dies mit Hilfe des SQL Server Configuration Managers für beide Bereiche aktivieren. 쐌 Falsche Instanz verwendet: Per Default versucht VBE, eine Datenbankdatei über die Instanz .\SQLExpress zu öffnen. Dies wird auch dann versucht, wenn eine andere Instanz auf dem Server konfiguriert ist und / oder die SQLExpress-Instanz überhaupt nicht läuft. 쐌 Mangelnde Zugriffsrechte im Dateisystem: Damit eine Datei geöffnet werden kann, benötigt der Benutzer, in dessen Kontext der Datenbankzugriff durchgeführt werden soll, das Recht ÄNDERN im entsprechenden Verzeichnis. Sie können dies im Windows Explorer über einen Rechtsklick auf das Verzeichnis | EIGENSCHAFTEN | SICHERHEIT konfigurieren. Im Erfolgsfall erhalten Sie eine Übersicht einiger Datenbank-Objekte, namentlich Tabellen, Abfragen, gespeicherte Prozeduren und benutzerdefinierte Funktionen. Leider haben Sie beim Einsatz der VBE keine Möglichkeit, die Struktur oder die Einstellungen einer Datenbank zu ändern. Hier sind Sie auf externe Applikationen (Microsoft Access, SQL Server Management Studio und SQL Server Management Studio Express Edition) angewiesen.
138
Mit Daten arbeiten
Eine bereits existierende Verbindung können Sie auch wieder problemlos aus dem DATENBANK-EXPLORER entfernen: Markieren Sie zu diesem Zweck die Verbindung und betätigen Sie die (Entf)-Taste. Alternativ führen Sie einen Rechtsklick auf die Verbindung aus und wählen die Option LÖSCHEN aus dem Kontextmenü.
Hinweis Beim Löschen einer Verbindung wird die zugrunde liegende Datenbankdatei nicht physisch gelöscht, sondern VBE entfernt lediglich die DatenbankZugriffsinformationen aus seiner internen Liste. Ebenfalls möglich ist es, die Verbindung zur Datenbank zu trennen. Dies kann speziell bei einer Access-Datenbankdatei notwendig werden, wenn Sie an dieser Änderungen vornehmen wollen, was nicht möglich ist, solange eine weitere Verbindung zur Datenbank geöffnet ist. Führen Sie zum Trennen einer Datenbank einen Rechtsklick auf die Verbindung aus und wählen Sie aus dem Kontextmenü die Option VERBINDUNG TRENNEN. Anschließend kann die Datenbankdatei mit Access geöffnet und bearbeitet werden.
10.4 Mit Daten arbeiten Die Arbeit mit Daten beschränkt sich in VBE auf das Einfügen, Löschen und Ändern von Datensätzen. Ein Neuanlegen von Abfragen, Editieren von Datenbankschematas oder andere fortgeschrittene Operationen sind nicht möglich. Die einfachste Art, die Daten einer Tabelle auszugeben, besteht darin, einen Rechtsklick auf die Tabelle vorzunehmen und anschließend die Option TABELLENDATEN ANZEIGEN auszuwählen. Die Inhalte der Tabelle werden nun dargestellt und können bearbeitet, ergänzt und gelöscht werden. Das Ändern von Datensätzen ist sehr einfach bewerkstelligt: Ändern Sie in der jeweiligen Zeile die gewünschten Informationen und verlassen Sie die Zeile dann. Sobald der Fokus verloren geht, werden die vorgenommenen Änderungen in der Datenbank gespeichert. Zum Löschen von Datensätzen markieren Sie die entsprechenden Datensätze, führen einen Rechtsklick aus und wählen aus dem Kontextmenü die Option LÖSCHEN aus (Abbildung 10.3).
Express Edition
139
10 – Datenbank
Abb. 10.3: Löschen eines Datensatzes aus einer Tabelle
Nach der Bestätigung einer Sicherheitsabfrage wird der Datensatz entfernt (Abbildung 10.4).
Abb. 10.4: Das Löschen von Datensätzen muss bestätigt werden
Um einen neuen Datensatz einzufügen, wechseln Sie in die letzte Zeile der Datendarstellung und geben dort die gewünschten Informationen ein. Nachdem Sie die Zeile mit Hilfe der Richtungstasten verlassen haben oder eine andere Zeile der Ergebnisansicht den Fokus erhalten hat, wird der Datensatz gesichert.
140
Abfragedesigner und Abfragedesigner-Symbolleiste
10.5 Abfragedesigner und AbfragedesignerSymbolleiste Möchten Sie genauer bestimmen, welche Informationen im Ergebnisfenster angezeigt werden, können Sie den Abfragedesigner verwenden. Diesen erreichen Sie im DATENBANK-EXPLORER per Rechtsklick auf den Namen einer Datenbanktabelle und die Auswahl der Option NEUE ABFRAGE (Abbildung 10.5).
Abb. 10.5: Öffnen des Abfragedesigners
Alternativ können Sie seine Komponenten aus einem bereits geöffneten Ergebnisfenster über die stets eingeblendete ABFRAGEDESIGNER-Symbolleiste einblenden (Abbildung 10.6).
Abb. 10.6: Im Abfragedesigner können Komponenten ein- oder ausgeblendet werden
Tatsächlich ist ein Teil des ABFRAGEDESIGNERS (die Ergebnisansicht) stets sichtbar, wenn Sie mit dem Ergebnisfenster arbeiten. Die anderen Komponenten (SQL-Bereich, Diagramm-Bereich, Kriterien-Bereich) sind in der Standardansicht des Ergebnisbereichs lediglich ausgeblendet. Beim Öffnen des ABFRAGEDESIGNERS wird ein neues Fenster angezeigt, das die Auswahl der in die Abfrage einzubeziehenden Tabellen gestattet. Nachdem Sie diese Auswahl getroffen haben, können Sie die zu selektierenden Daten mit Hilfe des Kriterienbereichs oder des SQL-Bereichs definieren. Express Edition
141
10 – Datenbank
10.5.1 Diagrammbereich Im Diagrammbereich werden die Spalten und Verknüpfungen der jeweils aktuellen Tabellen dargestellt (Abbildung 10.7).
Abb. 10.7: Design einer Abfrage im Diagrammbereich
Mehrere Tabellen können über die Schaltfläche TABELLE HINZUFÜGEN der Abfragedesigner-Symbolleiste (Abbildung 10.8) hinzugefügt und miteinander verknüpft werden.
Abb. 10.8: Über die Schaltfläche TABELLE HINZUFÜGEN kann eine neue Tabelle hinzugefügt werden
Die Art der Verknüpfung kann nach einem Rechtsklick auf das Verknüpfungssymbol und der anschließenden Auswahl der Option EIGENSCHAFTEN im EIGENSCHAFTSFENSTER über die Eigenschaft VERKNÜPFUNGSKONDITION UND -TYP bestimmt werden (Abbildung 10.9). Um eine neue Verknüpfung zwischen zwei Tabellen herzustellen, markieren Sie eine der Spalten, anhand von deren Wert die Verknüpfung herzustellen ist und ziehen sie über die korrespondierende Spalte der zu verknüpfenden Tabelle. Lassen Sie sie dort fallen und bearbeiten Sie die Eigenschaften der Verknüpfung wie weiter oben beschrieben.
142
Abfragedesigner und Abfragedesigner-Symbolleiste
Abb. 10.9: Festlegen der Verknüpfungsoptionen zwischen zwei Tabellen
Um eine bereits existierende Verknüpfung zwischen zwei Tabellen zu löschen, markieren Sie die Verknüpfung mit einem einfachen Mausklick und drücken Sie die (Entf)-Taste.
10.5.2 Kriterienbereich Der Kriterienbereich (Abbildung 10.10) erlaubt eine andere Sicht auf die Daten von Tabellen. Hier können Spalten und ihre Verknüpfungen bzw. Einschränkungen in einer Tabellensicht definiert werden.
Abb. 10.10: Design einer Abfrage im Kriterien-Bereich
Express Edition
143
10 – Datenbank
Im Bereich SPALTE können Sie die relevanten Spalten definieren. Diese können verwendet werden, um Inhalte darzustellen oder Abhängigkeiten (auch von den Werten anderer Tabellen) zu definieren. Sie können über die Checkbox AUSGABE explizit angeben, ob ein Feld dargestellt werden soll. Die Spalte * steht im Übrigen für alle Felder einer Tabelle. Letztere kann über die gleichnamige Spalte definiert werden. Über die beiden Spalten SORTIERUNGSART und SORTIERREIHENFOLGE können Sie angeben, ob und wie die Ausgabe sortiert werden soll. Die Spalte FILTER nimmt Abhängigkeiten von anderen Tabellen oder Filterkriterien auf. Leider werden diese Informationen nach einer Eingabe nicht mehr angezeigt, was durchaus als Bug anzusehen ist. Die drei Spalten ODER nehmen alternative Filterkriterien auf.
10.5.3 SQL-Bereich Im SQL-Bereich (Abbildung 10.11) können Sie auszugebende Felder, verknüpfte Tabellen oder Sortierreihenfolgen manuell im SQL-Code angeben.
Abb. 10.11: Der SQL-Bereich im Abfragedesigner
Ebenfalls können Sie hier korrigierend eingreifen, wenn der von den Diagramm- oder Filterbereichen erzeugte SQL-Code nicht Ihren Anforderungen entspricht. Änderungen in diesem Bereich wirken sich stets auch auf die beiden anderen Bereiche aus. Hier haben Sie die größte Freiheit hinsichtlich der vorzunehmenden Operationen. Leider ist die Funktionsfähigkeit des SQL-Bereichs hinsichtlich des unterstützten Sprachumfangs stark eingeschränkt: Andere als INSERT-, UPDATE-, SELECT- und DELETE-Statements lassen sich nicht ausführen. Dies bedeutet, dass auch ein manuelles Erstellen von Datenbankobjekten nicht unterstützt wird.
144
Abfragedesigner und Abfragedesigner-Symbolleiste
10.5.4 Ergebnisbereich Der Ergebnisbereich nimmt die Ergebnisse der Abfragen auf und stellt sie dar. Seine Funktionalität (Ergebnisse visualisieren, Datensätze einfügen, Änderungen übernehmen) ist bereits weiter oben beschrieben worden. Eine wichtige Einschränkung ist jedoch bei der Arbeit mit mehreren Tabellen zu beachten: Das Einfügen oder Ändern von Datensätzen geht in diesem Fall nicht. Über das Ausrufezeichen-Symbol in der Datenbankabfrage-Symbolleiste können Sie das aktuelle Statement erneut ausführen lassen (Abbildung 10.12).
Abb. 10.12: Über das Ausrufezeichen-Symbol führen Sie eine SQL-Abfrage aus
Das erneute Ausführen einer Abfrage kann beispielsweise nach dem Einfügen von Datensätzen notwenig sein, weil die automatisch generierten Identitätswerte sonst nicht angezeigt würden.
10.5.5 Datenbankanbindung in eigenen Applikationen Das Anbinden einer Datenbank in eigenen Applikationen gestaltet sich sehr einfach. Im Folgenden soll dies für die Visualisierung von Kontaktdaten demonstriert werden.
Hinweis Eine weiterführende Einführung in die Arbeit mit Datenbanken im .NET Framework muss an dieser Stelle aus Platzgründen leider unterbleiben. Legen Sie im ersten Schritt ein neues Projekt an und öffnen Sie den DATENBANKEXPLORER. Verbinden Sie sich dort mit einer Datenbankdatei Ihrer Wahl. Der Autor verwendet eine sehr minimalistische Adressdatenbank-Datei, die Name, Vorname und E-Mail-Adresse von Kontakten aufnimmt. Überprüfen Sie auf Ebene des DATENBANK-EXPLORERS, ob die Verbindung erfolgreich hergestellt werden konnte. Legen Sie nun ein neues Formular an. Ziehen Sie anschließend aus dem Bereich DATEN der Toolbox ein DataGridView-Steuerelement auf das Formular und lassen Sie es fallen. Aus den Aufgaben des Steuerelements, die automatisch angezeigt Express Edition
145
10 – Datenbank
werden oder über den kleinen Pfeil im oberen Bereich des Steuerelements erreicht werden können, wählen Sie nun eine Datenquelle aus (Abbildung 10.13).
Abb. 10.13: Festlegen der Datenquelle eines DataGridView-Steuerelements
Falls Sie noch keine Datenquelle definiert haben, wählen Sie die Option PROJEKTDATENQUELLE HINZUFÜGEN. Anschließend öffnet sich der ASSISTENT ZUM HINZUFÜGEN NEUER DATENQUELLEN. Dieser erlaubt es unter anderem, eine Datenbank anzubinden. Nach Betätigung der Schaltfläche WEITER können Sie die bereits hinterlegte Datenbankverbindung auswählen oder über die Schaltfläche NEUE VERBINDUNG eine neue Datenbankverbindung definieren. Nach der Auswahl der Datenbankverbindung können Sie bestimmen, welche Tabellen und Daten anzuzeigen sind (Abbildung 10.14). Die Daten werden in einem DataSet abgelegt, dessen Namen Sie bei Bedarf ebenfalls an Ihre Vorstellungen anpassen können.
146
Abfragedesigner und Abfragedesigner-Symbolleiste
Abb. 10.14: Auswahl der zu visualisierenden Datenbankobjekte
Nach einem Klick auf die Schaltfläche FERTIG STELLEN ist die Datenverbindung konfiguriert. Im Editorfenster erkennen Sie bereits die Struktur der Daten – das DataGridView-Steuerelement zeigt diese bereits an (Abbildung 10.15).
Abb. 10.15: Schon in der Entwurfsansicht werden verfügbare Felder angezeigt
Express Edition
147
10 – Datenbank
Führen Sie nun die Applikation aus, und die ausgewählten Informationen der Datenbanktabelle werden angezeigt (Abbildung 10.16).
Abb. 10.16: Darstellung der Daten im laufenden Programm
10.6 Fazit Der Umgang mit Datenbanken in VBE ist eher rudimentär, erlaubt jedoch zumindest das Einsehen, Ändern und Löschen von Daten. Ebenfalls ist das Anbinden der Datenquellen an eigene Applikationen recht unproblematisch möglich. Weiterführende Operationen sind jedoch nicht möglich, können aber zumindest auf Ebene der jeweiligen Datenbank-Dienstprogramme (Microsoft Access, SQL Server Management Studio, etc.) durchgeführt werden. Sehr unangenehm sind jedoch drei Eigenheiten der VBE: 쐌 Einmal definierte Abfragen lassen sich nicht speichern. 쐌 Es lassen sich keine neuen Datenbankobjekte anlegen oder ändern. 쐌 Die Verwendung anderer Datenbanken und Datenbanksysteme, etwa MySQL oder Oracle ist mit der VBE nicht möglich. Letztlich bewegt sich die Unterstützung von Datenbankoperationen auf dem Niveau, das auch schon im Visual Studio .NET 2003 zur Verfügung stand. Wer mehr will, muss entweder auf die spezifischen Datenbankdienstprogramme umsteigen oder auf die kostenpflichtigen Visual-Studio-Varianten zurückgreifen.
148
11 Objektbrowser Der OBJEKTBROWSER ist ein unverzichtbares Hilfsmittel, wenn es darum geht, sich über die Hierarchie von Klassen sowie deren Eigenschaften, Methoden und Elemente zu informieren.
Hinweis Die Hilfe zu Visual Basic Express Edition spricht neben dem Objektbrowser auch vom Vorhandensein der so genannten Klassenansicht, die im Grunde eine ähnliche Funktionalität bereit stellt, sich jedoch ausschließlich auf die Elemente des aktuellen Projekts beschränkt. Diese Funktionalität ist in der Express Edition leider nicht vorhanden. Die Hilfe ist an dieser Stelle also schlichtweg falsch (siehe auch http://msdn2.microsoft.com/de-de/library/ b4z62wxz.aspx).
11.1 Öffnen des Objektbrowsers Sie öffnen den Objektbrowser, indem Sie die (F2)-Taste an beliebiger Stelle der Oberfläche drücken. In der Standardeinstellung präsentiert er sich als ein weiteres Register am oberen Rand des Arbeitsbereichs (Abbildung 11.1). Die Oberfläche des Objektbrowsers ist dreigeteilt: Auf der linken Seite werden alle verfügbaren Klassen und Namensräume angezeigt (Objektbereich). Der obere Teil des mittleren und rechten Bereichs ist der Auflistung der Methoden, Eigenschaften und Variablen einer ausgewählten Klasse vorbehalten (Memberbereich). Der untere Bereich dient der Ansicht eines ausgewählten Elements (Detailbereich). Hier werden auch zusätzliche Beschreibungen und Verweise auf die verwendeten Datentypen angezeigt. Die Arbeit mit dem Objektbrowser gestaltet sich – wenn Sie wissen, was Sie suchen – sehr einfach: Klicken Sie sich einfach links bis zu gewünschten Klasse durch, wählen Sie rechts das Sie interessierende Element aus und sehen Sie sich dessen Detailinformationen an.
Express Edition
149
11 – Objektbrowser
Abb. 11.1: Der Objektbrowser in der Standardansicht
11.2 Suchen im Objektbrowser Direkt oberhalb der Anzeige der verfügbaren Klassen und Namensräume befindet sich das Suchfeld. Geben Sie hier den gewünschten Klassen-, Namensraumoder Elementbestandteil ein und drücken Sie die (¢)-Taste oder klicken auf den grünen Pfeil, um eine entsprechende Einschränkung der dargestellten Objekte vorzunehmen (Abbildung 11.2). Anschließend enthält die linke Spalte nur noch die gefundenen Treffer, die voll qualifiziert (also inklusive Namensraum und Klasse) dargestellt werden. Jedes Vorkommnis des gesuchten Suchbegriffs wird dabei in einem hellen Grau hinterlegt.
150
Einschränken der angezeigten Objekte
Eine Unterscheidung von Groß- und Kleinschreibung findet im Übrigen nicht statt. Die Suche durchsucht ausschließlich Klassen-, Namensraum- und Elementbezeichnungen. Eine echte Volltextsuche, die auch die vorhandenen Beschreibungstexte berücksichtigt, ist hier nicht implementiert. Über die oberhalb des Suchtextes gelegene Einschränkungsauswahl können Sie die Suche bzw. die Darstellung der Suchergebnisse begrenzen. Auf diese Funktionalität wird etwas weiter unten genauer eingegangen.
Abb. 11.2: Durchsuchen der verfügbaren Komponenten
Um die Einschränkung wieder aufzuheben, löschen Sie entweder den eingegebenen Text und suchen erneut oder Sie klicken auf die rechts neben der Suchschaltfläche befindliche und aktivierte Schaltfläche zum Löschen der Suche. Wenn Sie später erneut suchen möchten, können Sie den Suchbegriff erneut eingeben oder über das am rechten Rand des Eingabefelds für den Suchtext befindliche Pfeilsymbol einen bereits zuvor eingegebenen Suchbegriff erneut auswählen.
11.3 Einschränken der angezeigten Objekte Egal, ob Sie eine Suche durchführen oder einfach nur die Liste der verfügbaren Komponenten durchstöbern wollen: Mit Hilfe der oberhalb des Eingabefelds befindlichen Einschränkungsauswahl können Sie definieren, welche Komponenten durchsucht und angezeigt werden sollen. Die Standardeinstellung hier ist ALLE KOMPONENTEN.
Express Edition
151
11 – Objektbrowser
Alle zur Verfügung stehenden Optionen sind in Tabelle 11.1 dargestellt. Einstellung
Bedeutung
ALLE KOMPONENTEN
Beinhaltet alle Komponenten des .NET Framework und des aktuellen Projekts sowie im aktuellen Projekt ggf. referenzierte Komponenten von Drittanbietern
.NET-FRAMEWORK
Beschränkt die Anzeige auf Komponenten des .NET Framework. Hier werden keine Komponenten von Drittanbietern eingeblendet. Ebenfalls sind die Komponenten des eigenen Projekts nicht sichtbar.
EIGENE PROJEKTMAPPE
Beschränkt die Anzeige auf alle Komponenten, die in der Projektmappe verwendet oder referenziert werden
BENUTZERDEFINIERTER KOMPONENTENSATZ
Beinhaltet nur die Komponenten, die zuvor einem benutzerdefinierten Komponentensatz hinzugefügt worden sind
Erlaubt das Hinzufügen und Entfernen von KomBENUTZERDEFINIERTER KOMPONENTENSATZ BEAR- ponenten des benutzerdefinierten Komponentensatzes. Hier kann eine eigene ZusammenstelBEITEN... lung von Komponenten auf Ebene von Assemblierungen und COM-Komponenten vorgenommen werden. Tabelle 11.1: Einstellungen zur Festlegung, welche Komponenten durchsucht werden sollen
Die Definition eines eigenen Komponentensatzes erlaubt es, sehr genau festzulegen, welche Komponenten in die Darstellung oder eine Suche aufzunehmen sind. Diese Festlegung findet generell auf Ebene von Assemblierungen, COMKomponenten oder des aktuellen Projekts statt. Wählen Sie die Option BENUTZERDEFINIERTER KOMPONENTENSATZ BEARBEITEN aus, öffnet sich ein Fenster, mit dessen Hilfe Sie die in die Darstellung einzubeziehenden Komponenten auswählen können (Abbildung 11.3).
152
Einschränken der angezeigten Objekte
Abb. 11.3: Bearbeiten des benutzerdefinierten Komponentensatzes im Objektbrowser
Über Reiter stehen im Fenster BENUTZERDEFINIERTEN KOMPONENTENSATZ BEARBEITEN die Bereiche .NET (.NET-Komponenten aus dem globalen AssemblierungsCache), COM, PROJEKTE (hier können Sie die Anzeige auf alle aktuell geöffneten Projekte beschränken), DURCHSUCHEN (manuelle Auswahl geeigneter Assemblierungen oder COM-Komponenten über das Dateisystem) und AKTUELL (zuvor manuell ausgewählte oder als Referenz hinzugefügte Komponenten) zur Verfügung. Mit Hilfe eines Klicks auf die Spaltenüberschriften können Sie die Sortierung der Komponenten beeinflussen. Ein weiterer Klick dreht die Sortierung jeweils um. Wenn Sie den Namen einer Komponente bereits kennen, können Sie diesen (blind) tippen und das Fenster wird an die entsprechende Position scrollen. Um etwa die Komponente System.Web hinzuzufügen, können Sie System.W eingeben Express Edition
153
11 – Objektbrowser
und sehen dann bereits die Komponente. Dies funktioniert jedoch nur bei korrekter Schreibweise, kann im Erfolgsfall jedoch viel Zeit sparen. Sie können sich wie in einem Warenkorb alle Sie interessierenden Komponenten zusammensuchen und nach einem Markieren durch einen einfachen Klick über die Schaltfläche HINZUFÜGEN zum Bereich AUSGEWÄHLTE PROJEKTE UND KOMPONENTEN hinzufügen. Alternativ können Sie auch einen Doppelklick auf die gewünschte Komponente durchführen. Bereits ausgewählte Komponenten können Sie ebenfalls über einen einfachen Klick markieren und über die Schaltfläche ENTFERNEN aus der Auswahl entfernen (Abbildung 11.4). Auch hier können Sie alternativ einen Doppelklick verwenden, um die Komponenten aus der Auswahl zu entfernen. Der so definierte Komponentensatz ist auch über die Grenzen des aktuellen Projekts hinweg und ebenfalls nach dem erneuten Öffnen der Entwicklungsumgebung gültig. Sollten Sie jedoch Komponenten des aktuellen Projekts mit ausgewählt haben, werden diese in anderen Projekten nicht mit angezeigt.
Abb. 11.4: Ausgewählte Komponenten für die Darstellung im Objektbrowser
Nachdem Sie die gewünschte Auswahl getroffen haben, können Sie dies über die Schaltfläche OK bestätigen. Anschließend wird die Darstellung auf die ausgewählten Komponenten beschränkt. Sie können dies durch die Auswahl einer anderen Einschränkung aufheben.
11.4 Bequemlichkeit Der Objektbrowser bietet die eine oder andere Annehmlichkeit, die man gerne in Anspruch nimmt. Neben der Einschränkungsauswahl, die den Such- und Anzeigebereich effektiv eingrenzt, befinden sich zwei Pfeile, mit denen zwischen den bereits betrachteten Komponenten vor und zurück navigiert werden kann. Daneben befindet sich die Schaltfläche zum Hinzufügen der betrachteten Komponente zum aktuellen Projekt (Abbildung 11.5).
154
Kontextmenü im Objektbereich
Abb. 11.5: Pfeile zum Navigieren und Schaltfläche zum Hinzufügen der aktuellen Komponente zum Projekt
Die Pfeile erfüllen einen simplen, aber sehr angenehmen Zweck, denn Sie können so eine Komponente auswählen, anschließend eine andere Komponente betrachten und danach über den Zurück-Pfeil zur zuvor betrachteten Komponente zurück kehren. Über den Vorwärts-Pfeil gelangen Sie später wieder zur zuletzt ausgewählten Komponente zurück. Dies funktioniert übrigens auch auf Ebene von Elementen der Komponenten, was gerade bei komplexeren Klassen eine deutliche Erleichterung darstellt. Die Funktionsweise gleicht dabei der Browser-History-Funktionalität. Haben Sie eine Komponente ausgewählt, können Sie diese über die entsprechende Schaltfläche neben den Pfeilen zu den Referenzen des aktiven Projekts hinzufügen. Sie müssen dabei nicht einmal wissen, in welcher Assemblierung sich die Komponente befindet oder ob es sich dabei um eine COM-Komponente handelt. Die Entwicklungsumgebung sorgt selbstständig dafür, dass die richtige Assemblierung ausgewählt und im Falle von COM-Komponenten die erforderlichen WrapperObjekte, die den Zugriff auf diese Komponenten kapseln, erzeugt werden.
11.5 Kontextmenü im Objektbereich Einiges an Funktionalität des Objektbrowsers verbirgt sich auch im Kontextmenü des Objektbereichs, das Sie über einen Rechtsklick in den Objektbereich aufrufen können (Abbildung 11.6).
Abb. 11.6: Kontextmenü des Objektbereichs
Express Edition
155
11 – Objektbrowser
Die Bedeutung der angebotenen Optionen ist in Tabelle 11.2 aufgeführt. Option
Bedeutung
DEFINITION
Blendet den Primärknoten für das aktuell im Objektbrowser angezeigte Objekt ein. Dies ist für gewöhnlich die oberste Ebene (Klassen- oder Interface-Definition).
DURCHSUCHEN
ALLE VERWEISE SUCHEN
Sucht alle Verweise auf ein Objekt. Die Suchoptionen können über BEARBEITEN | SYMBOLE SUCHEN | OPTIONEN definiert werden. Alternativ können Sie das Suchfenster auch über die Tastenkombination (Alt)+(F12) aufrufen.
FÜR TYP FILTERN
Zeigt nur den Typ im Objektbereich an. Im Memberbereich werden alle Elemente des Typs dargestellt. Die Filterung wird in Form einer Suche ausgeführt. Sie können sie entsprechend über die SUCHE LÖSCHEN-Schaltfläche oder durch Eingabe eines leeren Suchbegriffs im Suchbereich zurücksetzen.
KOPIEREN
Kopiert den kompletten Namen des Objekts, inklusive Namensraum
NAMESPACES
Zeigt die Elemente des Objektbereichs nach Namensräumen sortiert und gruppiert an. Dies ist die Standardoption.
ANZEIGEN
CONTAINER ANZEIGEN
ALPHABETISCH SORTIEREN
NACH OBJEKTTYP SORTIEREN
Zeigt die Elemente des Objektbereichs nach Assemblierungen und Projekten sortiert und gruppiert an (Abb. 11.7) Stellt die alphabetische Sortierung wieder her (Standardansicht) Erlaubt die Sortierung der Komponenten von Assemblierungen und Projekten nach ihrem Typ. Dabei werden zuerst Basisklassen und deren Ableitungen, dann Schnittstellen (Interfaces) sowie Auflistungen und zuletzt Ereignis- und Delegate-Deklarationen angezeigt. Innerhalb jedes Typs erfolgt eine alphabetische Sortierung.
Tabelle 11.2: Optionen des Kontextmenüs im Objektbereich
156
Kontextmenü im Objektbereich Option
Bedeutung
NACH OBJEKTZUGRIFF Sortiert die Komponenten nach ihrem Zugriffstyp SORTIEREN
(Public, Friend, Protected, Private). Innerhalb der Komponenten eines Zugriffstyps erfolgt eine alphabetische Sortierung.
NACH OBJEKTTYP
Gruppiert die Komponenten nach ihrem Objekttyp (Klassen, Schnittstellen, Auflistungen und Delegates) (Abbildung 11.8)
GRUPPIEREN
Tabelle 11.2: Optionen des Kontextmenüs im Objektbereich (Forts.)
Abb. 11.7: Anzeige von Komponenten, gruppiert nach Assemblierungen und Projekten
Abb. 11.8: Darstellung der Komponenten, gruppiert nach Assemblierungen und Projekten sowie gruppiert nach Objekttyp
Express Edition
157
11 – Objektbrowser
11.6 Kontextmenü der Elementansicht Auch die Elementansicht verfügt über ein Kontextmenü. Dieses rufen Sie auf, indem Sie an beliebiger Stelle innerhalb der Elementansicht die rechte Maustaste betätigen (Abbildung 11.9).
Abb. 11.9: Kontextmenü der Elementansicht
Die Bedeutung der verschiedenen Optionen ist in Tabelle 11.3 aufgeführt. Option
Bedeutung
ALLE VERWEISE
Sucht alle Verweise auf das gerade ausgewählte Element. Die Suchoptionen entsprechen denen der Symbolsuche unter BEARBEITEN | SYMBOLE SUCHEN | OPTIONEN. Alternativ können Sie die Symbolsuche über (Alt)+(F12) einblenden und die Optionen setzen.
SUCHEN
KOPIEREN
Kopiert das aktuell ausgewählte Objekt, so dass es im Code-Bereich eingefügt werden kann.
ÖFFENTLICHE MEMBER
Legt fest, ob als Public gekennzeichnete Elemente angezeigt werden sollen
ANZEIGEN
GESCHÜTZTE MEMBER ANZEIGEN
Legt fest, ob Elemente, die als Protected gekennzeichnet sind, angezeigt werden sollen
Tabelle 11.3: Optionen des Kontextmenü im Memberbereich
158
Kontextmenü der Elementansicht Option
Bedeutung
PRIVATE MEMBER
Legt fest, ob Elemente, die mit dem Zugriffsmodifizierer Private gekennzeichnet sind, angezeigt werden sollen
ANZEIGEN
ANDERE MEMBER ANZEIGEN
GEERBTE MEMBER ANZEIGEN
ALPHABETISCH SORTIEREN
NACH MEMBERTYP SORTIEREN
Legt fest, dass Elemente, die mit einem anderen als den genannten Zugriffsmodifizierern (etwa Friend) gekennzeichnet sind, angezeigt werden sollen Wenn aktiviert, werden alle Elemente der Klasse angezeigt, anderenfalls beschränkt sich die Anzeige auf die in der Klasse neu deklarierten Elemente Stellt die alphabetische Sortierung wieder her (Standardansicht) Erlaubt die Sortierung der Elemente nach ihrem Typ (Methoden, Funktionen, Eigenschaften, Ereignisse, Membervariablen). Innerhalb eines Membertyps erfolgt eine alphabetische Sortierung.
NACH MEMBERZUGRIFF Sortiert die Elemente nach ihrem Zugriffstyp SORTIEREN
(Public, Protected, Private, Friend). Innerhalb eines Zugriffstyps erfolgt eine alphabetische Sortierung.
NACH MEMBERTYP
Gruppiert die Elemente nach ihrem Objekttyp (Methoden, Funktionen, Eigenschaften, Ereignisse, Membervariablen) (Abbildung 11.10)
GRUPPIEREN
Tabelle 11.3: Optionen des Kontextmenü im Memberbereich (Forts.)
Die Optionen ÖFFENTLICHE MEMBER ANZEIGEN, GESCHÜTZTE MEMBER ANZEIGEN, PRIVATE MEMBER ANZEIGEN, ANDERE MEMBER ANZEIGEN und GEERBTE MEMBER ANZEIGEN sind als Optionsfelder ausgeführt und können somit unabhängig voneinander gesetzt werden. Entsprechend der gesetzten Optionen werden die Elemente dann angezeigt. Ist keines der Elemente aktiviert, bleibt der Memberbereich leer.
Express Edition
159
11 – Objektbrowser
Abb. 11.10: Darstellung der Member, gruppiert nach ihrem Typ
11.7 Übergeordnete Einstellungen Neben der Einschränkungsauswahl der Suchergebnisse, den Navigationspfeilen und der Schaltfläche zur Übernahme einer Referenz zum Projekt befindet sich das Einstellungsmenü des Objektbrowsers. Hier können zentral Änderungen an den Einstellungen vorgenommen werden, die sich zum Teil sowohl auf den Objekt- als auch auf den Memberbereich auswirken (Abbildung 11.11).
Abb. 11.11: Globale Einstellungen des Objektbrowsers
160
Übergeordnete Einstellungen
Die möglichen Einstellungen entsprechen weitestgehend den bereits zuvor besprochenen Einstellungen der Kontextmenüs von Objekt- und Memberbereich: 쐌 NAMESPACES ANZEIGEN und CONTAINER ANZEIGEN beziehen sich auf die Art, wie Klassen und Hierarchien dargestellt werden (vollqualifiziert oder in einer Gruppierung, die der jeweiligen Assemblierung entspricht). 쐌 Die Option AUSGEBLENDETE TYPEN UND MEMBER ANZEIGEN schaltet die Darstellung von ausgeblendeten Klassen und Elementen um. 쐌 Die Optionen ÖFFENTLICHE MEMBER ANZEIGEN, GESCHÜTZTE MEMBER ANZEIGEN, PRIVATE MEMBER ANZEIGEN und ANDERE MEMBER ANZEIGEN beziehen sich auf den Elementbereich und regeln, auf welche Ebene von Zugriffsmodifizierern die Anzeige erfolgt (Public, Protected, Private oder Friend). 쐌 Die Option GEERBTE MEMBER ANZEIGEN steuert, ob ererbte Elemente im Elementbereich angezeigt werden. Neu sind hier die Optionen BASISTYPEN ANZEIGEN und ABGELEITETE TYPEN ANZEIGEN. Diese erlauben es, einen schnellen Überblick der Typen zu erhalten, von denen ein Objekt erbt, oder die von einem Objekt erben. Zu diesem Zweck werden bei Aktivierung der Optionen im Objektbereich unterhalb jeden Objekts Knoten hinzugefügt, die die entsprechenden Typen enthalten (Abbildung 11.12). Durch einen Klick auf den jeweiligen Typ können weitere Informationen zu ihm eingeholt werden.
Abb. 11.12: Darstellung von abgeleiteten Typen und Basistypen eines Objekts
Express Edition
161
11 – Objektbrowser
11.8 Tastenkombinationen Innerhalb des Objektbrowsers können einige Tastenkürzel verwendet werden, die den Zugriff auf bestimmte Funktionalitäten deutlich erleichtern. Tabelle 11.4 stellt die wichtigsten Tastenkürzel dar. Tastenkombination Bedeutung (Alt)+(F12)
Zeigt das Dialogfeld SYMBOL SUCHEN an
(Strg)+(F12)
Zeigt die Definition des Elements im Editor an (soweit vorhanden)
(F12)
Zeigt die Deklaration des Elements im Editor an (soweit vorhanden)
(ª)+(Alt)+(F12)
Führt eine Schnellsuche nach dem aktuellen Symbol im Projekt durch und zeigt die Fundstellen an
Tabelle 11.4: Wichtige Tastenkombinationen des Objektbrowsers
11.9 Fazit Sie benötigen mehr Überblick? Der Objektbrowser gibt Ihnen genau diesen Überblick – und ist anders als die Online-Hilfe leicht bedienbar und einfach an die eigenen Bedürfnisse anpassbar.
162
12 Praxis Mit einem umfangreicheren Praxisbeispiel werden in diesem Kapitel die Möglichkeiten der Entwicklungsumgebung und des .NET Framework im Zusammenhang gezeigt. Ziel ist die Erstellung eines Editors, mit dessen Hilfe formatierter Text erstellt, bearbeitet und gespeichert werden kann. Möglich wird dies ohne allzu großen Aufwand durch die vielen vorgefertigten Elemente des .NET Framework und die bisher gezeigten Möglichkeiten der Entwicklungsumgebung zur Programmerstellung. Die Anwendung wird um das RichTextBox-Steuerelement herum erstellt, das eine RTF-Datei als formatierten Text darstellt und dessen Bearbeitung gestattet.
12.1 Anlegen des Projekts Beim anzulegenden Projekt handelt es sich um eine Windowsanwendung, die ein MenuStrip-Steuerelement und ein RichTextBox-Steuerelement beinhaltet. Im ersten Schritte legen Sie eine neue Windowsanwendung mit dem Namen RichTextEdit an.
Abb. 12.1: Neues Projekt RichTextEdit
Express Edition
163
12 – Praxis
12.2 Menü anlegen Nachdem die Entwicklungsumgebung die Anwendung erstellt hat, können Sie die Menüs und den Hauptdialog der Anwendung erstellen. Fügen Sie deshalb ein MenuStrip-Steuerelement ein, das Sie in der TOOLBOX unter MENÜ & SYMBOLLEISTEN finden. Ziehen Sie das Steuerelement auf das Formular und eine Instanz mit der Bezeichnung MenuStrip1 wird automatisch erzeugt. Eine hellblaue Menüleiste mit dem Eingabefeld HIER EINGEGEBEN erscheint unterhalb der Titelzeile des Dialogs. Diese dient dem Erfassen der verschiedenen Menüpunkte. Als Element wird ebenfalls ein RichTextBox-Steuerelement benötigt. Dieses befindet sich im Bereich ALLGEMEINE STEUERELEMENTE der TOOLBOX. Ziehen Sie das Steuerelement nun auf das Formular. Die Entwicklungsumgebung erzeugt automatisch ein RichTextBox-Steuerelement mit dem Namen RichTextBox1.
Abb. 12.2: RichTextBox-Element andocken
Über die RichTextBox-Aufgaben können Sie dafür sorgen, dass sich das Element automatisch an die Umgebung anpasst. Wählen Sie deshalb die Option IN ÜBERGEORDNETEN CONTAINER ANDOCKEN, damit das Element auch beim Vergrößern oder Verkleinern des Programms immer die maximal verbleibende Fläche bedecken kann. Wenden Sie sich nun dem Menü zu. Benennen Sie den ersten Eintrag in &DATEI um und fügen Sie die Menüpunkte
164
Menü anlegen
쐌 &NEU 쐌 &ÖFFNEN 쐌 &SPEICHERN 쐌 &BEENDEN ein, indem Sie auf den Eintrag DATEI klicken und per HIER EINGEBEN | MENUITEM die Einträge erzeugen.
Abb. 12.3: Zwischenstand zu diesem Zeitpunkt
Hinweis Das &-Zeichen markiert den Buchstaben, über den der jeweilige Menüpunkt mit der Tastatur in Verbindung mit der (Alt)-Taste aufgerufen werden kann. Das Steuerelement MENUSTRIP1 wird im Entwurfsdesigner unterhalb der Form mit einem Menüsymbol angezeigt. Wenn Sie dessen Eigenschaften einsehen wollen, dann wählen Sie es per Mausklick aus und öffnen Sie mit einem
Express Edition
165
12 – Praxis
Rechtsklick das Kontextmenü. Wählen Sie anschließend die Option EIGENSCHAFTEN aus.
Hinweis Für jedes Menüelement können Sie die zu verwendende Schnellzugriffstaste über seine EIGENSCHAFT SHORTCUTKEYS setzen.
12.3 Funktionalitäten hinterlegen Nun kann das Programm gestartet werden. Es ist bereits jetzt möglich, Text eingegeben und das Programm zu beenden – der Rest muss noch programmiert werden. Beenden Sie nun die Applikation und wechseln Sie wieder in die Entwicklungsumgebung. Um die Menüeintrage mit Funktionalität zu versehen, müssen die entsprechenden Ereignisse abgefangen werden. Dies geschieht mit Hilfe von Ereignisbehandlungsmethoden, die die Entwicklungsumgebung für Sie generiert. Um etwa eine Reaktion auf einen Klick auf den Menüeintrag BEENDEN zu implementieren, führen Sie einen Doppelklick auf ihn aus. Die Entwicklungsumgebung springt in die Code-Ansicht und generiert den entsprechenden Methodenrumpf. Damit das Programm über den Menüeintrag BEENDEN beendet werden kann, editieren Sie die Methode entsprechend des Listings 12.1. Die Anweisung Close() sorgt dabei dafür, dass das Formular geschlossen und damit das Programm beendet wird. Die Methode Dispose() gibt den verwendeten Speicher wieder frei und schont somit die Ressourcen des Systems. Listing 12.1: Beim Beenden werden nicht mehr benötigte Ressourcen freigegeben Public Class Form1 ''' <summary> ''' Click-Ereignis des Menüeintrags Beenden ''' Private Sub BeendenToolStripMenuItem_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles BeendenToolStripMenuItem.Click
166
Text setzen Listing 12.1: Beim Beenden werden nicht mehr benötigte Ressourcen freigegeben (Forts.) ' Formular schließen Me.Close() ' Ressourcen freigeben Me.Dispose() End Sub End Class
Eine kleine kosmetische Änderung sollte bei dieser Gelegenheit noch vorgenommen werden: das Ändern des Formulartitels. Zu diesem Zweck klicken Sie auf das Formular, wechseln in das EIGENSCHAFTEN-Fenster und ändern den Wert der Eigenschaft Title in RichTextEdit.
12.4 Text setzen Als Nächstes soll das RichTextBox-Steuerelement initial mit einem Text gefüllt werden. Dafür bietet sich das Behandeln des Load-Ereignisses des Formulars an, denn dieses wird bei dessen Initialisieren aufgerufen. Durch einen Doppelklick auf die dunkelblaue Umrandung des Formulars wird der Rumpf der Behandlungsmethode für das Load-Ereigniss erzeugt. Innerhalb des Rumpfes können Sie dem RichTextBox-Steuerelement RichTextBox1 über dessen Eigenschaft Rtf den darzustellenden Text zuweisen. Die zugewiesene Zeichenkette muss im RTF-Format kodiert sein. Die Formatierung des Textes geschieht dabei mit Auszeichnungsbegriffen (Tags), die stets mit einem rückwärtsgerichteten Schrägstrich (Backslash) beginnen. So schaltet das Tag \b etwa den Fettdruck an und \b0 schaltet ihn wieder aus. Listing 12.2: Zuweisen von Inhalten an das RichTextBox-Steuerelement ''' <summary> ''' Load-Ereignis des Formulars ''' RichTextBox mit dem Starttext füllen ''' Private Sub Form1_Load( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _
Express Edition
167
12 – Praxis Listing 12.2: Zuweisen von Inhalten an das RichTextBox-Steuerelement (Forts.) Handles MyBase.Load ' Starttext fuer die RichTextBox RichTextBox1.Rtf = "{\rtf1\ansi \b" & _ " In \b0 dieser wunderschönen " & _ " \ul RichTextBox \ul0 kann man " & _ "\i Text editieren und " & _ " \i0\b formatieren\b0." End Sub
Wenn Sie das Beispiel nach der Zuweisung des Texts ausführen, werden Sie eine Ausgabe analog zu Abbildung 12.4 erhalten.
Abb. 12.4: RichTextBox mit formatiertem Text
Der Benutzer kann den nun vorgegebenen Text zwar editieren, aber noch nicht formatieren. Dies soll durch ein ContextMenuStrip-Steuerelement ermöglicht werden, das ein Kontextmenü darstellt. Das Steuerelement befindet sich im Bereich MENÜS & SYMBOLLEISTEN der TOOLBOX. Um das Steuerelement anzulegen, ziehen Sie es aus der TOOLBOX auf die graue Fläche unterhalb der Dialogdarstellung im Ansichts-Designer. Die Entwicklungsumgebung erstellt dann eine Instanz des Elements mit dem Namen ContextMenuStrip1 und präsentiert im Menübereich unterhalb des Datei-Menüs die Eingabemaske für das Kontextmenü.
168
Text setzen
Definieren Sie hier folgende Optionen: 쐌 &FETT 쐌 &KURSIV 쐌 &UNTERSTRICHEN Wenn Sie das Programm nach der Eingabe dieser Informationen speichern und ausführen, werden Sie jedoch feststellen, dass das Kontextmenü noch nicht erscheint. Die Ursache dafür ist, dass die Anzeige des Kontextmenüs noch nicht an ein Ereignis gebunden wurde. Um dies nachzuholen, beenden Sie die Programmausführung und selektieren in der IDE das RichTextBox-Steuerelement. Wechseln Sie anschließend in das EIGENSCHAFTEN-Fenster. Dort finden Sie eine Eigenschaft ContextMenuStrip, die Ihnen bereits die ContextMenuStrip-Instanz ContextMenuStrip1 zur Auswahl anbietet. Wenn Sie diesen Wert auswählen und das Projekt kompilieren, erscheint das Kontextmenü, sobald sich der Mauszeiger über dem RichTextBox-Steuerelement befindet und dort die rechte Maustaste betätigt worden ist. Nun müssen die Menüeinträge noch mit Funktionalität versorgt werden. Beenden Sie die Programmausführung, wählen Sie im Ansichts-Designer das Steuerelement ContextMenuStrip1 aus und führen Sie einen Doppelklick auf den Menüpunkt FETT aus. Geben Sie nun den in Listing 12.3 dargestellten Code ein. Listing 12.3: Implementierung der Behandlung des Klicks auf die Option Fett des Kontextmenüs ' Umschalten des Fonts zwischen Fett und Normal If Me.RichTextBox1.SelectionFont.Bold Then styleApplied = FontStyle.Regular Else styleApplied = FontStyle.Bold End If ' Erstellung des Fonts und Zuweisung an die Box Dim FontToApply As _ New Font(fontOfSelectedText, styleApplied) Me.RichTextBox1.SelectionFont = FontToApply End Sub
Express Edition
169
12 – Praxis
Die so implementierte Methode fragt die Schrifteigenschaften des ausgewählten Bereiches der RichTextBox über dessen Eigenschaft SelectionFont ab und speichert ihn in der lokalen Variablen fontOfSelectedText zwischen. Je nachdem, welche Schriftvariante in der Auswahl momentan aktiv ist, wird in der Variablen styleApplied die jeweils andere Schriftvariante gesetzt – ist die Schriftvariante FontStyle.Bold aktiv, enthält styleApplied den Wert FontStyle.Regular, hat der ausgewählte Text die Schriftvariante FontStyle.Regular, so wird styleApplied der Wert von FontStyle.Bold zugewiesen. Zum Schluss wird mit Hilfe der beiden Variablen die neue Schriftart initialisiert und dem selektierten Text über dessen Eigenschaft SelectionFont zugewiesen. Damit können jetzt Textbereiche ausgewählt und die Schriftvariante zwischen normal und fett umgeschaltet werden. Die noch fehlenden Methoden für das Umschalten der kursiven und unterstrichenen Schriftstile finden Sie in Listing 12.4 dargestellt. Deren Funktionsweise entspricht der des letzten Beispiels, so dass auf eine nähere Erläuterung verzichtet werden kann. Listing 12.4: Implementieren der Ereignisbehandlung für den Menüpunkt Kursiv des Kontextmenüs ''' <summary> ''' Behandelt das Klicken auf den Kontextmenüpunkt ''' Kursiv ''' Private Sub KursivToolStripMenuItem_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles KursivToolStripMenuItem.Click ' Schriftinformationen auslesen Dim fontOfSelectedText As Font = _ Me.RichTextBox1.SelectionFont Dim styleApplied As FontStyle ' Wenn kursiv, dann wieder normal machen, ' sonst kursiv darstellen If Me.RichTextBox1.SelectionFont.Italic Then styleApplied = FontStyle.Regular Else styleApplied = FontStyle.Italic
170
Text setzen Listing 12.4: Implementieren der Ereignisbehandlung für den Menüpunkt Kursiv des Kontextmenüs (Forts.) End If ' Schriftart erzeugen Dim FontToApply As _ New Font(fontOfSelectedText, styleApplied) ' Schriftart zuweisen Me.RichTextBox1.SelectionFont = FontToApply End Sub ''' <summary> ''' Behandelt das Klicken auf den Kontextmenüpunkt ''' Unterstreichen ''' Private Sub UnterstreichenToolStripMenuItem_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles UnterstrichenToolStripMenuItem.Click ' Schriftinformationen auslesen Dim fontOfSelectedText As Font = _ Me.RichTextBox1.SelectionFont Dim styleApplied As FontStyle ' Wenn unterstrichen, dann jetzt als nicht ' unterstrichen darstellen, anderenfalls ' Unterstreichen aktivieren If Me.RichTextBox1.SelectionFont.Underline Then styleApplied = FontStyle.Regular Else styleApplied = FontStyle.Underline End If ' Neue Schriftinformation zuweisen Dim FontToApply As New Font( _ fontOfSelectedText, styleApplied) Me.RichTextBox1.SelectionFont = FontToApply End Sub
Express Edition
171
12 – Praxis
Wenn Sie das Programm starten und einen Textbereich markieren, können Sie nun den Text mit Hilfe des Kontextmenüs formatieren. Wollen Sie die Formatierung rückgängig machen, formatieren Sie die Stelle erneut mit dem gleichen Format.
12.5 Tipp: Mehr Überblick mit der Dokumentengliederung Die DOKUMENTGLIEDERUNG zeigt eine Baumdarstellung der Elemente der Form an.
Abb. 12.5: Dokumentengliederung
Mit Hilfe der Tastenkombination (Strg)+(Alt)+(T) wird die DOKUMENTGLIEDERUNG geöffnet, die einen guten Überblick über alle Elemente der Form bietet. Bei komplexen Dialogen kann dies sehr hilfreich sein, da man schnell zu einem Element navigieren kann.
172
Begrüßungsbildschirm hinzufügen
12.6 Begrüßungsbildschirm hinzufügen Die Anwendung soll nun mit einem Begrüßungsbildschirm ausgestattet werden, der Information über das Programm beim Start anzeigt. Öffnen Sie zu diesem Zweck den PROJEKTMAPPEN-EXPLORER, führen Sie einen Rechtsklick auf den Namen des Projekts aus und wählen Sie die KontextmenüOption HINZUFÜGEN. Alternativ drücken Sie die Tastenkombination [Strg]+ [Alt]+[A] oder nehmen den Weg über DATEI | HINZUFÜGEN. Wählen Sie als hinzuzufügendes Element BEGRÜßUNGSBILDSCHIRM aus. Wenn Sie die Auswahl ohne Änderungen übernehmen, wird der Begrüßungsbildschirm SplashScreen1.vb im PROJEKTMAPPEN-EXPLORER eingefügt. Dieser ist als spezielles Formular ausgeführt worden und enthält schon die entsprechenden Methoden, um den Anwendungstitel, die Version und das Copyright beim Load-Ereignis zu füllen.
Abb. 12.6: Begrüßungsbildschirm
Express Edition
173
12 – Praxis
Die Benutzung eines Begrüßungsbildschirms muss explizit aktiviert werden, ansonsten wird er nicht angezeigt. Führen Sie zu diesem Zweck einen Rechtsklick auf den Namen der Applikation aus und wählen Sie die Option EIGENSCHAFTEN aus dem Kontextmenü. Es öffnet sich der PROJEKT-DESIGNER, mit dessen Hilfe verschiedenste Einstellungen der Anwendung vorgenommen werden können. Die Einstellung für den Begrüßungsbildschirm finden sich im aktivierten Reiter ANWENDUNG in der Abbildung 12.7. Im unteren Bereich der Eingabemaske finden Sie die Einstellung des Begrüßungsbildschirms. Bitte wählen Sie hier SplashScreen1.
Abb. 12.7: Aktivieren des Begrüßungsbildschirms in den Anwendungseinstellungen
Wenn Sie die Änderung speichern und die Anwendung mit (F5) übersetzen und starten, erscheint kurz der Begrüßungsbildschirm und danach startet die Anwendung, wie gewohnt.
174
Begrüßungsbildschirm hinzufügen
Um den Startbildschirm etwas länger betrachten zu können, ist es noch sinnvoll, in dessen Shown-Ereignis eine Verzögerung der Anzeige einzufügen. Dies kann am einfachsten über ein Pausieren des aktuellen Threads für einen definierten Zeitraum geschehen. Übergeben Sie deshalb analog zu Listing 12.5 die Anzahl der zu wartenden Millisekunden an die statische Methode Sleep() der ThreadKlasse.
Hinweis Der Zugriff auf den Thread der Anwendung erfordert den Import von System.Threading. Listing 12.5 stellt die notwendigen Änderungen dar. Listing 12.5: Anzeige des Begrüßungsbildschirms für 2 Sekunden Imports System.Threading Public NotInheritable Class SplashScreen1 ''' <summary> ''' Startbildschirm für 2 Sekunden anzeigen ''' Private Sub SplashScreen1_Shown( _ ByVal sender As Object, _ ByVal e As System.EventArgs) _ Handles Me.Shown Me.Update() ' Zwei Sekunden pausieren Thread.Sleep(2000) End Sub End Class
Auf die Dauer kann die Wartezeit beim Start des Programms als hinderlich empfunden werden. Deshalb sollte es möglich sein, den Begrüßungsbildschirm zu überspringen. Dies kann durch einen Klick auf den Begrüßungsbildschirm angezeigt werden.
Express Edition
175
12 – Praxis
Wählen Sie im Ansichts-Designer deshalb den Begrüßungsbildschirm aus und öffnen Sie seine Eigenschaften. Wählen Sie die Ereignisschaltfläche und lassen Sie sich danach durch einen Doppelklick auf Click den Methodenrumpf des Ereignisses generieren.
Abb. 12.8: Behandeln des Click-Ereignis des Begrüßungsbildschirms
Der Aufruf der Methode Dispose(), wie in Listing 12.6 zu sehen, schließt den Begrüßungsbildschirm umgehend, wenn man ihn anklickt und verkürzt so die Startzeit. Listing 12.6: Schließen des Begrüßungsbildschirms beim Click-Ereignis Private Sub SplashScreen1_Click( _ ByVal sender As Object, _ ByVal e As System.EventArgs) _ Handles Me.Click ' Beenden des Lebenszyklus Me.Dispose() End Sub
Innerhalb der Behandlungsmethode für das Load-Ereignis des Begrüßungsbildschirms können die darzustellenden Informationen gesetzt werden. Listing 12.7 zeigt, wie dies aussehen kann.
176
Begrüßungsbildschirm hinzufügen Listing 12.7: Laden des Begrüßungsbildschirms ''' <summary> ''' Laden des Startbildschirms ''' Verschiedene Informationen werden gesetzt ''' Private Sub SplashScreen1_Load( _ ByVal sender As Object, _ ByVal e As System.EventArgs) _ Handles Me.Load ' Anwendungstitel setzen (aus Applikationsinfos ' oder manuell) If My.Application.Info.Title "" Then ApplicationTitle.Text = _ My.Application.Info.Title Else 'Wenn der Anwendungstitel fehlt, _ 'Anwendungsnamen ohne Erweiterung verwenden. ApplicationTitle.Text = _ System.IO.Path.GetFileNameWithoutExtension( _ My.Application.Info.AssemblyName) End If ' Versionsinformationen setzen Version.Text = String.Format( _ Version.Text, _ My.Application.Info.Version.Major, _ My.Application.Info.Version.Minor) 'Copyrightinformationen Copyright.Text = My.Application.Info.Copyright End Sub
Die Copyright-Informationen werden aus den Applikations-Infos geladen. Dahinter verbirgt sich ein Eintrag in der Assemblierung, die Sie über die Schaltfläche ASSEMBLYINFORMATIONEN bei den Anwendungseinstellungen in den Projekteigenschaften öffnen und bearbeiten können (Abbildung 12.9).
Express Edition
177
12 – Praxis
Abb. 12.9: Copyright-Informationen auf Ebene der Assembly-Informationen ändern
Wenn Sie das Programm mit diesen Änderungen starten, sollte der Begrüßungsbildschirm den veränderten Copyright-Eintrag anzeigen. Die Maske für die Assemblyinformationen ermöglicht es auch übrigens auch, die Versionsinformation zu setzen. Tragen Sie beispielsweise im Bereich Assemblyinformationen einen bestimmten Wert ein, wird dieser im Startbildschirm dargestellt.
Hinweis Ein Stern sorgt dafür, dass der entsprechende Wert automatisch erhöht wird. Allerdings müssen Sie die folgenden Felder in diesem Fall leer lassen.
12.7 Erweiterungen Das RichTextEdit-Steuerelement kann neben formatiertem Text auch Hyperlinks darstellen. Dies geschieht in den Standardeinstellungen automatisch, so dass Sie lediglich eine Internetadresse als Text übergeben müssen.
178
Erweiterungen
Ändern Sie zur Demonstration den Inhalt der Methode Form1_Load() des Formulars so ab, wie in Listing 12.8 dargestellt. Listing 12.8: Zuweisen eines Texts mit eingebettetem Link Private Sub Form1_Load( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles MyBase.Load ' Starttext fuer die RichTextBox RichTextBox1.Rtf = "{\rtf1\ansi \b" & _ " In \b0 dieser wunderschönen " & _ " \ul RichTextBox \ul0 kann man " & _ "\i Text editieren und " & _ " \i0\b formatieren\b0." "{\par }{\par }" & _ "{RTF Beschreibung: http://" & _ "msdn.microsoft.com/library/" & _ "default.asp?url=/library/" & _ "en-us/dnrtfspec/html/" & _ "rtfspec.asp}" End Sub
Die Zuweisung an die Eigenschaft Rtf des RichTextBox-Steuerelements enthält jetzt einen Hyperlink, der auf eine Seite des MSDN verweist, wo die Syntax von RTF erklärt wird. Wenn Sie nun das Programm starten, stellt das RichTextBox-Steuerelement die Adresse als Hyperlink dar (Abbildung 12.10). Was nun noch fehlt ist die Reaktion auf einen Klick auf den Link, denn dies geschieht nicht automatisch. Stattdessen können Sie auf das Ereignis LinkClicked des Steuerelements vertrauen und dafür eine Ereignisbehandlungsmethode implementieren. Erzeugen Sie zu diesem Zweck eine entsprechende Methode, indem Sie das RichTextBox-Steuerelement auswählen und in dessen Ereignis-Liste das Ereignis LinkClicked auswählen. Lassen Sie die Ereignisbehandlungsmethode erzeugen, indem Sie – ohne einen Text einzugeben – die (¢)-Taste drücken.
Express Edition
179
12 – Praxis
Abb. 12.10: RichTextEdit mit Hyperlink
Die Implementierung der Ereignisbehandlungsmethode sollte analog zu Listing 12.9 erfolgen. Listing 12.9: RichTextBox-Ereignis LinkClicked Private Sub RichTextBox1_LinkClicked( _ ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.LinkClickedEventArgs) _ Handles RichTextBox1.LinkClicked ' Aufruf des mit Hyperlinks verknüpften Programms System.Diagnostics.Process.Start(e.LinkText) End Sub
Das Ereignis liefert in der Eigenschaft LinkText der LinkClickedEventArgs-Instanz e eine Referenz auf den angeklickten Link. Mittels System.Diagnostics.Process.Start(e.LinkText) wird das für Hyperlinks verknüpfte Programm mit dem Link gestartet. Sie sollten jetzt bei einem Klick auf den Link die Seite in Ihrem Standardbrowser sehen.
180
Ressourcen editieren
12.8 Ressourcen editieren Im PROJEKT-DESIGNER ist die Verwaltung der Ressourcen jetzt an einer Stelle zusammengefasst. Sie können hier alle Arten von Ressourcen wie Zeichenfolgen, Bilder, Symbole, Audio- und Textdateien hinzufügen und editieren. Der Vorteil von Ressourcen besteht darin, dass man alle Dateien, die nicht unmittelbar mit der Programmierung zu tun haben, an einer Stelle zusammenfasst und sie jederzeit im Programm verwenden kann. Bei der Veröffentlichung eines Programms werden die Ressourcen immer automatisch mit eingeschlossen. Es soll jetzt demonstriert werden, wie ein Bild als Ressource geladen werden kann, das später benutzt werden soll. Die Bilddatei hat den Namen ballon.jpg und liegt im Projektverzeichnis. Um Ihrem Programm eine Ressource hinzuzufügen, wechseln Sie in die Eigenschaften des Projekts und wählen den Reiter RESSOURCEN. Über die Schaltfläche RESSOURCE HINZUFÜGEN können Sie dort das Bild Ihrer Applikation hinzufügen (Abbildung 12.11).
Abb. 12.11: Ressource hinzufügen
Die eingefügte Ressource ist ab diesem Zeitpunkt Bestandteil Ihrer Applikation (Abbildung 12.12). Der Zugriff auf die Ressource im Quelltext geschieht mit der My-Klasse, die neben der Kapselung etlicher Funktionalitäten des .NET Frameworks auch den Zugriff auf die Ressource bereit hält. Dabei kann über die Eigenschaft Ressources auf die hinzugefügte Datei zugegriffen werden. Die dabei zu verwendende Notation entspricht dieser: My.Resources.ballon
Express Edition
181
12 – Praxis
Abb. 12.12: Eingefügte Grafikressource
12.9 Dateidialog zur Dateiverwaltung Ein richtiger Editor benötigt einen Dateidialog zur Auswahl, Speicherung und Neuanlage von Dateien. Im Kapitel 6 wurde der Dateidialog schon vorgestellt. In diesem Abschnitt wird er in etwas anderer Form angewendet, da seine Eigenschaften hier im Programm direkt und nicht über die Entwicklungsumgebung gesetzt werden. Mit Hilfe eines OpenFileDialog-Steuerelements soll dem Menüpunkt ÖFFNEN etwas mehr Funktionalität verliehen werden. Der Name der Datei, die geöffnet wird, soll zwischenspeichert werden, damit er später zur Speicherung wieder verwendet werden kann. Der Code des Formulars wird deshalb entsprechend um eine Variable zum Halten des Dateinamens erweitert (Listung 12.10). Listing 12.10: Die Variable fileName nimmt den Dateinamen auf Public Class Form1 ' Variable zur Zwischenspeicherung des Dateinamens Private fileName As String ''' <summary> ''' Standardkonstruktor des Formulars ''' Public Sub New() ' Dieser Aufruf ist für den Windows ' Form-Designer erforderlich. InitializeComponent()
182
Dateidialog zur Dateiverwaltung Listing 12.10: Die Variable fileName nimmt den Dateinamen auf (Forts.) ' Initialisieren von fileName Me.fileName = String.Empty End Sub ... End Class
In der nur innerhalb des Formulars zugänglichen Variable fileName (die Zugänglichkeit wird über den Zugriffsmodifizierer Private ausgedrückt) kann der Dateiname zwischengespeichert werden. In der New()-Methode wird sie als leere Zeichenkette initialisiert, damit sie sich in einem bekannten und definierten Zustand befindet. Wechseln Sie nun zurück in die Entwurfsansicht des Formulars. Jetzt können Sie die OpenFileDialog-Komponente auf das Formular ziehen. Die Entwicklungsumgebung generiert eine OpenFileDialog-Instanz mit dem Namen OpenFileDialog1 auf der grauen Fläche unten im Formular. Führen Sie anschließend einen Doppelklick auf dem Menüpunkt ÖFFNEN aus. Die Entwicklungsumgebung legt automatisch eine Ereignisbehandlungsmethode für das Click-Ereignis der ToolStripMenuItem-Komponente an, die den Menüeintrag repräsentiert. Innerhalb dieser Methode kann das Ereignis behandelt werden, indem die OpenFileDialog-Komponente OpenFileDialog1 initialisiert und angezeigt wird. Nachdem der Benutzer eine Datei ausgewählt hat, kann diese geladen und ihr Inhalt angezeigt werden. Listing 12.11: Öffnen des Datei-Dialogs für das RichTextControl ''' <summary> ''' Behandelt das Klicken auf den Menüpunkt ''' Datei>Öffnen ''' Private Sub ÖffnenToolStripMenuItem_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles OeffnenToolStripMenuItem.Click ' Filterung auf die Dateiendung *.rtf aktivieren
Express Edition
183
12 – Praxis Listing 12.11: Öffnen des Datei-Dialogs für das RichTextControl (Forts.) OpenFileDialog1.Filter = _ "RTF Dateien (*.rtf)|*.rtf|" & _ "Alle Dateien (*.*)|*.*" ' RTF auswählen OpenFileDialog1.FilterIndex = 1 ' Zuletzt geöffnetes Verzeichnis anzeigen lassen OpenFileDialog1.RestoreDirectory = True ' Anzeigen des Dialogs, ' Prüfen, ob OK-Taste gedrückt If OpenFileDialog1.ShowDialog = _ Windows.Forms.DialogResult.OK Then ' Hier ist eine Ausnahme möglich Try ' Datei laden Me.RichTextBox1.LoadFile( _ OpenFileDialog1.FileName) ' Dateiname merken Me.fileName = OpenFileDialog1.FileName ' Text setzen Me.TopLevelControl.Text = _ String.Format("RichTextEdit - {0}", _ Me.fileName) ' Ggf. Ausnahme abfangen Catch Ex As Exception ' Fehlermeldung anzeigen MsgBox( _ "Problem beim Laden der RTF-Datei" & _ vbCrLf & Ex.Message) End Try End If End Sub
184
Exkurs: Korrekturfähigkeiten des Quelltexteditors
Listing 12.11 zeigt, wie eine OpenFileDialog-Instanz für die Dateiauswahl von RTF-Dateien benutzt wird. Mit Hilfe von deren Eigenschaften Filter und FilterIndex kann definiert werden, dass beim Start des Dialogs die RTF-Auswahl angezeigt wird. Alternativ kann sich der Benutzer auch alle Dateien zur Auswahl anzeigen lassen. Mit Hilfe seiner Methode ShowDialog() wird der Dialog angezeigt. Wenn der Benutzer den OK-Button gedrückt hat, wird der Dateiname an die Methode LoadFile() der RichTextBox-Instanz RichTextBox1 übergeben, die den Rest der Arbeit übernimmt. Die Datei wird dadurch geladen und für die Bildschirmanzeige vorbereitet. Mit Hilfe der Eigenschaft TEXT des über die Eigenschaf TopLevelControl erreichbaren obersten Steuerelements (des Formulars) wird der Dateiname in die Titelleiste gesetzt, um dem Benutzer die Information zu geben, womit er gerade arbeitet. Da nicht sicher gestellt werden kann, ob die RTF-Datei gültig ist, erfolgt das Laden der Daten innerhalb eines Try-Catch-Blocks. Dieser erlaubt ein Abfangen eines möglichen Fehlers und zeigt den Fehlerfall mit Hilfe einer MessageBox-Ausgabe an.
Hinweis Mit WordPad oder Word können Sie eine RTF-Datei erstellen und dann über das Programm einlesen.
12.10 Exkurs: Korrekturfähigkeiten des Quelltexteditors An dieser Stelle lässt sich eine sehr praktische Korrekturfähigkeit des Quelltexteditors demonstrieren, wodurch die Fehlerbeseitigung sehr erleichtert wird. Verkürzen Sie dazu in der Methode ÖffnenToolStripMenuItem_Click den Text Windows.Forms.DialogResult.OK auf DialogResult.OK. An dieser Stelle des Programms ist dieser Text nicht eindeutig und muss deshalb korrigiert werden (Abbildung 12.13).
Express Edition
185
12 – Praxis
Abb. 12.13: Hilfe zur Fehlerkorrektur im Quelltexteditor
Als Resultat des Fehlers unterstreicht der Quelltexteditor die fehlerhafte Stelle. Dies werden Sie vielleicht schon häufiger bei Fehleingaben festgestellt haben. Hier erscheint jedoch zusätzlich am Ende des fehlerhaften Quelltextes ein kleines rotes Rechteck. Wenn Sie darauf klicken, erhalten Sie die in Abbildung 12.13 dargestellte Hinweisbox mit einem Korrekturvorschlag. Wenn Sie nun auf die Option ERSETZEN SIE "DIALOGRESULT" DURCH "WINDOWS.FORMS.DIALOGRESULT" akzeptieren, wird der syntaktisch richtige Quelltext von der Entwicklungsumgebung eingefügt.
Hinweis Die gezeigte Fehlermeldung kommt zustande, weil DialogResult nicht eindeutig qualifiziert wurde. So gibt es im .NET Framework auch die Eigenschaft DialogResult der Button-Klasse. Die Korrektur sorgt hier für die Eindeutigkeit, damit der Ausdruck richtig ausgewertet werden kann.
186
Neue Datei anlegen
12.11 Neue Datei anlegen Ein weiterer Menüpunkt steht noch offen: NEU zur Anlage eines neuen Textes. Lassen Sie sich durch einen Doppelklick auf den Menüpunkt NEU die Methode NeuToolStripMenuItem_Click generieren. An dieser Stelle wird zum Überschreiben oder Neuanlegen einer Datei eine SaveFileDialog-Komponente benötigt. Diese können Sie aus der TOOLBOX auf das Formular ziehen. Setzen Sie anschließend folgende Eigenschaften der Komponente: 쐌 Der Wert der Eigenschaft Filter soll eine Vorauswahl auf RTF-Dateien ermöglichen. Sie können dies so angeben: RTF Dateien (*.rtf)|*.rtf|Alle Dateien (*.*)|*.*. 쐌 Der Eigenschaft FilterIndex wird der Wert 1 zugewiesen, damit in jedem Fall die RTF-Einschränkung des Filters aktiviert ist. 쐌 Als initiales Verzeichnis (InitialDirectory) wird C:\ definiert.
Hinweis Sie können sich die Arbeit noch etwas vereinfachen, wenn Sie das RtfSaveFileDialog-Steuerelement aus Kapitel 6 benutzen. Ziehen Sie dieses aus der TOOLBOX auf das Formular und Ihre SaveFileDialog-Komponente ist bereits fertig konfiguriert. Setzen Sie anschließend analog zu Listing 12.12 den angezeigten Titel des SaveFileDialog-Steuerelements mit Hilfe von dessen Title-Eigenschaft. Listing 12.12: Die Behandlungsmethode ist noch unvollständig ''' <summary> ''' Behandelt das Klicken auf den Menüpunkt ''' Datei>Neu ''' Private Sub NeuToolStripMenuItem_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles NeuToolStripMenuItem.Click ' Titel setzen SaveFileDialog1.Title = "Neue RTF-Datei anlegen"
Express Edition
187
12 – Praxis Listing 12.12: Die Behandlungsmethode ist noch unvollständig (Forts.) ' Dialog anzeigen und Ergebnis abrufen If saveFileDialog1.ShowDialog() = _ Windows.Forms.DialogResult.OK Then ' ... End If End Sub
Positionieren Sie nun den Cursor innerhalb der If-Anweisung. Öffnen Sie mit Hilfe der Option AUSSCHNITT EINFÜGEN des Kontextmenüs die Code-Ausschnittauswahl (Abbildung 12.14). Fügen Sie nun eine Try-Catch-Anweisung aus dem Bereich ALLGEMEINE CODEMUSTER | AUSNAHMEBEHANDLUNG ein.
Abb. 12.14: Benutzung von Code-Ausschnitten
188
Neue Datei anlegen
Der so eingefügte Try-Catch-Block wird verwendet, um bei Dateioperationen sicherzustellen, dass eventuelle Fehler die Applikation nicht zum Absturz bringen können. Beispielsweise könnte ein Benutzer eine neue Datei auf einem USB-Stick speichern, den er während der Speicherung aus dem Gerät sieht. Das System fängt diesen Fehler zwar selbständig ab, wirft aber eine Ausnahme. In einem Try-Catch-Block kann so eine gesicherte Weiterverarbeitung innerhalb des Try-Blocks gewährleistet werden. Nun kann der Codeausschnitt für die Dateianlage im Try-Block angelegt werden. Öffnen Sie erneut den Codemuster-Assistenten und fügen Sie nun das Snippet DATEI ERSTELLEN aus dem Bereich DATEISYSTEM | VERARBEITEN VON LAUFWERKEN, ORDNERN UND DATEIEN ein (Abbildung 12.15).
Abb. 12.15: Codeausschnitt Datei erstellen
Der auf diese Art eingefügte Codeausschnitt sieht so aus: My.Computer.FileSystem.WriteAllText("C:\Test.txt", String.Empty, False)
Nun müssen Sie nur noch den fest verdrahteten Dateinamen durch den Wert der Variablen strFileName ersetzen und das Programm kann fast schon ausgeführt werden. Die grüne Hinterlegung im Bereich ApplictionException sollte Sie darauf aufmerksam machen, dass hier eine Standardausnahme des Code-Ausschnitts angelegt wurde. Dies sollten Sie noch an die konkret geworfene Ausnahme anpassen, wie in Listing 12.13 dargestellt ist.
Express Edition
189
12 – Praxis Listing 12.13: NeuToolStripMenuItem_Click vollständig ''' <summary> ''' Behandelt das Klicken auf den Menüpunkt ''' Datei>Neu ''' Private Sub NeuToolStripMenuItem_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles NeuToolStripMenuItem.Click SaveFileDialog1.Title = _ "Neue RTF-Datei anlegen" ' Anzeige des FileDialog If saveFileDialog1.ShowDialog() = _ Windows.Forms.DialogResult.OK Then 'Schreiben der neuen Datei mit 'FileSystem.WriteAllText Speicherung 'im Try-Catch-Block Try Me.FileName = SaveFileDialog1.FileName My.Computer.FileSystem.WriteAllText( _ Me.FileName, String.Empty, False) Me.TopLevelControl.Text = _ "RichTextEdit - " & _ SaveFileDialog1.FileName Catch ex As IOException Me.FileName = "" MsgBox("Es gibt Probleme beim " & _ "Erstellen der Datei " & _ SaveFileDialog1.FileName & _ vbCrLf & ex.Message) End Try End If End Sub
In Listing 12.13 sehen Sie das Ergebnis des Editierens. Es wurde noch das CatchStatement für eine IOExecption konfiguriert, da dies die Ausnahme ist, die beim Speichern einer Datei typischerweise ausgelöst werden kann.
190
Speichern implementieren
Hinweis Wenn ein Benutzer eine vorhandene Datei auswählt, gibt es von der SaveFile Dialog-Komponente eine entsprechende Rückfrage, die Sie nicht selbst programmieren müssen.
12.12 Speichern implementieren Jetzt fehlt nur noch die Speicherung, um die Funktionalität des Menüs zu komplettieren. Durch einen Doppelklick auf den Menüeintrag SPEICHERN können Sie den Code schreiben, der dessen Click-Ereignis behandelt (Listing 12.14). Listing 12.14: Speicherung mit SpeichernToolStripMenuItem_Click ''' <summary> ''' Behandelt das Klicken auf den Menüpunkt ''' Datei>Speichern ''' Private Sub SpeichernToolStripMenuItem_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles SpeichernToolStripMenuItem.Click 'Überprüfung, ob ein Dateiname existiert If Me.FileName.Length = 0 Then MsgBox("Es wurde kein Dateiname " & _ "gefunden. Bitte legen Sie eine " & _ "neue Datei an.") Return End If 'Speicherung mittels SaveFile() im Try-Catch-Block Try Me.RichTextBox1.SaveFile(Me.FileName, _ RichTextBoxStreamType.RichText) Catch ex As IOException MsgBox("Es gibt Probleme beim Speichern " & _ "der Datei " & Me.FileName & _ vbCrLf & ex.Message) End Try End Sub
Express Edition
191
12 – Praxis
Das Speichern gestaltet sich mit Hilfe der Methode SaveFile() der RichTextBox sehr einfach. Zuvor wird jedoch anhand des Werts der Eigenschaft FileName geprüft, ob eine Datei geladen wurde oder neu angelegt wurde. Ist noch kein Dateiname vorhanden, wird eine entsprechende Fehlermeldung ausgegeben.
12.13 Weitere Funktionalitäten für den Editor Wie Sie eine Ressource im PROJEKT-DESIGNER definieren können, wurde in diesem Kapitel schon gezeigt. Diese Ressource soll nun verwendet werden, um den Editor etwas zu verschönern. Ziehen Sie aus der TOOLBOX ein PictureBox-Steuerelement, das Sie im Bereich ALLGEMEINE STEUERELEMENTE finden können, auf das Formular und positionieren Sie das Element links neben dem RichTextBox-Steuerelement.
Abb. 12.16: Ressource für PictureBox auswählen
192
Schriftarten-Dialog verwenden
Mit Hilfe der Eigenschaft Image der PictureBox-Instanz können Sie die zuvor angelegten Ressource einbinden. Wählen Sie zu diesem Zweck die Option PROJEKTRESSOUCENDATEI und selektieren Sie die gewünschte Ressource. Ein Klick auf die Schaltfläche OK übernimmt Ihre Auswahl. Ändern Sie zuletzt Position und Größe des PictureBox-Steuerelements, so dass das Bild gut zu sehen ist.
12.14 Schriftarten-Dialog verwenden Der SCHRIFTARTEN-DIALOG erlaubt eine Auswahl einer Schriftart, das Festlegen von deren Größe und die Definition einer Farbe. Um den Schriftarten-Dialog zu verwenden, ziehen Sie aus dem Bereich DIALOGFELDER der TOOLBOX das FontDialog-Steuerelement auf das Formular, wodurch automatisch die Instanz FontDialog1 erstellt wird. Binden Sie den Schriftarten-Dialog nun – zugegebenermaßen etwas praxisfern – durch einen Doppelklick auf das PictureBox-Steuerelement an dessen ClickEreignis. Implementieren Sie dabei den in Listing 12.15 dargestellten Code. Listing 12.15: Schriftauswahl und Zuweisung an den ausgewählten Text ''' <summary> ''' Behandelt das Klicken auf die PictureBox1 ''' Dient zur Auswahl einer Schriftart ''' Private Sub PictureBox1_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles PictureBox1.Click ' Aufruf der Schriftauswahl Me.FontDialog1.ShowApply = True Me.FontDialog1.ShowDialog() ' Zuweisung der gewaehlten Schrift ' an den gewaehlten Text Me.RichTextBox1.SelectionFont = FontDialog1.Font End Sub
Express Edition
193
12 – Praxis
Per FontDialog1.ShowApply wird der ÜBERNEHMEN-Button angeschaltet und danach wird der Dialog angezeigt. Die Fontzuweisung nach dem Verlassen des Dialogs ist dann vergleichsweise trivial: Der Wert der Eigenschaft Font des Dialogs kann der Eigenschaft SelectionFont des RichTextBox-Steuerelements zugewiesen werden. Sämtliche anderen Vorgänge werden innerhalb der Steuerelemente gekapselt. Wenn Sie nun das Programm starten und einen Text auswählen, erscheint nach einem Klick auf das Ballonbild die Schriftauswahl. Wählen Sie eine andere Schriftart aus und übernehmen Sie die Auswahl. Als Ergebnis wird der ausgewählte Text mit der neuen Schrift formatiert.
12.15 Container Die TOOLBOX enthält einen Abschnitt mit Containern, mit deren Hilfe die Anordnung von Elementen eines Formulars geändert werden kann. Derzeit zeigt das Formular noch eine unschöne Eigenheit: Wenn Sie es starten und verkleinern, dann wird das RichTextBox-Steuerelement über das PictureBoxSteuerelement geschoben. Um dies zu verhindern, kann ein FlowLayoutPanel-Steuerelement verwendet werden. Verkleinern Sie zu diesem Zweck das RichTextBox-Steuerelement und weisen Sie der Eigenschaft Dock den Standardwert (links und oben) zu. Ziehen Sie nun ein FlowLayoutPanel-Steuerelement auf das Formular. Verschieben Sie anschließend die beiden anderen Elemente in das Panel. Abschließend docken Sie das Panel am übergeordneten Container an und justieren die Größe der beiden Steuerelemente. Starten Sie das Programm und verändern Sie die Größe des Fensters. In der Abbildung 12.17 wurde die Breite des Fensters soweit verringert, bis die beiden Elemente nicht mehr nebeneinander passten. Das FlowLayoutPanel-Steuerelement sorgt in diesem Fall für die Darstellung untereinander. Dieses Verhalten lässt sich abschalten, wenn Sie die Eigenschaft WrapContents den Wert False zuweisen. Nun bleibt das Fenster immer so breit, dass beide Elemente nebeneinander passen.
194
Veröffentlichen der Anwendung
Abb. 12.17: FlowLayoutPanel in Aktion
12.16 Veröffentlichen der Anwendung Der Projekt-Designer hält eine ganz besondere Funktion als letzten Eintrag, für die Veröffentlichung von Projekten bereit. Diese Funktion ist über ERSTELLEN | RICHTEXTEDIT VERÖFFENTLICHEN und im Projektmappen-Explorer mittels Kontextmenü | VERÖFFENTLICHEN erreichbar. Die Veröffentlichung vereinfacht die Installation auf anderen Rechnern erheblich, da diese Funktion automatisch ein Setup für das Programm inklusive aller benötigten Dateien erstellt. Abbildung 12.18 zeigt das Eigenschaftsfenster des RichTextEdit-Projekts. Klicken Sie hier auf die Schaltfläche OPTIONEN und geben Sie als PRODUKTNAME RichTextEditDemo ein. Danach rufen Sie den WEBPUBLISHING-ASSISTENT auf. Übernehmen Sie alle Voreinstellungen des Assistenten und stellen Sie die Veröffentlichung fertig. Der Windows-Explorer zeigt Ihnen als Ergebnis der Veröffentlichung das Verzeichnis publish, das das Setup mit allen dazugehörigen Dateien enthält.
Express Edition
195
12 – Praxis
Abb. 12.18: Veröffentlichung von Projekten
Wenn das Setup gestartet wird, werden zunächst die die Anwendungsanforderungen überprüft. Für dieses Programm muss gewährleistet sein, dass das .NET Framework 2.0 installiert ist. Anschließend kommt eine Meldung, die darüber informiert, dass der Herausgeber des Programms nicht überprüft werden kann, da die Anwendung nicht signiert ist. Da Sie selber der Produzent der Anwendung sind, können Sie bedenkenlos auf INSTALLIEREN klicken und die Anwendung wird installiert und ausgeführt. Die Anwendung wird automatisch unter \Dokumente und Einstellungen\...\Lokale Einstellungen\Apps\2.0\ installiert und erhält einen Eintrag im Startmenü unter Programmen. Über SYSTEMSTEUERUNG | SOFTWARE kann das Programm später wieder bequem deinstalliert werden.
196
Fazit
12.17 Fazit Damit ist die Programmierung des Editors im Rahmen dieses Kapitels abgeschlossen. Sie haben festgestellt, dass sich mit einem Minimum an Code ein Maximum an Funktionalität implementieren ließ. Die richtige Kombination der vorhandenen Funktionalitäten von Visual Basic Studio Express führt zu schlanken und übersichtlichen Programmen mit hoher Funktionalität. Im Vergleich mit früheren Versionen von Visual Studio ist viel Arbeit eingespart worden. Die Funktionalitäten wurden meist in visueller Art und Weise umgesetzt – nur dort, wo es notwendig war, musste Code händisch implementiert werden. Für Entwickler bleibt festzuhalten: Die Implementierung ist einfacher denn je. Und das mit Hilfe einer kostenlosen Entwicklungsumgebung!
Express Edition
197
Index .NET-Version 50 .snippet 90 A Abfragedesigner 141 Abfragedesigner-Symbolleiste 141 AcceptButton 72 Access Datenbankdatei 135 AccessibleDescription 70 AccessibleName 69 AccessibleRole 70 alle Einstellungen anzeigen 32 alles speichern 35 allgemeine Steuerelemente 52 AllowDrop 72 alphabetische Reihenfolge Eigenschaften 64 Ändern von Datensätzen 139 Ansichts-Designer 22, 38 Anwendung veröffentlichen 195 Anwendungseinstellungen 68 ApplicationSettings 68 Assemblyinformationen 177 Assistent zum Hinzufügen neuer Datenquellen 146 Auf Datenbank zugreifen 138 Aufrufliste 129 Ausführungsposition festlegen 129 Ausnahmen 131 Ausnahmen konfigurieren 131 Ausschnitt einfügen 87 AutoCompletion 115, 121 AutoValidate 72
Express Edition
B BackColor Form-Steuerelement 67 Begrüßungsbildschirm 173 Benutzerdefinierter Komponentensatz bearbeiten 152 C c XML-Kommentar 116 CancelButton 72 Category-Attribut 66 CausesValidation 71 Click-Ereignis 48 Button 61, 79, 88 SplashScreen 176 ToolStripMenuItem 183 Close()-Methode 166 code XML-Kommentar 116 Code anzeigen 46 Codeausschnitte 79, 86 Codeausschnitt-Manager 87 Codeausschnitt-Manager erweitern 89 Code-Editor 86 Codemuster 86 CodeSnippets 79 Community-Foren 20 COM-Steuerelemente Toolbox 85 Container-Steuerelemente 54 ContextMenuStrip 73, 168 ContextMenuStrip-Steuerelement 56 ControlBox 71
199
Index D Darstellung Eigenschaften-Fenster 67 DataGridView-Steuerelement 145 DataSet 146 Daten Eigenschaften-Fenster 68 Datenbank anlegen 135 Datenbank öffnen 135 Datenbank-Explorer 135 Datenquelle definieren 146 DateTimePicker 52 DateTimePicker-Steuerelement 52 Debug/Release 49 Debuggen starten 45, 126 Debugging 125 Debug-Modus 45 Debug-Version 49 Deinstallation 15 Deployment 50 Diagrammbereich Abfragedesigner 142 DialogResult.Ok 82 DialogResult-Auflistung 81 Direkt-Fenster 128 Direktfenster 125, 127 Dispose 176 Dispose()-Methode 166 Dock 75 DockStyle 75 Dokumentationsdateien 119 Download 12 Doxygen 119 DropDownButton 56 E Eigenschaften 23, 63 Eigenschaften-Fenster 42, 63 Eigenschaftsfenster 23 Einfügen von Datensätzen 139
200
Eingabehilfen Eigenschaften-Fenster 69 Einstellungen exportieren 29 Einstellungen importieren 29 Einstellungen sichern 29 Einstellungen zurücksetzen 31 Einzelschritt 127, 130 Element umbenennen Toolbox 85 Elementauflistungs-Editor 58 Elemente SaveFileDialog 79 Elemente auswählen Toolbox 85 Enabled 73 Entwurf Eigenschaften-Fenster 70 Ereignis-Behandlungsmethode 47 Ereignis-Behandlungsmethoden 75 Ereignisse 63, 75, 166 Ergebnisbereich Abfragedesigner 145 Erste Schritte 18 EventHandler 48 example XML-Kommentar 116 exception XML-Kommentar 117 F Fenster im Hintergrund 25 Fenster verschieben 26 Fensterstil Eigenschaften-Fenster 71 Filter OpenFileDialog 185 SaveFileDialog 84 FilterIndex OpenFileDialog 185 SaveFileDialog 84
Index FlowLayoutPanel 194 Fokus Eigenschaften-Fenster 71 FontDialog 193 G Gehe zu 93 GenerateMember 70 Gruppenauswahl 41 H Haltepunkt 125 Haltepunkt entfernen 125 Haltepunkt setzen 125 Haltepunkt umschalten 125 HelpButton 71 Hyperlink 179 I Icon 71 If-Statement 81 ImeMode 73 Importieren Codeausschnitt-Manager 91 in Dateien ersetzen 108 Informationsquellen 20 InitialDirectory SaveFileDialog 84 Installation 11, 12 Installationsvoraussetzungen 11 IntelliSense 115, 121 Interval Timer 59 IOExecption 190 IsMDIContainer 71 ISO-Image 12 K Kategorien Eigenschaften 64 KeyPreview 72
Express Edition
Klassenansicht 149 Komponenten Toolbox 59 Komponentensatz definieren Objektbrowser 152 Kriterienbereich Abfragedesigner 143 L Layout Eigenschaften-Fenster 72 Layout-Symbolleiste 27 Lesezeichen 93, 101 Lesezeichen-Fenster 101 LinkClicked-Ereignis RichTextBox 179 Load-Ereignis 47 Formular 167 SplashScreen 176 LoadFile() RichTextBox 185 Location 72 Locked 70 Lokal-Fenster 127 Löschen von Datensätzen 139 M MainMenuStrip 71 MaximizeBox 71 Member automatisch auflisten 123 MenuStrip 163, 164 MenuStrip-Steuerelement 56 MessageBox 49 Microsoft Developer Network 20 MinimizeBox 71 MSDN 20 MSDN Library 13 My 181
201
Index N Nachrichtenbereich 17 Name 70 NDoc 119 neue Abfrage 141 neues Projekt 33 neues Projekt anlegen 33 NotifyIcon 53 NotifyIcon-Steuerelement 53 O Oberfläche einrichten 24 Objektbrowser 23, 149 Objektmappen-Explorer 23 Opacity 71 OpenFileDialog 182 Optionen 31 Ordnersatz 106 P Padding 72 param XML-Kommentar 117 Parameterinformationen 123 PictureBox 192 Platzhalter verwenden Suche 96 Private 183 Programm ausführen 45 ProgressBar 56 Projekt speichern 35 Projektbereich 18 Projektdateien 35 Projektdatenquelle hinzufügen 146 Projekt-Designer 174 Projekte 18 Projektmappen-Explorer 22, 37, 46 Projektmappenname 36 Projektname 36 Projektverzeichnis 19
202
Projektvorlagen 19, 33 PropertyBindings 68 Prozedurschritt 127, 130 Q Quelltext bearbeiten 46 R Register 24 Registerkarte Toolbox 84 Reguläre Ausdrücke Suche 97 Suchen-und-Ersetzen-Dialog 103 Release-Version 49 remarks XML-Kommentar 117 Ressource hinzufügen 181 Ressourcen 181 Ressources My 181 returns XML-Kommentar 118 RichTextBox 163, 164 RTF 179 Rtf RichTextBox 167 RtfSaveFileDialog 85 S SaveFile()-Methode 192 SaveFileDialog 79, 187 Schnellersetzung 102 Schnellüberwachung 127 Schriftarten und Farben 32 see XML-Kommentar 118 seealso XML-Kommentar 118 Select Case 87 Setup erstellen 195
Index ShortCutKeys 74 ShowDialog() OpenFileDialog 185 ShowDialog()-Methode 81 ShowIcon 71 ShowInTaskbar 71 Shown-Ereignis SplashScreen 175 Size 72 SizeGripStyle 71 Sleep() Thread-Klasse 175 Sonstiges Eigenschaften-Fenster 72 Speicherort 35 SplitButton 56 SQL Server Datenbankdatei 135 SQL Server Express Edition 13 SQL-Bereich Abfragedesigner 144 Standard-Ereignis 76 Standardereignis 48 StartPosition 72 Startseite 17 StatusStrip 56 Steuerelemente 51 Stop-Anweisung 132 Suche 93 Suchen im Objektbrowser 150 Suchen in Symbolsuche 110 Suchen in Dateien 104 Suchen nach 94 Suchen und Ersetzen in Dateien 108 Suchen und Ersetzen-Dialog 102 Suchen-Dialog 93 Suchordner festlegen 105 summary XML-Kommentar 116
Express Edition
Symbolleiste Layout 41 Symbolleisten 27 Symbolsuche 110 T TabControl-Steuerelement 54 Tabellendaten anzeigen 139 TabPage-Auflistungs-Editor 55 TabPage-Steuerelement 54 Text TabPage 54 Text-Editor 101 Tick-Ereignis Timer 60 Timer-Steuerelement 59 Title SaveFileDialog 187 Toolbox 22, 39, 51, 79 Toolbox zurücksetzen 85 Toolbox-Elemente hinzufügen 84 ToolStrip 56 ToolStripMenuItem 73 ToolTipText 73 TopMost 71 TransparencyKey 71 Try-Catch 185, 189 U Überwachen-Fenster 127 Überwachung hinzufügen 127 Umgebungseinstellungen exportieren 29 Umgebungseinstellungen importieren 30 Untergeordnete Ordner durchsuchen 107
203
Index V Value DateTimePicker 52 value XML-Kommentar 118 Verbindung hinzufügen 135 Verhalten Eigenschaften-Fenster 72 Visual-Basic-Express-Headlines 18 W Webpublishing-Assistent 195 Windows-Anwendung 33 WindowState 72 WrapContents FlowLayoutPanel 194
204
X XML-Kommentare 115 Z Zeilennummern anzeigen 32 zuletzt geöffnete Projekte 18