Addison.wesley.das.Visual.basic.2008.Codebook.dec.2008.GERMAN.retaiL.ebook sUppLeX

1201
Das Visual Basic 2008 Codebook Visual Studio Professional 2008 Edition (90-Tage-Testversion) JOACHIM FUCHS ANDREAS BARCHFELD

Transcript of Addison.wesley.das.Visual.basic.2008.Codebook.dec.2008.GERMAN.retaiL.ebook sUppLeX

JOACHIM FUCHS ANDREAS BARCHFELD

Das Visual Basic 2008 Codebook

Visual Studio Professional 2008 Edition (90-Tage-Testversion)

Das Visual Basic 2008 Codebook

Dr. Joachim Fuchs, Andreas Barchfeld

Das Visual Basic 2008 Codebook

Bibliografische Information Der Deutschen Bibliothek Die Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet ber abrufbar.

Die Informationen in diesem Produkt werden ohne Rcksicht auf einen eventuellen Patentschutz verffentlicht. Warennamen werden ohne Gewhrleistung der freien Verwendbarkeit benutzt. Bei der Zusammenstellung von Texten und Abbildungen wurde mit grter Sorgfalt vorgegangen. Trotzdem knnen Fehler nicht vollstndig ausgeschlossen werden. Verlag, Herausgeber und Autoren knnen fr fehlerhafte Angaben und deren Folgen weder eine juristische Verantwortung noch irgendeine Haftung bernehmen. Fr Verbesserungsvorschlge und Hinweise auf Fehler sind Verlag und Herausgeber dankbar. Alle Rechte vorbehalten, auch die der fotomechanischen Wiedergabe und der Speicherung in elektronischen Medien. Die gewerbliche Nutzung der in diesem Produkt gezeigten Modelle und Arbeiten ist nicht zulssig.

Fast alle Hardware- und Softwarebezeichnungen und weitere Stichworte und sonstige Angaben, die in diesem Buch verwendet werden, sind als eingetragene Marken geschtzt. Da es nicht mglich ist, in allen Fllen zeitnah zu ermitteln, ob ein Markenschutz besteht, wird das -Symbol in diesem Buch nicht verwendet. Umwelthinweis: Dieses Buch wurde auf chlorfrei gebleichtem Papier gedruckt. Die Einschrumpffolie zum Schutz vor Verschmutzung ist aus umweltvertrglichem und recyclingfhigem PE-Material.

10 9 8 7 6 5 4 3 2 1 11 10 09

ISBN 978-3-8273-2575-4

2009 by Addison-Wesley Verlag,

ein Imprint der Pearson Education Deutschland GmbH, Martin-Kollar-Strae 1012, D-81829 Mnchen/Germany Alle Rechte vorbehalten Korrektorat: Sandra Gottmann Lektorat: Brigitte Bauer-Schiewek, [email protected] Herstellung: Elisabeth Prmm, [email protected] Satz: Ksel, Krugzell (www.KoeselBuch.de) Umschlaggestaltung: Marco Lindenbeck, webwo GmbH ([email protected]) Druck und Verarbeitung: Ksel Krugzell (www.KoeselBuch.de) Printed in Germany

InhaltsverzeichnisVorwortDie Autoren Informationen zum Buch und Kontakt zu den Autoren

1516 16

Teil I EinleitungVon gestern bis heute Was sich mit Visual Basic .NET realisieren lsst und was nicht Inhalt des Buches

1719 21 21

Teil II RezepteBasics1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 Zahlen-, Zeichen- und String-Literale Ganzzahlen dual, oktal oder hexadezimal darstellen String mit dualer, oktaler oder hexadezimaler Darstellung in Zahlenwert wandeln Zahlenwerte formatieren Positive und negative Zahlen unterschiedlich formatieren Zusammengesetzte Formatierungen Format-Provider fr eigene Klassen definieren Ausgaben in lnderspezifischen Formaten Informationen zu lnderspezifischen Einstellungen abrufen Zeichenketten in numerische Typen wandeln Prfen, ob eine Zeichenkette einen numerischen Wert beinhaltet Grter und kleinster Wert eines numerischen Datentyps Berechnen der signifikanten Vorkommastellen Lange einzeilige Texte umbrechen Zahlenwerte kaufmnnisch runden berprfen, ob ein Bit in einem Integer-Wert gesetzt ist Bit in einem Integer-Wert setzen Bit in einem Integer-Wert lschen Bit in einem Integer-Wert einen bestimmten Zustand zuweisen Bit in einem Integer-Wert umschalten (togglen) Gesetzte Bits eines Integer-Wertes abfragen Nicht gesetzte Bits eines Integer-Wertes abfragen Boolean-Array aus Bitinformationen eines Integer-Wertes erzeugen Integer-Wert aus Bitinformationen eines Boolean-Arrays zusammensetzen Konvertierungen zwischen 8-Bit-, 16-Bit-, 32-Bit- und 64-Bit-Datentypen Basistyp fr Enumeration festlegen Enum-Werte ein- und ausgeben Bezeichner und Werte eines Enum-Typs abfragen Prfen, ob ein Zahlenwert als Konstante in einer Enumeration definiert ist

373939 40 41 41 42 42 43 44 46 49 50 51 52 54 55 57 58 59 59 60 61 61 62 63 64 68 69 71 72

6

>> Inhaltsverzeichnis

30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68

Prfen, ob ein bestimmter Enumerationswert in einer Kombination von Werten vorkommt Auswahllisten mit Enumerationswerten aufbauen Objekte eigener Klassen vergleichbar und sortierbar machen Binre Suche in Arrays und Auflistungen Strings in Byte-Arrays konvertieren und vice versa Ersatz fr unvernderliche (konstante) Zeichenketten-Arrays Umgang mit Datum und Uhrzeit Schaltjahre Wochentag berechnen Beginn einer Kalenderwoche berechnen Anzahl der Kalenderwochen eines Jahres bestimmen Berechnung der Kalenderwoche zu einem vorgegebenen Datum Berechnung des Osterdatums Berechnung der deutschen Feiertage Darstellung der Feiertage im Kalender-Steuerelement Gregorianisches Datum in julianische Tageszhlung Julianische Tageszhlung in gregorianisches Datum Datum und Uhrzeit im ISO 8601-Format ausgeben und einlesen Anwendungskonfiguration mit Visual Studio erstellen Konfiguration fr Datenbankverbindung speichern (mit und ohne Verschlsselung) Zustzliche Sektionen in der Konfigurationsdatei einrichten Lesen der Konfigurationsdatei machine.config Neue Anwendungseinstellungen Zentrales Exception-Handling Outline-Schrift erzeugen Text im Kreis ausgeben und rotieren lassen Schriftzug mit Hintergrundbild fllen Transparente Schriftzge ber ein Bild zeichnen Blockschrift fr markante Schriftzge Text mit versetztem Schatten zeichnen Schriftzug perspektivisch verzerren Font-Metrics zur exakten Positionierung von Schriftzgen ermitteln Schatten durch Matrixoperationen erzeugen Rechtecke mit abgerundeten Ecken zeichnen 3D Schriften erzeugen 3D- und Beleuchtungseffekte auf strukturierten Hintergrundbildern Bilder zeichnen Bildausschnitt zoomen Basisklasse fr eine Diashow

72 72 74 78 79 81

Datum und Zeit

8383 88 88 89 90 91 93 95 106 109 111 114

Anwendungen

117117 125 128 130 132 132

Mit GDI+ zeichnen

135135 136 141 144 147 149 151 153 156 159 162 164

GDI+-Bildbearbeitung

169169 172 176

>> Inhaltsverzeichnis

7

69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113

Horizontal und vertikal berblenden Diagonal berblenden Elliptische berblendung berblendung durch zufllige Mosaik-Muster berblendung durch Transparenz Bilder verzerrungsfrei maximieren Blockierung der Bilddatei verhindern Ordnerauswahl mit Miniaturansicht der enthaltenen Bilder Drehen und spiegeln von Bildern Encoder fr verschiedene Dateiformate zum Speichern von Bildern ermitteln Bilder im JPEG-Format abspeichern Bilder im GIF-Format speichern Thumbnails fr Webseiten erstellen Invertieren eines Bildes Farbbild in Graustufenbild wandeln Weitere Bildmanipulationen mithilfe der ColorMatrix Bitmap-Daten in ein Array kopieren Array in Bitmap kopieren Allgemeiner Schrfefilter Schrfe nach Gau Schrfe mittels Sobel-Filter Schrfe mittels Laplace-Filter Kirsch und Prewitt-Filter Der Boxcar-Unschrfefilter Adaptive Schrfe Fenster ohne Titelleiste anzeigen Fenster ohne Titelleiste verschieben Halbtransparente Fenster Unregelmige Fenster und andere Transparenzeffekte Startbildschirm Dialoge kapseln Gekapselter Dialog mit bernehmen-Schaltflche Dialog-Basisklasse Validierung der Benutzereingaben Screenshots erstellen TextViewer-Klasse RTFTextViewer-Klasse PictureViewer-Klasse HTML-Viewer Drag&Drop-Operationen aus anderen Anwendungen ermglichen Analyseprogramm fr Drag&Drop-Operationen aus anderen Anwendungen Anzeigen von Daten aus der Zwischenablage Exportieren von Daten ber die Zwischenablage Exportieren von Daten ber Drag&Drop Eingabetaste in TextBox abfangen

182 187 190 192 195 197 203 205 219 221 222 224 225 227 228 230 230 233 235 238 241 242 243 244 245

Windows Forms

249249 249 251 251 255 259 264 267 271 277 282 285 287 290 293 295 302 303 304 307

8

>> Inhaltsverzeichnis

114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153

Pfade so krzen, dass sie in den verfgbaren Bereich passen Ein WPF-Control unter WinForms nutzen Medienfiles per WPF in WinForms Ersatz fr VB6-Control-Arrays Controls-Auflistung eines Fensters oder Container-Controls durchlaufen Ereignisse fr Steuerelementgruppen im Designer festlegen Steuerelement ber seinen Namen auffinden ListBox-Items selber zeichnen Mehrspaltige Drop-down-Liste (ComboBox) Basisklassen fr selbst definierte Steuerelemente Ein Label als Beispiel fr die Erweiterungsmglichkeit vorhandener Controls Benutzersteuerelement als Container fr andere Steuerelemente Scroll-Balken eines Benutzersteuerelementes im Design-Mode verfgbar machen Benutzersteuerelemente und die Texteigenschaft PanelGroupPictureBox ein Steuerelement fr alle Flle Einem Benutzersteuerelement ein Icon zuweisen Transparenz eines Steuerelementes im Designer einstellen Abfangen von Windows-Nachrichten Steuerelement fr Verzeichnisauswahl Ein Windows-Explorer-Steuerelement im Eigenbau ListView des Explorer-Steuerelementes sortieren FolderBrowser-Steuerelement mit zustzlichen CheckBoxen zum Aufbau von Verzeichnislisten Benutzerdefinierte Steuerelemente mit nicht rechteckigem Umriss Mausposition in kreisfrmigen Steuerelementen in Winkel umrechnen Mausereignisse zur Entwurfszeit abfangen Ein Steuerelement zur grafischen Anzeige von Zeitbereichen programmieren Neue Zeitscheiben zur Laufzeit mit der Maus hinzufgen Nachrichten verschicken mit SendMessage Zeilen ermitteln, wie sie in einer mehrzeiligen TextBox dargestellt werden Anzahl der Zeilen einer mehrzeiligen TextBox ermitteln Zeilenindex aus Zeichenindex ermitteln (mehrzeilige TextBox) Index des ersten Zeichens einer Zeile ermitteln (mehrzeilige TextBox) Index der ersten sichtbaren Zeile einer mehrzeiligen TextBox bestimmen Zeichenindex aus Grafikkoordinaten berechnen (mehrzeilige TextBox) Koordinate eines Zeichens ermitteln (mehrzeilige TextBox) Mehrzeilige TextBox per Code auf- und abwrts scrollen Tabulatorpositionen in einer mehrzeiligen TextBox setzen Grundlegende Attribute Eigenschaften mehrerer Objekte gleichzeitig anzeigen Abfangen ungltiger Werte

309 314 320

Windows Controls

325325 328 330 331 332 335 338 339 341 342 342 343 350 351 351 357 368 373 380 390 392 396 397 408 412 412 415 415 416 416 417 418 419 419

Eigenschaftsfenster (PropertyGrid)

421421 426 427

>> Inhaltsverzeichnis

9

154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198

Standardwerte fr Eigenschaften Festlegen einer Standardeigenschaft Eigenschaften gegen Vernderungen im PropertyGrid-Control schtzen Enumerationswerte kombinieren Geschachtelte expandierbare Eigenschaften Drop-down-Liste mit Standardwerten fr Texteigenschaften Visualisierung von Eigenschaftswerten mit Miniaturbildern Einen eigenen Drop-down-Editor anzeigen Eigenschaften ber einen modalen Dialog bearbeiten Datei ffnen-Dialog fr Eigenschaften bereitstellen Auflistungen anzeigen und bearbeiten Aktionen ber Smart-Tags anbieten Eigenschaften dynamisch erstellen und hinzufgen Eigenschaften in unterschiedlichen Sprachen anzeigen (Lokalisierung) Neue Tab-Flchen hinzufgen Die Bibliothek Systemverzeichnisse mit .NET Anwendungs-/Bibliotheksname des laufenden Prozesses Existenz eines Verzeichnisses Verzeichnis erstellen Verzeichnis lschen Verzeichnis umbenennen/verschieben Verzeichnis kopieren Verzeichnisgre mit Unterverzeichnissen Existenz einer bestimmten Datei 8.3 Dateinamen Datei umbenennen/verschieben Datei kopieren Dateiversion feststellen Dateigre Dateien vergleichen Temporre Dateinamen Datei in mehreren Verzeichnissen suchen am Beispiel der Verzeichnisse von PATH Dateiinformationen mit File System Object Laufwerksinformationen mit FSO Delimited Dateien nach XML transformieren berwachung des Dateisystems Dateiattribute Bestandteile eines Pfads ermitteln Absolute und gekrzte (kanonische) Pfade ermitteln Relativen Pfad ermitteln Icons und Typ einer Datei ermitteln Dateien kopieren, verschieben, umbenennen und lschen mit SHFileOperation Dateien mit LINQ abfragen Anzahl der Verzeichnisse mit LINQ

429 430 430 431 432 437 439 441 444 449 451 459 463 471 475

Dateisystem

479479 483 485 487 489 490 490 492 494 497 498 500 501 502 505 506 510 512 514 516 518 521 524 529 530 532 533 538 547 548

10

>> Inhaltsverzeichnis

Netzwerk199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 IPv4-Adressen nach IPv6 umrechnen IPv6-Adressen nach IPv4 umrechnen IP-Adresse eines Rechners Netzwerkadapter auflisten Freigegebene Laufwerke anzeigen Web-Service Internet Explorer starten FTP-Verbindungen per Programm Vorbemerkung WMI Namensrume WMI-Klassen Ist WMI installiert? BIOS-Informationen Computer-Modell Letzter Boot-Status Sommer-/Winterzeit Computerdomne Domnenrolle Benutzername Monitorauflsung Der Monitortyp Auflsung in Zoll Logische Laufwerke mit WMI Physikalische Platten Installierte Programme Programm ber Namen starten Programm ber Datei starten Parameterbergabe per Befehlszeile Systemprozesse mit WMI Systemprozesse mit System.Diagnostics Liste aller Dienste Liste aller Prozesse mit LINQ Dienst starten Dienst anhalten Dienst fortsetzen Dienst stoppen Prozess abbrechen (killen) Leistungsberwachung/Performance Counter Registry-Eintrge abfragen Registry-Key anlegen Registry-Key lschen Informationen zum installierten Betriebssystem Prozessorgeschwindigkeit Prozessorauslastung Bitbreite des Prozessors Prozessorinformationen

551551 553 555 556 558 560 563 564

System/WMI

573573 574 575 576 577 582 583 584 584 585 586 588 589 590 591 595 599 602 603 604 606 609 613 615 616 619 620 621 623 625 629 630 631 632 638 639 640 640

>> Inhaltsverzeichnis

11

245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276

Prozessorinformationen mittels LINQ to WMI SMTP E-Mail Logon-Sessions mit XP Erreichbare SQL-Server Default-Anmeldung am SQL-Server NT-Security-Anmeldung am SQL-Server SQL-Server-Anmeldung Datenbanken eines Servers Datenbank festlegen Tabellen einer Datenbank Felder einer Tabelle Einfaches Backup einer Datenbank Einfaches Zurcksichern einer Datenbank Erstellen eines Backup-Devices Datensicherung auf ein Backup-Device Liste der Backup-Devices Rcksicherung von einem Backup-Device Erstellen einer Datenbank Erstellen eines T-SQL-Datenbank-Skriptes Erstellen eines Jobauftrages Auflistung der vorhandenen Jobauftrge Tabellenindizes Bilder in Tabellen abspeichern DataGrid fllen MDAC-Version ermitteln Excel als Datenbank abfragen Verbindung zu einer Datenbank mit SMO Datenbankserver und Backup im Netz abfragen Prozesse/User eines DB-Servers mit SMO abfragen Neue Tabelle mit SMO erstellen Datenbanktabellen auf Konsistenz prfen SQL-Aktivitten mitprotokollieren Schreiben von XML-Dateien mit dem XmlTextWriter Lesen von XML-Dateien mit dem XmlTextReader Bilder und andere Binrdaten in XML-Dateien speichern Bilder und andere Binrdaten aus XML-Dateien lesen XML-Dateien lesen mit XmlDocument Hinzufgen, Entfernen und ndern von Knoten mit XmlDocument XmlDocument mit XPath-Ausdrcken durchsuchen XPath-Abfragen und XML-Namespaces Schnellere Suche mit XPathDocument und XPathNavigator XmlView-Steuerelement zur strukturierten Darstellung von XML-Dateien Nachrichten aus RSS-Kanlen aufbereiten Das Wichtigste der Tagesschau im User-Control XML-Dateien validieren

641 645 646

Datenbanken

649650 652 653 654 655 655 656 656 657 658 659 661 663 663 665 668 670 676 677 679 682 683 685 687 689 691 693 696 697

XML277 278 279 280 281 282 283 284 285 286 287 288 289

701701 705 709 712 713 716 718 724 728 731 738 745 750

12

>> Inhaltsverzeichnis

290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335

XSL-Transformationen XSL-Transformation mit Parametern Einer XSL-Transformation zustzliche Funktionen bereitstellen Parallelbetrieb von XmlDataDocument und DataSet Klassenhierarchie aus XML-Schema erzeugen Serialisierung mithilfe der Klasse XmlSerializer Unbekannte XML-Inhalte bei der Deserialisierung mit dem XmlSerializer Serialisierung mithilfe der Klasse SoapFormatter XML aus CSV mittels LINQ erzeugen XML-Datei mit LINQ4XML lesen XML-Elemente mit LINQ4XML ndern XML-Attribute hinzufgen und ndern mit LINQ4XML XML-Eintrag und -Attribut lschen mit LINQ4XML XML-Dokument abspeichern mit LINQ4XML XML-Dokument mittels LINQ4XML abfragen Gleitkommazahlen vergleichen Typsichere Maeinheiten Definition von Lngenmaen Entfernungen und Hhen differenzieren Definition von Flchenmaen Definition von Volumen Definition von Zeiten Definition von Geschwindigkeiten Definition von Temperaturen Definition von Winkeln Universeller Umrechner fr Maeinheiten Zweidimensionale Gleichungssysteme Mehrdimensionale Gleichungssysteme Vektorrechnung im 2D Schnittstelle fr darstellbare geometrische Formen Geraden Schnittpunkt zweier Geraden berechnen Strecken Schnittpunkt einer Geraden mit einer Strecke berechnen Schnittpunkt zweier Strecken Definition von Kreisen Schnittpunkte zweier Kreise Schnittpunkte eines Kreises mit einer Geraden berechnen Schnitt eines Kreises und einer Strecke Geschlossene Polygone Annherung eines Kreises durch ein Polygon Schnittpunkte eines geschlossenen Polygons mit einer Geraden berechnen Schnittpunkte eines Polygons mit einer Strecke Schnittpunkte eines Polygons mit einem Kreis Schnittpunkte zweier Polygone Formen per Vektorrechnung generieren

757 761 763 765 768 769 775 776 780 783 784 785 786 787 787

Wissenschaftliche Berechnungen und Darstellungen

793793 796 812 823 825 828 830 832 834 835 842 850 854 860 868 868 874 878 881 883 886 888 891 896 898 905 906 908 909 910 912

>> Inhaltsverzeichnis

13

336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377

Pfeile mit Verlauf zeichnen Linien von Polygonzgen dekorieren Skalierung fr Diagramme berechnen Schnittstelle fr Datenquellen mit typsicheren physikalischen Werten Einfaches T-Y-Diagramm mit statischen Werten Kontinuierliches T-Y-Diagramm mit dynamischen Werten Die Zahl Pi Lngen- und Breitengrade Abstand zwischen zwei Punkten auf der Erdkugel berechnen Bestimmung der Marschrichtung User-Control zur Eingabe von Koordinaten Erweiterung des User-Controls PositionUC SRTM-Hhendaten Daten von GPS-Empfngern auswerten Logger fr GPS-Daten Online-Karten anzeigen (Microsoft Virtual Earth)I Basiseinstellungen mit Yahoo! Maps Basiseinstellungen mit Google Maps Sanftes Scrollen der Kartenansicht Markierungen in der Kartenansicht setzen Shapes ein- und ausschalten sowie entfernen Polylinien auf der Kartendarstellung zeichnen Optimale Ansicht fr eine Polylinie whlen Click-Events fr Shapes nutzen Eigenschaften einer Grafikkarte Check auf Display-Format DirectX-Matrizen Ein einfacher Torus Komplexe Grafiken Sound abspielen Sinustne erzeugen und abspielen Noten spielen Melodien abspielen Trace- und Debug-Ausgaben ber Config-Datei steuern Debug- und Trace-Ausgaben an eine Textbox weiterleiten Debug- und Trace-Ausgaben in einer Datei speichern Debug- und Trace-Ausgaben an das EventLog weiterleiten Eigene EventLogs fr die Ereignisanzeige anlegen und beschreiben EventLog berwachen und lesen Leistungsindikatoren anlegen und mit Daten versorgen Zeiten mit hoher Auflsung messen API-Fehlermeldungen aufbereiten

914 916 919 923 926 940 949

Geodaten

953953 960 962 964 972 974 979 997 1002 1023 1028 1032 1033 1047 1049 1054 1056

DirectX

10591060 1064 1065 1072 1081

Verschiedenes

10871087 1089 1093 1095 1101 1103 1106 1107 1109 1111 1113 1118 1120

14

>> Inhaltsverzeichnis

Teil III AnhangVisual Basic .NETKlassen Referenzen Objekte Strukturen (Wertetypen) (Instanz-)Methoden Statische Methoden und statische Variablen Module Eigenschaften (Properties) Vererbung Generische Datentypen Nullable (Of T) Anonyme Typen Arrays Listen (Object-basiert) Generische Listen Multithreading CLS-Kompatibilitt

112311251125 1127 1127 1129 1129 1130 1131 1136 1138 1139 1140 1148 1152 1154 1154

Visual StudioTexte in der Toolbox zwischenspeichern Standardeinstellungen fr Option Strict Projektweite Imports-Einstellungen Steuerelemente und Fensterklasse im Entwurfsmodus debuggen Verknpfung einer Datei einem Projekt hinzufgen Tabellenansicht einer XML-Datei XML-Schema fr vorhandene XML-Datei erstellen und bearbeiten Navigation ber die Klassenansicht Klassendiagramme

11571157 1157 1159 1160 1163 1164 1165 1166 1167

InternetquellenWebsites zu .NET Newsgroups Recherche mit Google

11691169 1170 1171

Grundlagen weiterer TechnologienKurzer berblick ber WMI XML DOM-Grundlagen

11731173 1177

API-Funktionen Stichwortverzeichnis

1179 1187

VorwortDas Abenteuer geht weiter! Vor Ihnen liegt die dritte Auflage des Visual Basic .NET Codebooks. Die Historie des .NET hat sich seit der Version 2.0 etwas chaotischer entwickelt, sodass dieses Buch erst mit der Version des .NET 3.5 SP1 erscheint. Waren die Versionen 1.0 und 2.0 noch reale Versionswechsel, so kann dies danach nicht mehr so eindeutig gesagt werden. So wre die Version 3.0 eigentlich eine Version 2.1 gewesen, hnlich der Version 1.1. Erst mit der Version 3.5 kamen wirklich neue Dinge ins Spiel. Diese Version htte eigentlich die glatte Versionsnummer verdient. Und .NET 3.5 SP1 bringt wieder neue Klassen und Funktionalitten ein, msste also schon die Versionsnummer 3.6 (also eigentlich 3.1) tragen. Auch der Umfang des .NET Frameworks hat sich ber die Versionen stark vergrert. Hatte die Version 1.0 vom Januar 2002 fr das Installationspaket noch rund 20 MB Gre, so sind es bei der Version 3.5 schon knapp 200 MB. Daran kann man erkennen, dass Microsoft das .NET erheblich erweitert hat. Eigentlich muss man hierzu noch die Gre der Version 2.0 hinzuzhlen. Denn war .NET 2.0 unabhngig von der Version 1.x, so gilt dies nicht mehr fr die Versionen 3.x. Wollte man die Zusammenhnge als Verkettung von Zeichenketten darstellen, she die Gleichung fr Version 3.5 SP1 so aus: V3.5SP1(komplett) := V3.5 & SP1 zu V3.5 & V3.0 & SP1 zu V3.0 & V2.0 & SP1 zu V2.0 Und schon steht die Ankndigung der nchsten Version im Raum . Am 29.09.2008 kndigte Microsoft die Version 4.0 und Visual Studio 2010 (Rosario) fr das Jahr 2010 an (http:// www.microsoft.com/presspass/press/2008/sep08/09-29VS10PR.mspx). Eine bersicht, was Microsoft zum jetzigen Zeitpunkt fr diese beiden Versionen plant, kann man unter der Webadresse http://msdn.microsoft.com/en-us/vstudio/products/cc948977.aspx finden. Eines ist sicher: Es bleibt spannend, und es gibt wieder das eine oder andere zu lernen. Dies gilt natrlich auch fr die jetzt vorliegende Version, die dieses Codebook behandelt. Wir haben die Rezepte an die neue Version angepasst bzw. haben zustzlich zur lteren Version die neuen Mglichkeiten hinzugefgt. Hintergrund ist, dass man auch mit den lteren Versionen noch arbeiten kann und vielfach auch muss. Nicht so sehr wegen Visual Basic an sich, sondern an den Restriktionen der Kunden und Anwender, neue Versionen nur sehr zgerlich oder erst einmal gar nicht einzusetzen. Wir sind gefragt worden, wie es denn berhaupt um Visual Basic steht. Dahinter steht die Befrchtung, dass man eine Sprache erlernt oder benutzt, die ein Nischendasein fristet. Vielen scheint die Sprache C# bermchtig. Darauf eine Antwort zu geben, ist verstndlicherweise schwierig. Zumal wir nicht an den Verhandlungstischen von Microsoft sitzen, an denen ber die Zukunft der einen oder anderen Sprache entschieden wird. Schaut man sich aber die Statistiken an, die man im Internet findet, steht es um Visual Basic nicht schlecht. Wenn auch hier der Satz gilt, dass man nur der Statistik trauen soll, die man selber geflscht hat (Winston Churchill zugeschrieben). Schaut man in die September-Statistik von TIOBE (http://www.tiobe.com/ index.php/content/paperinfo/tpci/index.html), so belegt Visual Basic nach Java, C und C++ den vierten Platz. C# folgt auf Platz 8. Vor C# kommen erst noch PHP, Python und Perl (in dieser Reihenfolge). Geht man nach der Site Programming Language Popularity (http://www.langpop.com/), sieht die Verteilung etwas anders aus. Die Reihenfolge ist dort: C, Java, C++, PHP, JavaScript, SQL, Python, Perl, Ruby und dann erst an 10. und 11. Stelle C# und Visual Basic. Wie

16

Vorwort

man es auch nimmt, Visual Basic hat einen prominenten Platz in der Riege der Programmiersprachen. Bei der Vielfalt an Namensrumen und Klassen mussten wir zwangslufig eine Auswahl treffen. Wir hoffen, mit der getroffenen Themenauswahl auch Ihren Anforderungen an ein solches Buch gerecht zu werden. Sollten Sie etwas vermissen, Fehler bemerken oder sonstige Anregungen haben, schreiben Sie uns. Sie erreichen uns entweder ber den Verlag oder die nachfolgend genannten Internet-Adressen. Bleibt uns nur noch, Ihnen viel Spa bei der Lektre und gutes Gelingen bei der Programmierung mit Visual Basic .NET zu wnschen.

Die AutorenDr. Joachim Fuchs ist selbststndiger Softwareentwickler, Autor und Dozent, seit 2001 mit dem Schwerpunkt Softwareentwicklung mit .NET. Sein umfangreiches Wissen gibt er unter anderem in Seminaren, in den Microsoft Newsgroups und in Form von Fachartikeln fr verschiedene Zeitschriften weiter. Sie erreichen ihn ber seine Homepage http:// www.fuechse-online.de/beruflich/index.html.

Andreas Barchfeld ist IT-Leiter in einem Hamburger Krankenhaus und verfgt ber mehrere Jahre Erfahrung als Systemund Organisationsprogrammierer im Bereich Windows und Unix. Er beschftigt sich seit dem Erscheinen der .NET-BetaVersion 2001 mit diesem Programmierumfeld. Seine Schwerpunkte in diesem Bereich liegen bei VB, C++ und Datenbanken. Sie erreichen ihn ber seine Homepage http:// www.barchfeld-edv.com.

Informationen zum Buchber die nachfolgend genannten Links finden Sie aktuelle Informationen zum Buch. http://www.fuechse-online.de/vbcodebook/index.html http://vbcodebook.barchfeld-edv.com

Teil I Einleitung

EinleitungVon gestern bis heuteEin kleiner historischer Rckblick soll die Entstehungsgeschichte und die Ziele von Visual Basic .NET erlutern. Keine Angst, wir gehen hier nicht ins Detail, sondern skizzieren nur die Umstnde und Intentionen der Entwickler von Basic, Visual Basic und Visual Basic .NET.

10 LET A=4So oder hnlich kennen viele noch die ersten Basic-Programme. Auf Kleincomputern von Sinclair, Apple, Commodore usw. gab es bereits Ende der 70er-Jahre die ersten Basic-Interpreter. Basic war eine simple Programmiersprache, die jeder verstehen konnte und die alles Notwendige fr den blichen Bedarf mitbrachte. Whrend Fortran, Cobol etc. vorwiegend auf Grorechnern zu finden waren, gehrten Basic-Interpreter bald zur Standardausrstung der Homecomputer. Mit der unaufhaltsamen Weiterentwicklung hherer Programmiersprachen wie C, C++, Pascal und vielen anderen geriet Basic immer mehr in Vergessenheit, konnte man doch mit den neueren Sprachen wesentlich eleganter und sauberer programmieren als mit dem blichen BasicSpagetticode.

On Error GotoAls Microsoft begann, mit Windows das Betriebssystem mit einer grafischen Oberflche auszustatten, war man der festen berzeugung, dass die Zukunft der Programmierung mit der Sprache C fest verbunden sei. Windows selbst ist zum grten Teil in Standard-C programmiert worden. Auch die ersten Anwendungsprogramme wurden in C geschrieben. Bald stellte sich heraus, dass C fr Windows-Programme, die hauptschlich ereignisgesteuert sind, zu umstndlich war. So kam der Umstieg auf C++, um wenigstens die oft bentigten Vorgehensweisen in Klassenbibliotheken bereitstellen zu knnen. Aber auch der Umgang mit den (anfangs sehr vielen) Klassenbibliotheken war alles andere als einfach und hielt viele Programmierer davon ab, Windows-Programme zu entwickeln. Bentigt wurde eine einfache Sprache mit einer integrierten Entwicklungsumgebung, die alles bereithlt, um mal eben ein Fenster mit ein paar Steuerelementen anzulegen. So wurde Visual Basic ins Leben gerufen. Basic als zugrunde liegende einfache Programmiersprache, verbunden mit einer (zumindest spter) komfortablen Entwicklungsumgebung. Schon die Version 3 konnte viele Anwendungsflle abdecken, die bis dahin eine Domne der C-Programmierung waren. Was in VB fehlte, konnte man ber den direkten Aufruf von API-Funktionen ergnzen. VB selbst wurde stndig weiterentwickelt. Ab Version 4 kamen erste objektorientierte Anstze hinzu, die leider auch in der Version 6 noch lange nicht vervollstndigt worden sind. Der erste Ansatz, mit Komponenten in Form von VBX-Dateien Visual Basic erweiterbar zu machen, wurde bald wieder eingestellt und durch COM (Component Object Model) ersetzt (und spter in ActiveX umbenannt ).

Einleitung

20Einleitung

>> Von gestern bis heute

Mit COM war der erste Schritt zu einem Baukastensystem in Form beliebig zusammenstellbarer Komponenten getan. Mit VB erstellte Komponenten lassen sich auch heute noch in anderen Programmen verwenden. Bei den Office-Produkten wurde Visual Basic for Applications (VBA) zum Standard fr die Automatisierung. Durch die Verbreitung von VBA hat Visual Basic noch mehr an Bedeutung gewonnen.

Try Catch FinallyMit .NET hat Microsoft nun endlich eine umfangreiche sprachbergreifende Plattform geschaffen, die universell fr fast alle Bereiche der Softwareentwicklung einsetzbar ist. Aus den Erfahrungen, die bislang bei der Programmierung mit C++, VB und Java gesammelt wurden, entstanden die Bausteine des .NET-Konzeptes. Alle Programmiersprachen arbeiten mit demselben Typsystem. Definitionen wie CLS (Common Language Specification), CLR (Common Language Runtime), CTS (Common Type System) und die allen Sprachen gemeinsame Kompilierung in einen von JIT-(Just -in-Time-)Compilern auf dem jeweiligen Zielsystem bersetzten Zwischencode (MSIL Microsoft Intermediate Language) sorgt fr flexible Austauschbarkeit von Komponenten. Klassen, die in einer VB.NETKlassenbibliothek abgelegt sind, knnen in ein C#-Programm eingebunden, in ihm benutzt oder gar durch Vererbung erweitert werden und vice versa. Aber auch jede andere Programmiersprache, die intern auf den Regeln des .NET aufbaut, kann eine so erstellte Bibliothek benutzen (Eiffel.NET, Perl.NET etc.). Die Sprachen selbst haben an Bedeutung verloren. Eine Programmiersprache dient lediglich zur Umsetzung von Algorithmen in lauffhige Programme. Das gesamte Umfeld, also die Erzeugung von Fenstern, die Zugriffe auf Datenbanken, die Zeichenoperationen und vieles, vieles mehr, ist nicht mehr Bestandteil der Sprache, sondern wird vom Framework, einer gewaltigen Klassenbibliothek, bereitgestellt. Unglcklicherweise hat man bei den alten VB-Versionen auch versucht, fehlende Funktionalitt von Basic in die Sprache Visual Basic einzubauen. So finden sich auch in VB.NET leider immer noch viele Altlasten in Form von Funktionen, die eigentlich nichts in der Programmiersprache zu suchen haben, sondern in den Aufgabenbereich des Betriebssystems fallen. Der eigentliche Wunsch, den Umsteigern von VB6 nach VB.NET zu helfen, indem man einen Groteil der alten Basic-Funktionen auch unter VB.NET verfgbar macht, schlgt leider allzu oft ins Gegenteil um. Ohne Hilfe ist kaum nachzuvollziehen, ob und wie eine Methode von der Programmiersprache auf das Framework abgebildet wird. Whrend der Schritt von C nach C++ hauptschlich darin bestand, auf die Sprache C einen objektorientierten Ansatz aufzupfropfen, wurde mit VB.NET quasi eine neue Sprache entwickelt, die mit VB6 und den Vorgngern (ab sofort VB Classic genannt) nur noch einen kleinen Teil der Syntax gemein hat. Das Verstndnis der objektorientierten Programmierung (OOP) ist Voraussetzung fr die Programmierung unter .NET, auch fr VB.NET. Selbst wenn man einfache Aufgaben mit der prozeduralen Vorgehensweise, wie sie leider bei der VB Classic-Programmierung vorherrschte, auch auf hnliche Weise mit VB.NET erledigen kann, stt man sehr schnell an Grenzen. Die Mglichkeiten des Frameworks lassen sich nur erschlieen, wenn man die wichtigsten OOP-Konzepte (Klassen Objekte Referenzen, Vererbung, Schnittstellen usw.) beherrscht. Auch wenn viele Rezepte in Form von Funktionen realisiert sind, verstehen sich diese Funktionen als Bestandteil einer bergeordneten Klasse.

>> Einleitung

21Einleitung

.NET wird konsequent erweitert und wchst stetig. Ende 2005 kam die Framework-Version 2.0 heraus und mit ihr viele neue Klassen und Funktionalitten. Generische Datentypen sind nun auch Bestandteil von .NET. Die Neuerungen machten auch vor den Sprachen nicht halt. Neue Designer fr Ressourcen und Konfigurationsdateien generieren automatisch Code, der viele Vorgnge vereinfacht. Speziell fr VB.NET gibt es den neuen Namensraum My, der besonders Neueinsteigern helfen soll, oft bentigte Methoden und Informationen schnell auffinden zu knnen. Auch die Nachfolgeversion 3.0 und 3.5 basieren auf der Common Language Runtime der Version 2.0 Spracherweiterungen, die in der Version 3.5 hinzugekommen sind, werden vollstndig vom Compiler auf die Version 2.0 umgesetzt. Zu den wesentlichen Erweiterungen zhlen WPF (Windows Presentation Foundation) und WCF (Windows Communication Foundation) in der Version 3.0 sowie LINQ (Language integrated query) in der Version 3.5.

Was sich mit Visual Basic .NET realisieren lsst und was nichtDa .NET alle Sprachen mit den gleichen Mglichkeiten ausstattet, hat sich das Einsatzgebiet von Visual Basic .NET gegenber VB Classic erheblich erweitert. Neben Windows-Applikationen und Klassenbibliotheken knnen Sie nun auch mit Visual Basic .NET Webanwendungen, Webservices und Konsolenanwendungen programmieren. Sogar Windows-Dienste sind realisierbar. Fr Handheld-PCs, die mit dem entsprechenden Framework ausgestattet sind, lsst sich ebenfalls Software in Visual Basic .NET entwickeln. Visual Studio bietet fr diese Gerte eine spezielle Testumgebung an. Auch das .NET Compact Framework ist weiterentwickelt worden und steht inzwischen in der Version 2.0 zur Verfgung. Kein Einsatzgebiet fr .NET-Anwendungen sind Gertetreiber. Diese bleiben nach wie vor eine Domne der C-Programmierung und knnen nicht mit VB.NET realisiert werden. Aber auch bei den direkt nutzbaren Features des Betriebssystems hat sich einiges getan. Multithreading konnte man beispielsweise mit VB6 zwar einsetzen, aber nicht mit der Entwicklungsumgebung austesten. Das hat sich mit VB.NET gendert. Grundstzlich lsst sich mit VB.NET alles realisieren, was Sie auch mit C# realisieren knnen. Aufgrund der syntaktischen Unterschiede der Sprachen lassen sich manche Dinge in der einen oder anderen Sprache eleganter ausdrcken. Unberwindbare Einschrnkungen, wie es sie frher fr VB6 in Bezug auf C++ gab, gibt es bei den .NET-Sprachen nicht mehr.

Inhalt des BuchesWill man ein Buch zu .NET schreiben, stellt sich die Frage, auf welcher Ebene man aufsetzt und welches Ziel verfolgt werden soll. Wie wir schon im Vorwort erwhnt haben, richtet sich das Buch nicht an VB Classic-Programmierer, die mit .NET noch keine Erfahrung gesammelt haben. Fr den Umstieg von VB6 nach VB.NET und den Einstieg in die objektorientierte Programmierung gibt es bereits umfangreiche Literatur. Die wichtigsten Begriffe rund um die objektorientierte Programmierung mit Visual Basic .NET haben wir im Referenzteil erlutert. Dennoch kann die kurze Zusammenfassung nicht jedes Detail beleuchten und ersetzt nicht die Literatur zum Erlernen der OOP. Ziel des Buches ist es vielmehr, anhand von vielen praxisorientierten Rezepten Vorgehensweisen aufzuzeigen, wie man effektiv mit den Framework-Klassen arbeitet, wie man mit Techni-

22Einleitung

>> Inhalt des Buches

ken wie GDI+, XML, ADO.NET, Windows Forms, Windows Controls, WMI usw. umgeht, und nicht zuletzt, wie man notfalls auch auf das Windows-API zugreifen kann, wenn die bentigte Funktionalitt (noch) nicht im Framework vorhanden ist. Diese Rezepte, die Sie direkt im Anschluss an die Einleitung finden, stellen den Hauptteil des Buches dar. In mehrere Kategorien aufgeteilt, haben wir fr Sie ca. 300 Rezepte aus den unterschiedlichsten Bereichen entwickelt. Ausgewhlt haben wir die Themen und Aufgabenstellungen aus eigenen praktischen Erfahrungen, aus vielen Fragestellungen, die im Rahmen von Seminaren an uns herangetragen worden sind, aus Diskussionen in den Newsgroups und aus den Anregungen der zahlreichen Beitrge im Internet. Ein Rezept erklrt zunchst eine Aufgabenstellung und zeigt dann eine Lsung, bestehend aus kommentierten Listings, Abbildungen und, vor allem, einer Erluterung des Lsungsweges. Zu den meisten Rezepten finden Sie auf der Buch-CD die Visual Studio-Projekte, mit denen wir den Code getestet haben. Die abgedruckten Listings knnen Sie ber das ebenfalls auf der CD befindliche Repository kopieren. Sie mssen also nichts abtippen.

Was ist neu am neuen Visual Basic .NET Codebook?Nun, das aufflligste Merkmal der neuen Codebook-Serie ist natrlich das Erscheinungsbild. Die dritte Auflage ist von der Aufmachung her wieder mehr an ein normales Buch herangerckt. Der Karton mit Schuber fr die CD ist verschwunden. Aber auch inhaltlich hat sich vieles getan. Alle Rezepte wurden berarbeitet und bewertet, ob sie weiterhin empfehlenswert sind oder durch neue Mglichkeiten des Frameworks abgelst werden sollten. Viele Rezepte der ersten und zweiten Auflage wurden umgebaut und nutzen neue Features von Visual Basic und des Frameworks. Durch Diskussionen mit Lesern konnten wir einige der Rezepte verbessern und Fehler korrigieren. Aber natrlich gibt es auch neue Rezepte. So werden Sie quer durch die Bank bei vielen Kategorien auch neue Rezepte finden. Sei dies im Kapitel XML, bei den Datenbanken oder im neuen Kapitel Geodaten, in das sowohl Rezepte der 2. Auflage als auch viele neue Rezepte eingeflossen sind.

ZielgruppeDas Buch richtet sich an Anwendungsentwickler, die bereits Erfahrungen mit .NET gesammelt haben. Gute Programmierkenntnisse und Kenntnisse der objektorientierten Programmierung werden bei der Erluterung der Rezepte vorausgesetzt. Natrlich sind alle Quelltexte mit Visual Basic .NET geschrieben worden, sonst wre ja das Thema verfehlt. Aber auch Programmierer anderer Sprachen, welche die Syntax von VB.NET einigermaen beherrschen, knnen die Rezepte umsetzen. Der Schwerpunkt der Themen liegt eindeutig auf der Windows-Programmierung, da die Webprogrammierung bereits durch das ASP.NET Codebook abgedeckt wird. Aber auch Webprogrammierer werden viele ntzliche Rezepte in diesem Buch finden. Selbst die Rezepte zu GDI+ knnen fr Webanwendungen interessant sein, wenn z.B. auf dem Server Grafiken online erstellt werden mssen.

Voraussetzungen zur Nutzung der RezepteAlle Projekte, die Sie auf der Buch-CD finden, wurden mit Visual Studio .NET 2003 und der Framework-Version 1.1 unter Windows 2000 erstellt. Wir gehen davon aus, dass Sie selbst mit

>> Einleitung

23Einleitung

Visual Studio .NET arbeiten, denn das ist der Standard fr die Programmierung mit Visual Basic .NET. Alternativ knnen Sie auch die Freeware SharpDevelop einsetzen. Sie kann den Umfang von Visual Studio .NET zurzeit aber bei Weitem nicht erreichen. Fr die ganz hart Gesottenen bleiben dann noch die kostenlose Nutzung von Nodepad-Editor und Kommandozeilenaufrufe des Compilers . Die Softwareentwicklung mit Visual Basic .NET sollten Sie nur auf den Betriebssystemen Windows 2000, Windows XP, Windows Vista, Windows 2003 und Windows 2008 Server bzw. zuknftigen Nachfolgern vornehmen. Visual Studio .NET 2008 arbeitet ohnehin nur noch mit diesen Betriebssystemen. Viele Rezepte, aber definitiv nicht alle, laufen auch unter Mono. Zum Zeitpunkt des Drucks ist Mono 2.0 aktuell, das aber schon viele Features von .NET 3.x hat, inklusive LINQ. .NET 2.0 ist unter Mono 2.0 vollstndig realisiert.

Typische Fragen zum Visual Basic .NET Codebook und zur Programmierung mit Visual Basic .NETWie bekomme ich die abgedruckten Quelltexte aus den Rezepten in meine Anwendung?Auf der Buch-CD befindet sich ein Repository-Programm. Nach Kategorien organisiert suchen Sie das betreffende Rezept und dort das gewnschte Listing aus und kopieren den Quelltext ber die Zwischenablage in Ihre Anwendung.

Kann ich die Rezepte ohne Vernderung in meine Anwendung bernehmen?Wenn es sich realisieren lie, haben wir die Rezepte so aufgebaut, dass sie ohne nderung bernommen werden knnen. Allerdings war das in vielen Fllen nicht mglich, da bei der objektorientierten Programmierung z.B. Methoden nicht einfach aus dem Klassenverbund herausgerissen werden knnen. Bei Windows Forms oder Windows Controls ergibt sich das Problem, dass wir aus Platzgrnden nicht den Code zur Generierung der Steuerelemente etc. abdrucken knnen. Auch syntaktische Gegebenheiten, wie z.B. Imports-Anweisungen am Anfang einer Datei, verhindern oft, dass Methoden und Klassen mit einem Mausklick kopiert werden knnen. Meist mssen an mehreren Stellen nderungen vorgenommen werden. Eine Reihe von Rezepten haben wir anhand von Beispielen erlutert. Hier mssen Sie natrlich den Beispielcode fr Ihre Zwecke anpassen.

Gibt es zu den Rezepten Beispielprojekte?Ja. Fr fast alle Rezepte finden Sie auf der CD Beispielprojekte, in denen der beschriebene Code eingesetzt und demonstriert wird. Dabei gibt es einige Rezepte, die an einem zusammenhngenden Beispiel erlutert werden und dann auch in einem Projekt zusammengefasst werden. Nur fr ganz wenige Rezepte, die ohne nennenswerten Code auskommen (z.B. zur Diskussion von Basisklassen fr Steuerelemente), gibt es keine eigenen Projekte.

Wie finde ich das zu einem Rezept zugehrige Projekt?Die Rezepte sind auf der CD in Verzeichnissen abgelegt, deren Namen mit den zugehrigen Projektnummern beginnen. So fllt die Zuordnung leicht.

24Einleitung

>> Inhalt des Buches

Kann ich die Beispielprojekte sofort verwenden?Das sollte gehen. Bedenken Sie aber bitte, dass das Projekt zuvor auf die Festplatte kopiert werden muss, da sonst der Compiler keine Dateien und Verzeichnisse auf der CD anlegen kann.

Wie kann ich Code aus Rezepten in meine Programme einbinden?Neben dem Kopieren von Codefragmenten knnen Sie in vielen Fllen auch fertige Bibliotheken, die wir fr die meisten Kategorien bereitgestellt haben, nutzen. Sie mssen die bentigte Bibliothek lediglich ber die Verweisliste des Projektes referenzieren. Fr Programmierer anderer Sprachen wie z.B. C# bieten die Bibliotheken den Vorteil, dass sie den Code nutzen knnen, ohne auf den VB.NET-Sourcecode zurckgreifen zu mssen.

Ich programmiere mit C#. Kann ich das Buch auch nutzen?Ja. Denn das Kernthema des Buches ist die Programmierung mit dem .NET Framework und nicht, wie man mit Visual Basic eine Schleife programmiert. Wenn Sie C# beherrschen und sich ein bisschen mit der Syntax von VB.NET auseinandersetzen, werden Sie die Rezepte nutzen knnen. Hierzu knnen Sie wahlweise den VB-Code selbst in C# umsetzen oder einfach die Projekte nutzen und als Klassenbibliothek in ein C#-Projekt einbinden.

Ich programmiere mit ASP.NET. Was bringt mir das Buch?Das Schwerpunktthema des Buches ist die Programmierung von Windows-Anwendungen. Aber auch die umfasst viele Bereiche, die nichts mit Windows-Oberflchen zu tun haben. Beispielsweise sind Systemzugriffe, Datumsberechnungen, Zugriffe auf XML-Dateien und Datenbanken oder Dateioperationen fr Webanwender genauso interessant wie fr WindowsProgrammierer. Selbst die Rezepte zum Eigenschaftsfenster knnen sehr ntzlich sein, wenn Sie Web-Controls entwerfen, die Sie an andere Anwender weitergeben wollen.

Wird auf ASP.NET eingegangen?Nein. Hierfr gibt es das ASP.NET Codebook, dem wir auch keine Konkurrenz machen wollen . Webanwendungen und Webdienste werden nur insoweit besprochen, wie sie in WindowsAnwendungen genutzt werden knnen. Auf spezielle ASP.NET-Themen wird nicht eingegangen.

Bentige ich Visual Studio fr die Programmierung mit VB?Jein. Eigentlich ist alles, was Sie bentigen, das .NET Framework SDK und ein Texteditor (und eigentlich knnen Sie Ihre Programme auch auf Lochkarten stanzen ). Aber wenn Sie bereits mit Visual Basic 6 gearbeitet haben, dann wollen Sie die komfortable Entwicklungsumgebung bestimmt nicht missen. Zudem gibt es die Entwicklungsumgebung in der Express-Version kostenfrei. Sie knnen aber auch mit SharpDevelop und dem SDK sehr vernnftig arbeiten.

Bentige ich Visual Studio fr den Einsatz der Rezepte?Auch hier ein jein. Im Prinzip nicht, aber praktischer ist es schon. Alle Projekte wurden mit Visual Studio erstellt und knnen mit diesem natrlich auch wieder geffnet und weiterbearbeitet werden. SharpDevelop bietet Ihnen eine entsprechende Funktionalitt fr Visual Studio Projekte.

Ich habe nur VB6. Kann ich die Beispiele auch benutzen?Nein. Die Programmierung unter VB.NET hat nicht mehr viel mit der Programmierung unter VB6 zu tun. Die Beispiele sind nur unter VB.NET lauffhig.

>> Einleitung

25Einleitung

Ich mchte Module fr Office entwickeln, kann ich die Rezepte nutzen?Ein klares Jein. Wenn Sie mit Visual Basic for Application arbeiten wollen, werden Sie mit den Rezepten nicht arbeiten knnen. Wollen Sie aber Office mit Visual Studio Tools for Office (VSTO) arbeiten, geht dies. Wir beschreiben allerdings nicht, wie Sie eine Office-Integration programmieren. Nheres finden Sie aber unter http://msdn.microsoft.com/en-us/office/ aa905533.aspx.

Werden Module oder andere aus Kompatibilittsgrnden bernommene alte VB6-Techniken verwendet?Nein. Diese Techniken sind fr Umsteiger beim Erlernen des .NET-Konzeptes eher hinderlich als frderlich. Alles, was sich mit dem Framework und den Techniken der objektorientierten Programmierung realisieren lsst, haben wir auch so realisiert. Natrlich verwenden wir dort, wo es Sinn macht, VB-Begriffe wie z.B. Integer statt System.Int32. Auch fr gngige Typumwandlungen setzen wir in vielen Fllen Methoden wie CInt oder CSng ein, statt die doch sehr umstndliche Typecast-Syntax von CType oder DirectCast zu verwenden. Grundstzlich sind wir der Meinung, dass man sich auch (oder vielleicht gerade) als ehemaliger VB6-Programmierer von den Altlasten von VB Classic befreien muss und nicht gegen die Konzepte von .NET arbeiten sollte. Die prozedurale Programmierung, in der hufig mit globalen Variablen und Methoden gearbeitet wurde, hat hier keinen Platz mehr.

Werden alle Themenbereiche von .NET angesprochen?Wenn Sie bei dieser Frage insgeheim denken: ich hoffe doch ja, dann sollten Sie wissen, dass Sie ein solches Buch nicht mehr forttragen knnten. Nein, .NET umfasst derartig viele Bereiche, dass es vllig unmglich ist, auch nur annhernd alles in einem Buch zu beschreiben. Wir haben die Themen herausgesucht, die unserer Meinung nach fr die meisten Visual Basic-Programmierer von Belang sind und/oder sich in der Praxis, Newsgroups etc. als relevant herausgestellt haben.

Werden .NET-fremde Techniken wie XML detailliert erklrt?Nein. Auch hier stoen wir mit dem Buch an Grenzen. Wir erklren, wie Sie mit diesen Techniken in .NET umgehen knnen. Aber die Grundlagen von z.B. XML knnen wir nicht umfassend dokumentieren. Hierzu gibt es ausreichende Literatur, in Bchern und online.

Wird auch Multithreading eingesetzt?Wie bereits oben erwhnt, ist der Einsatz von Multithreading in Visual Basic .NET wesentlich vereinfacht worden. Allerdings warnen wir ausdrcklich davor, ohne massive Kenntnis der Grundlagen Multithreading einzusetzen. Gerade im Umgang mit Windows-Anwendungen gibt es viele Fallen, in die (mit Multithreading) unerfahrene Programmierer tappen knnen. Multithreading ist erheblich komplizierter, als es auf den ersten Blick den Anschein macht. Wir haben Multithreading nur in einzelnen Ausnahmefllen eingesetzt, wenn auch wirklich ein Grund dafr gegeben war.

Auf welchen Plattformen laufen die entwickelten .NET-Programme?Theoretisch auf allen Plattformen, fr das es das .NET Framework gibt. Das heit auf Windows 98SE, Windows ME, Windows NT 4.0, Windows 2000, Windows XP und Windows 2003 Server. Allerdings gibt es fr Windows 98/ME sehr viele Einschrnkungen. hnlich sieht es bei Win-

26Einleitung

>> Inhalt des Buches

dows NT aus. Die vollstndige Framework-Implementierung gibt es erst ab Windows 2000. Plattformen, die vor Windows 2000 herausgekommen sind, werden von Microsoft nur noch sehr stiefmtterlich behandelt. Dort ist mit groen Problemen zu rechnen.

Auf welchen Plattformen funktionieren die Beispiele aus dem Buch?Entwickelt und getestet haben wir unter Windows XP. Die Programme sollten sich unter Windows 2000 und Windows 2003 Server genauso verhalten. Auf den lteren Plattformen werden hchstwahrscheinlich einige Beispiele (z.B. mit Transparenzeffekten) nicht funktionieren. Die Betriebssysteme Windows 98 und ME sind anders aufgebaut als die aktuellen Betriebssysteme, fr die .NET gedacht ist. Viele Klassen des Frameworks setzen Gegebenheiten voraus, die von den alten Betriebssystemen nicht oder nicht vollstndig untersttzt werden.

Funktionieren die Rezepte auch auf dem Framework 1.0 bzw. 1.1 und mit Visual Studio .NET 2002, 2003 bzw. 2005?Grtenteils wahrscheinlich schon. Wir haben es aber nicht ausprobiert. Im Sourcecode sind ggf. kleine nderungen bei den For-Schleifen notwendig, da wir in der Regel von der Mglichkeit Gebrauch gemacht haben, die Schleifenvariablen im For-Statement zu definieren. Auch kann es in Ausnahmefllen vorkommen, dass Erweiterungen des Frameworks benutzt werden, die in der Version 1.0 nicht enthalten sind. Ein Beispiel dafr ist die Enumeration Environment.SpecialFolder, die in der Version 1.1 deutlich umfangreicher ausgefallen ist. Rezepte, die von neuen Features des Frameworks 3.5 oder von Visual Studio 2008 Gebrauch machen, lassen sich natrlich nicht auf den lteren Plattformen anwenden. Generische Listen oder die neuen Assistenten von VS 2008 beispielsweise gibt es in den Vorgngerversionen nicht.

Funktionieren die Rezepte auch auf dem Compact Framework auf einem PDA?Teils, teils. Das Problem ist, dass das Compact Framework auch in der Version 2.0 nur einen kleinen Teil der Klassen, Methoden, Eigenschaften usw. des groen Bruders zur Verfgung stellt. So wird es viele Rezepte geben, die sich auch problemlos auf dem Compact Framework nutzen lassen, aber auch andere, die entweder angepasst werden mssen oder gar nicht auf einem PDA nutzbar sind.

Welche Voraussetzungen mssen fr die Datenbankbeispiele erfllt sein?Fr die Datenbankbeispiele bentigen Sie entweder SQL Server 2000, SQL Server 2005 oder SQL Server 2008. Die Ausstattungsvariante spielt dabei keine Rolle. MSDE (2000) oder Express Edition (2005 und 2008) reichen aus.

Welche Voraussetzungen mssen fr die DirectX-Beispiele erfllt sein?Entwickelt und getestet haben wir die Beispiele mit dem DirectX SDK, Version 9.0c vom Oktober 2005. Die Grafikkarte sollte DirectX 9.0 untersttzen, damit der Groteil der Berechnungen von der Hardware bernommen werden kann. Anderenfalls fhrt der PC-Prozessor alle Berechnungen durch, wodurch die Ausfhrungsgeschwindigkeit erheblich herabgesetzt werden kann. Wir haben dieses Kapitel im Buch belassen, obwohl es bereits DirectX 10 gibt. Allerdings ist die Verbreitung dieser Version unseren Erfahrungen nach eher als gering anzusehen.

>> Einleitung

27Einleitung

Wird der My-Namensraum eingesetzt bzw. was ist davon zu halten?Vorab: Ja, wir setzen ihn ein, wo es Sinn macht.My soll die VB.NET-Programmierung mit Visual Studio 2005 einfacher machen so die Intention von Microsoft. Allerdings wird My sehr kontrovers diskutiert, denn nicht jeder hlt diese Neuerung fr vorteilhaft. ber My erhalten Sie Zugriff auf einige weniger oft gebrauchte

Methoden und Eigenschaften ausgewhlter Framework-Klassen. Auch der Zugriff auf Ressourcen und Anwendungseinstellungen erfolgt in VB.NET oftmals ber My.

Allerdings liegt es auf der Hand, dass nur ein sehr, sehr kleiner Teil der Framework-Funktionalitt ber My zur Verfgung gestellt werden kann. Sehr schnell stt man an die Grenzen und muss sich dann doch mit den zugrunde liegenden Framework-Klassen auseinandersetzen. Hinzu kommt, dass man mit My eine zustzliche, redundante Syntax lernen muss. Denn zustzliche Funktionalitten, die man nicht auch anderweitig im Framework findet oder auf andere Weise erreichen knnte, bietet der My-Namensraum nicht. Wir raten daher dazu, My nur in den Fllen einzusetzen, in denen es wirklich vorteilhaft ist. Wenn dieselbe Funktionalitt ber Framework-Klassen direkt erreicht werden kann, sind diese vorzuziehen. Bedenken Sie auch, dass Sie gesuchte Beispiele im Internet nicht immer in VB.NET vorfinden. C#-Code zu lesen ist nicht schwer, aber C#-Programmierer verwenden das Framework, nicht den My-Namensraum. Fr die professionelle Programmierung und die Einarbeitung in das .NET Framework ist es unumgnglich. My hilft da nur wenig.

Die RezepteIn 16 Kategorien finden Sie ber 300 Rezepte. Was Sie in den Kategorien erwartet, haben wir hier kurz zusammengefasst.

BasicsHier finden Sie die Grundlegendes z.B. zu Formatierungen, Bitoperationen, Vergleichen und zum Sortieren von Objekten und Enumerationen. Die alte VB-Format-Anweisung hat ausgedient. Lesen Sie nach, welche neuen, weitaus komfortableren Mglichkeiten das Framework bietet, um Zahlen und andere Werte zu formatieren und zu konvertieren. Der Umgang mit Bits und Bytes ist in .NET wesentlich einfacher geworden. Nicht nur, dass die Sprache VB.NET selbst endlich Schiebeoperationen kennt, sondern auch das Framework hlt einige Klassen fr Konvertierungen bereit, die frher nur sehr umstndlich realisierbar waren. Enumerationen sind in .NET nicht mehr einfache benannte Konstanten, sondern bieten auch zur Laufzeit Untersttzungen, z.B. zum Abfragen aller definierten Werte und Namen. Wir zeigen Ihnen, wie Sie mit Enumerationen umgehen knnen, wie Sie Enums ein- und auslesen knnen, ohne mit den nackten Zahlenwerten arbeiten zu mssen. Zum Sortieren von Listen und Arrays, die Objektreferenzen enthalten, gibt es allgemeingltige, vom Framework genutzte Entwurfsmuster (Design Patterns). Wir erklren die Mechanismen, die Sie bentigen, um Objekte vergleichen und suchen zu knnen. Ausgedient (fast) haben auch die alten Funktionen Asc und Chr, denn sie arbeiten nur mit ASCII-Zeichen. Zur Laufzeit arbeiten .NET-Strings aber grundstzlich mit Unicode. Wie Sie die Umwandlung zwischen den verschiedenen Zeichencodierungen (ASCII, UTF8, UTF16 usw.) vornehmen knnen, erfahren Sie ebenfalls in dieser Kategorie.

28Einleitung

>> Inhalt des Buches

Datum und ZeitFr den Umgang mit Datums- und Zeitangaben stellt das Framework umfangreiche Strukturen, Klassen und Methoden bereit. Leider gibt es auch ein paar Fehler und Fallen, z.B. bei der Berechnung der Kalenderwochen, wie sie in Europa blich sind. Dagegen helfen unsere Rezepte . Ein immer wieder gefragtes Thema ist die Berechnung der deutschen Feiertage. Mit mehreren Rezepten zeigen wir, wie grundlegende Daten (Kirchenjahr, Osterdatum) berechnet werden, und stellen Ihnen eine Klasse fr den Umgang mit Feiertagen zur Verfgung, die beliebig erweitert werden kann. Fr Historiker interessant ist die Umrechnung zwischen dem gregorianischen Datum und der julianischen Tageszhlung.

AnwendungenNach Ini-Dateien und Registry-Eintrgen werden heute Konfigurationsdaten in XML-Dateien gespeichert. In der Kategorie Anwendungen stellen wir Rezepte vor, um aus der Konfigurationsdatei einer Anwendung Daten zu lesen. Wir zeigen, wie Sie selbst Konfigurationsdateien anlegen und in Ihrem Programm diese lesen und schreiben knnen. Auch die neuen Anwendungseinstellungen, die Visual Studio 2005 bereitstellt, werden besprochen. Ebenso wie die Klrung der Frage, wie man in einer Anwendung eine zentrale Fehlerbehandlung durchfhren kann.

Mit GDI+ zeichnenGDI+ ist das Grafik-API der neuen Betriebssysteme und wird ab Windows XP mit diesem zusammen installiert. GDI steht fr Graphics Device Interface. Es ist nicht Bestandteil von .NET, jedoch basieren alle grafischen Ausgaben auf GDI+. GDI+ ist somit die Plattform fr alle Zeichnungen, die mit einem .NET-Programm erstellt werden. Gegenber dem alten gewachsenen GDI bietet es eine Reihe von Vorteilen. Hier nur einige wichtige: Systematisch aufgebautes Klassen- und Funktionsmodell Einfach anwendbare Zeichengerte wie Pen, Brush und Font Koordinatensysteme und -transformationen Transparenz ber Alpha-Kanal Heutige Grafikkarten verfgen in der Regel noch nicht ber eine Hardware-Beschleunigung fr GDI+. In vielen Fllen, insbesondere bei der Anwendung von Transparenz, kann es daher zu Performance-Einbuen gegenber GDI kommen. Diese Nachteile sollten jedoch in einigen Jahren, wenn die nchsten Generationen von Grafikkarten zur Verfgung stehen, zur Geschichte gehren. Im Wesentlichen ersetzt GDI+ alle Funktionen von GDI. Es soll jedoch nicht verschwiegen werden, dass ein paar Mglichkeiten des alten GDI in GDI+ nicht mehr oder zumindest nur noch eingeschrnkt zur Verfgung stehen. Dazu gehrt z.B. die Mglichkeit, durch wiederholtes XOR-Drawing zuvor gezeichnete Figuren wieder zu lschen, ohne den Hintergrund neu zeichnen zu mssen. Dieses Buch kann und soll nicht die Grundlagen von GDI+ erklren. Stattdessen wird anhand einiger Beispiele der praktische Einsatz gezeigt. Da Zeichenoperationen aber zu den wichtigs-

>> Einleitung

29Einleitung

ten Bestandteilen einer grafischen Oberflche zhlen, gehen wir im Buch etwas ausfhrlicher auf sie ein. In der Kategorie GDI+-Zeichnen zeigen wir Ihnen zunchst allerlei Tricks und Kniffe im Umgang mit Schriften, Schatten und 3D-Effekten. Die Zeiten der eintnig grau in grau erscheinenden Dialogboxen sollten allmhlich der Vergangenheit angehren.

GDI+-BildbearbeitungBeginnend mit den Grundlagen zum Zeichnen von Bildern finden Sie Rezepte zu komplexen berblendfunktionen mit Clipping und Transparenz, zum Vergrern von Bildausschnitten, zur Maximierung von Bildanzeigen und zum Drehen und Spiegeln. Wir zeigen Ihnen, wie Sie in Ihrem Programm eine Ordnerauswahl mit miniaturisierten Vorschaubildern anzeigen und wie Sie Thumbnail-Bilder fr Webseiten generieren knnen. Des Weiteren finden Sie Rezepte zum Umgang mit verschiedenen Dateiformaten und Encodern. Oft wird gefragt, wie man Bilder im JPEG-Format speichern und dabei Einfluss auf die Qualitt nehmen kann. Auch das zeigen wir hier. Mithilfe von Matrixoperationen knnen die Farbinformationen auch von greren Bildern sehr schnell verndert werden. Wir haben Rezepte fr Sie vorbereitet, um Farbbilder zu invertieren oder in Graustufen umzuwandeln. In einem Rezept erklren wir ein Testprogramm, mit dessen Hilfe Sie die Farbmatrix online verndern und gleichzeitig die Auswirkung sehen knnen. Fr technische und wissenschaftliche Auswertungen werden oft Scharfzeichnungsfilter bentigt. In mehreren Rezepten erklren wir, wie die gngigen Filteralgorithmen in Visual Basic .NET umgesetzt werden knnen.

Windows FormsNahezu unberschaubar sind die Mglichkeiten, die .NET zur Gestaltung von Fenstern bietet. Neu hinzugekommen sind Fenster mit nicht rechteckigen Umrissen sowie ganz oder teilweise durchsichtige Fenster. Wir zeigen an einigen Beispielen, wie Sie die neuen Effekte nutzen knnen. Sie finden Rezepte zu oft gestellten Fragen, wie z.B. Fenster ohne Titelleiste erzeugt und verschoben werden knnen und wie man per Programm Screenshots erstellen kann. Viele VB Classic-Programmierer haben groe Probleme bei der Programmierung von Dialogfenstern unter .NET. Die Fragen in den Newsgroups zeigen nur allzu oft, dass Dialoge unter VB Classic nur selten objektorientiert programmiert worden sind, obwohl bereits VB5 eine Menge Mglichkeiten zur Kapselung von Dialogen zu bieten hatte. Wir halten es daher fr auerordentlich wichtig, diese Thematik in einigen Rezepten aufzugreifen und zu erklren, wie man unter .NET Dialoge kapseln kann. Dadurch erhalten die Dialogklassen eine saubere Struktur, sind besser wartbar und knnen wiederverwendet werden. Durch Vererbung knnen Sie zustzlich erreichen, dass die Dialogfenster eines Programms ein einheitliches Aussehen bekommen. Ebenfalls im Zusammenhang mit Dialogfenstern wird diskutiert, wie Benutzereingaben berprft werden knnen. Das Framework bietet auch hierzu einige neue Mechanismen. Auch auf oft gestellte Fragen, wie man z.B. einen Startbildschirm (Splashscreen) anzeigt oder wie man ber Drag & Drop oder ber die Zwischenablage Daten importieren oder exportieren kann, werden in dieser Kategorie mit mehreren Rezepten beantwortet. Das Rezept fr den Splashscreen wurde komplett berarbeitet und nutzt jetzt die neuen Mglichkeiten des VBAnwendungsmodells.

30Einleitung

>> Inhalt des Buches

Letztlich zeigen wir Lsungen fr banal klingende Aufgabenstellungen, die sich bei nherer Betrachtung als uerst knifflig erweisen, z.B. wie in einer TextBox die Eingabetaste abgefangen werden und wie man Dateipfade so krzen kann, dass sie in noch lesbarer Form in Mens verwendet werden knnen.

Windows ControlsDieses ist aus gutem Grund eine der umfangreichsten Kategorien. Der Umgang mit Steuerelementen hat sich grundlegend gendert. Es gibt nicht mehr die Aufteilung in Ressource und Code-Teil, wie es in VB Classic der Fall war. Alle Steuerelemente werden per Code erzeugt. Auch die Eigenschaften werden im Code initialisiert. Beginnend mit einfachen Themen, z.B. wie die Control-Arrays aus VB Classic ersetzt werden knnen, ber das benutzerdefinierte Zeichnen von ListBoxen und mehrspaltigen ComboBoxen gehen wir intensiv auf die Programmierung eigener Steuerelemente ein. Wir erlutern, welche Basisklassen sich fr welche Steuerelemente eignen und welche Mglichkeiten es gibt, in den Nachrichtenfluss eines Controls einzugreifen. Komplexere Steuerelemente fr Verzeichnis- und Dateiauswahl werden ausfhrlich vorgestellt. Sie knnen direkt fr den Bau eigener Dialoge verwendet werden, falls die von Windows bereitgestellten nicht ausreichen. Am Beispiel eines grafischen Steuerelementes zur Anzeige von Zeitsegmenten demonstrieren wir, wie man Steuerelemente mit nicht rechteckigem Umriss definiert, wie Koordinaten transformiert werden, wie Mausereignisse auch zur Entwurfszeit bearbeitet werden knnen und was zu tun ist, um auch im Eigenschaftsfenster die Zeitsegmente einstellen zu knnen. Mehrzeilige TextBoxen werden vom Framework etwas stiefmtterlich behandelt. Im Framework 1.1 gab es bislang eine groe Lcke im Umgang mit mehrzeiligen Textboxen. Einige Informationen und Einstellungen sind inzwischen ber das Framework 2.0 erreichbar, manche anderen aber nach wie vor nur ber API-Funktionen. Auch hierzu halten wir einige Rezepte parat.

Eigenschaftsfenster (PropertyGrid)Eines der leistungsfhigsten Steuerelemente, die Ihnen auch fr eigene Anwendungen zur Verfgung stehen, ist das PropertyGrid-Control (Eigenschaftsfenster). Es handelt sich dabei um das Steuerelement, das der Designer benutzt, um dem Entwickler die Mglichkeit zu geben, fr ein ausgewhltes Objekt (Steuerelement, Fenster, Men etc.) dessen Eigenschaften anzuzeigen und zu ndern (siehe Abbildung 1). Sicher haben auch Sie es schon oft in Verbindung mit dem Designer verwendet. Egal ob Sie im Designer die Eigenschaften Ihrer eigenen Steuerelemente korrekt anzeigen wollen oder ob Sie zur Laufzeit das PropertyGrid-Control in Ihren eigenen Anwendungen dazu benutzen mchten, die Eigenschaften beliebiger Objekte anzuzeigen, es stehen Ihnen vielfltige Mglichkeiten zur Verfgung, das Verhalten des Eigenschaftsfensters gezielt zu steuern. Insbesondere fr die professionelle Entwicklung von Steuerelementen ist es unerlsslich, sich nher mit dem PropertyGrid zu beschftigen, um dem Anwender alle erdenklichen Hilfestellungen und Vereinfachungen fr den Umgang mit den Steuerelementen zur Verfgung stellen zu knnen.

>> Einleitung

31Einleitung

Abbildung 1: Das Eigenschaftsfenster (PropertyGrid) ist eines der leistungsfhigsten Steuerelemente und lsst sich auch in eigene Anwendungen einbinden.

Eigentlich wollten wir einem einzelnen Steuerelement kein eigenes Kapitel widmen. Das PropertyGrid-Control ist aber leistungsstark wie kaum ein anderes, wird oft eingesetzt und ist in der MSDN-Dokumentation nur lckenhaft beschrieben. Auch im Internet findet man nur sehr verstreut die bentigten Informationen. Deswegen haben wir an dieser Stelle eine zusammenhngende, viele Details umfassende Sammlung von Rezepten zum Eigenschaftsfenster fr Sie erarbeitet. Angefangen mit Rezepten zur Steuerung des PropertyGrid ber Attribute fr Kategorien, Beschreibungen, Standardwerte und Standardeigenschaften fhren wir Sie in Techniken zum Anzeigen eigener Editoren ein, die den Anwender bei der Eingabe der Daten untersttzen knnen. Wir erklren den Umgang mit Auflistungen und Enumerationen und wie Sie das Eigenschaftsfenster um zustzliche Hyperlink-Schaltflchen und Tab-Seiten erweitern knnen. Das starre Anzeigen der vorgegebenen Eigenschaftsnamen kann in mehrsprachigen Programmen strend sein. Daher finden Sie hier auch ein Rezept, das beschreibt, wie Sie die angezeigten Texte lokalisieren knnen.

DateisystemDateisystemverwaltungen zhlen zu den grundlegenden Eigenschaften, die ein Betriebssystem untersttzen muss. Ohne die Mglichkeit, Dateien und Verzeichnisse erstellen, verndern und lschen zu knnen, wren alle Informationen mit dem Abschalten des Rechners verloren. Was bliebe, wren Lochstreifen und Lochkarten. Im Laufe der Jahre haben sich die Anforderungen an ein Dateisystem stetig erhht.

32Einleitung

>> Inhalt des Buches

In den Rezepten zum Dateisystem finden Sie Rezepte fr eben diese Mglichkeiten. Da das Betriebssystem aber neben normalen Dateien ebenfalls im Dateisystem abgespeichert wird, zeigen einige Rezepte auf, in welchen Verzeichnissen ein Anwender diese Informationen bei der Installation des Betriebssystems hinterlegt hat. Da ein modernes Dateisystem ein recht dynamisches Gebilde ist, kann man manchmal die berwachung bestimmter Dateien oder Verzeichnisse in einem Programm nicht vermeiden. Auch findet heute der Datenaustausch zwischen unterschiedlichen Plattformen teilweise noch immer ber Dateien statt. Ein Rezept stellt die Mglichkeiten vor, wie man innerhalb eines Programms nderungen am Dateisystem berwachen kann.

NetzwerkEin Netzwerk ist in der modernen EDV nicht mehr wegzudenken. War ein Netzwerk bis vor kurzer Zeit noch ein zustzliches Programm oder ein zustzlicher Treiber, der dem Betriebssystem bekannt gemacht werden musste, gehren Netzwerkfunktionen heute bereits zum Betriebssystem. Dementsprechend unterscheiden viele Funktionen nicht mehr zwischen lokal und global. Wir haben in diesem Abschnitt des Buches Rezepte aufgefhrt, die trotz allem mehr dem Netzwerk zuzuordnen sind, z.B. zum Thema welche Netzwerkadapter in einem Rechner eingebaut sind. Da die IP-Adressen der Version 6 immer bekannter werden, sind auch zwei Rezepte zur Umrechnung alt auf neu und umgekehrt hier zu finden. Um das Thema Webservices nicht allein den ASP-Programmierern zu berlassen , haben wir an dieser Stelle auch ein Rezept fr die Erstellung eines Google-Web-Clients fr VB.NET aufgefhrt.

SystemDieser Abschnitt basiert zu einem nicht kleinen Teil auf einer Technik, die relativ unbekannt, aber trotz allem sehr effektiv genutzt werden kann: WMI. Eine kleine Einfhrung in die Thematik haben wir in den Anhang aufgenommen. Das System kann grob in zwei Bereiche unterteilt werden, die Hardware und die Software. Fr den Bereich Hardware finden Sie Rezepte, die es Ihnen ermglichen, den Plattenplatz zu ermitteln oder das BIOS auszulesen. Aber auch der Prozessor und seine Eigenschaften oder die Auflsung des Monitors finden Sie in den Rezepten wieder. Auf der Softwareseite finden Sie Rezepte, wie Sie feststellen knnen, welche Software auf dem System installiert ist oder wie Sie die Registry mit .NET bearbeiten knnen. Natrlich drfen Dienste und deren Steuerung in einem solchen Kontext nicht fehlen. Zwei Rezepte haben hier Eingang gefunden, die mehr mit der Kommunikation zu tun haben, aber vielfach als Systemfunktionalitt in einem Programm Einzug finden: das Versenden von Fax und E-Mail aus einer Anwendung heraus. Neu hinzugekommen ist auch ein Rezept fr die Datenbertragung mit FTP.

DatenbankenIn diesem Teil des Buches finden Sie hauptschlich Rezepte, die mit der Verwaltung einer Datenbank zu tun haben. Da es gengend Bcher zum Thema ADO.NET gibt, aber eher selten etwas ber die Verwaltung einer Datenbank ber ein eigenes Programm ausgefhrt wird, finden Sie hier Rezepte, mit denen Sie Datenbanken aus einer Anwendung heraus oder als eigen-

>> Einleitung

33Einleitung

stndiges Programm steuern knnen. Dies ist umso wichtiger, da mit der MSDE kein entsprechendes Programm von Microsoft ausgeliefert wird. In diesem Abschnitt des Buches finden Sie Rezepte zur Erstellung von Datensicherungen (mit oder ohne Device-Kontext) und zur Automatisierung dieser Ttigkeiten. Sie knnen dies nicht nur mit der lokalen Datenbank, sondern mit jeder SQL-Datenbank, fr die Sie entsprechende Rechte im Netzwerk haben. Natrlich wird auch der umgekehrte Weg, also die Rcksicherung in den Rezepten, gezeigt. Einige Rezepte beschftigen sich aber auch mit anderen Themen als der Datenbankverwaltung. So finden Sie ein Rezept zur Feststellung der MDAC-Version auf einem Rechner, wie man Bilder in einer Datenbank abspeichern kann oder wie Excel als Datenbank angesprochen wird.

XMLXML ist eine der tragenden Sulen in .NET. Deswegen wird XML auch in vielen Bereichen des Frameworks eingesetzt und in vielfltiger Weise untersttzt. Wir knnen leider nicht sehr tief auf die Grundlagen von XML eingehen (dazu gibt es Bcher, die durchaus dicker sind als dieses), aber wir zeigen Ihnen die wichtigsten Vorgehensweisen im Umgang mit XML-Daten und -Dateien auf. Sie finden in dieser Kategorie einige Rezepte zu grundlegenden Klassen wie XmlTextWriter und XmlTextReader oder zum Lesen und Schreiben von Bildern und Binrdaten ebenso wie solche zum Umgang mit dem Document Object Model (DOM). XPath-Ausdrcke sind leistungsstarke Konstrukte fr XML-Abfragen. Auch sie werden ausfhrlich behandelt, besonders in Zusammenhang mit Namensrumen, die bei XPath einigen zustzlichen Aufwand erfordern. Wir geben Ihnen Rezepte zu den Klassen XmlDocument und XPathDocument und erlutern die Unterschiede. Viele Nachrichtenagenturen, Zeitschriftenverlage und auch das MSDN stellen im Internet XML-Dateien (Stichwrter RSS und RDF) mit den aktuellen Nachrichten zur Verfgung. Zwei Rezepte zeigen auf, wie Sie diese Nachrichten verarbeiten und anzeigen knnen. Auch Techniken, wie die Validierung von XML-Dateien ber ein XML-Schema oder die komfortablen Aufrufmglichkeiten von Stylesheet-Transformationen (XSLT), haben wir in Rezeptform fr Sie aufgearbeitet. Wir erklren auch den Umgang mit dem neuen XSLT-Debugger von Visual Studio 2005. Sie finden hier ebenfalls ein Rezept, wie Sie Code fr Klassen erzeugen knnen, ohne selbst programmieren zu mssen. Ein interessantes Thema ist auch der Parallelbetrieb von DataSet und XmlDataDocument, bei dem Sie wechselweise mit XPath- oder SQL-Abfragen arbeiten knnen. Abschlieend wird in dieser Kategorie die Serialisierung beliebiger Objekte von und nach XML erlutert. Sie finden Rezepte zu den Klassen XmlSerializer und SoapFormatter.

Wissenschaftliche Berechnungen, Navigation und KurvendiagrammePhysikalisch technische Mae werden in der Programmierung meist als simple Gleitkommazahlen abgehandelt. Eine Typsicherheit, um hier nicht Lngenmae und Geschwindigkeiten durcheinanderzuwerfen, wird nur selten vorgesehen. Am Beispiel einiger Mae (Lngenma, Flchenma usw.) zeigen wir, wie Sie die objektorientierte Programmierung gezielt einsetzen knnen, um zum einen die Typsicherheit zu gewhr-

34Einleitung

>> Inhalt des Buches

leisten und zum anderen die Angaben in verschiedenen Einheiten automatisch in eine Standardeinheit umrechnen zu knnen. Diese Rezepte wurden vollstndig neu aufbereitet und nutzen jetzt intensiv die Mglichkeiten generischer Klassen. Das Hinzufgen weiterer physikalischer Gren wird damit zum Kinderspiel. Zur wissenschaftlichen Aufarbeitung von Mess- und Simulationswerten gehrt auch die Darstellung in Form von Kurvendiagrammen. Wir beschreiben, wie Sie die Skalierungen der Achsen berechnen knnen und wie die Kurven gezeichnet werden. Insbesondere, wie kontinuierlich durchlaufende T/Y-Diagramme programmiert werden knnen. Falls Ihnen die Genauigkeit nicht reicht, mit der das Framework die Zahl Pi berechnet, finden Sie hier auch ein Rezept, mit dem Sie Pi auf 2400 Stellen genau berechnen knnen . Wir erklren, wie sich in 2D-Grafiken Vektorrechnung vorteilhaft einsetzen lsst und wie Schnittpunkte verschiedener geometrischer Figuren berechnet werden knnen. Hier finden Sie auch ein Rezept, um festzustellen, ob sich ein Punkt innerhalb eines Polygons befindet.

GeodatenDie Rezepte rund um Navigationsaufgaben aus der zweiten Auflage sind nun zusammen mit neuen Rezepten in ein eigenstndiges Kapitel ausgelagert worden. Wie werden GPS-Daten ausgewertet? Wie berechnet man Kurs und Entfernung zum Ziel? Auch die durch die Spaceshuttle-Mission gewonnenen Hhendaten des Oberflchenprofils der Erde werden vorgestellt und genutzt.

DirectXUnsere neue Kategorie zur 3D-Grafik bietet einige einfhrende Beispiele. Das Thema ist selbst bcherfllend und kann hier nur andeutungsweise behandelt werden. Wir erklren die notwendigen Schritte von der Abfrage der Grafikkarte bis zur dreidimensionalen Darstellung einfacher Figuren.

VerschiedenesIn der letzten Kategorie haben wir all die Rezepte gesammelt, die fr die Kategorie Basics nicht einfach genug sind und die nicht zu den Themen der anderen Kategorien passen. Das Abspielen von Sounds ist durch neue Funktionen im Framework 2.0 einfacher geworden, sodass auf die API-Funktionen inzwischen verzichtet werden kann. Wir zeigen, wie Sie Sound-Dateien und Systemgerusche abspielen knnen, aber auch, wie Sie per Programm weich klingende Sinustne selber generieren knnen. Ebenso finden Sie Rezepte zum Abspielen von Noten und zur Berechnung der Tonfrequenzen. Wenig bekannte Debug-Mglichkeiten, z.B. die Steuerung von Ausgaben ber die Konfigurationsdatei der Anwendung, die Ausgabe von Debug- und Trace-Ausgaben in TextBoxen, Dateien oder Eventlogs oder die Erstellung und Nutzung eigener Leistungsindikatoren (PerformancCounter), waren uns auch einige Rezepte wert. Auch wenn Sie wissen mchten, wie Sie auf Eventlog-Ausgaben anderer Anwendungen reagieren knnen, finden Sie hier Lsungen. Ein weiteres Rezept gibt Ratschlge, wie Sie Zeiten mit hoher Auflsung messen knnen und was dabei zu beachten ist. Auch wie Sie vorgehen knnen, wenn Sie Fehlermeldungen der API-Funktionen im Klartext anzeigen wollen.

>> Einleitung

35Einleitung

Typografische KonventionenDie folgenden typografischen Konventionen werden in diesem Buch verwendet: Schlsselwrter von Visual Basic sowie Bezeichner fr Variablen, Methoden, Klassen usw. werden innerhalb des Flietextes in der Schriftart Courier dargestellt. Beispiel: die Klasse System.Object und der Wert True Listings werden in folgender Schriftart gedruckt. VB-Schlsselwrter werden fett gedruckt:Dim i As Integer = 123

Kommentare in Listings werden kursiv geschrieben:' Das ist ein Kommentar

Dateinamen und Verzeichnisnamen werden kursiv formatiert: Beispiel: Text.txt Internet-Adressen sehen so aus: www.addison-wesley.de Texte der Bedienoberflchen, Menpunkte, Schaltflchenbeschriftungen etc. werden in Kapitlchen formatiert Beispiel: Menpunkt DATEI/FFNEN

Inhalt der Buch-CDAuf der Buch-CD befindet sich das bereits erwhnte Repository, mit dessen Hilfe Sie die abgedruckten Quelltexte auffinden und ber die Zwischenablage in Ihre Projekte bernehmen knnen. Zustzlich finden Sie auf der CD alle Beispielprojekte mit Rezeptnummern fr die Zuordnung von Rezepten zu Projekten. Das gesamte Buch finden Sie als E-Book ebenfalls auf der CD.

ErrataKeine Qualittskontrolle kann hundertprozentig verhindern, dass Fehler bersehen werden. So verhlt es sich auch bei einem Codebook mit rund 1000 Seiten. Natrlich haben wir alle Beispiele sorgfltig getestet, aber wir knnen nicht ausschlieen, dass uns Fehler unterlaufen sind oder dass in manchen Situationen ein Beispiel nicht so funktioniert, wie es beschrieben wird. Falls Sie also Fehler oder Unstimmigkeiten finden sollten oder Anregungen und Verbesserungsvorschlge haben, lassen Sie es uns wissen. Unsere Internet-Adresse, ber die Sie den Kontakt herstellen knnen, finden Sie im Vorwort.

Anhang/ReferenzteilIm Anhang haben wir fr Sie einige wichtige Hintergrundinformationen zusammengefasst. In einer kurzen Zusammenfassung erlutern wir die wichtigsten Themen und Begriffe rund um die objektorientierte Programmierung mit Visual Studio .NET. Wir zeigen, was sich gegenber VB6 wesentlich verndert hat. Auch Arrays und Auflistungen werden hier nher errtert, ebenso Generics.

36Einleitung

>> Inhalt des Buches

Ein weiteres Schwerpunktthema im Referenzteil ist der Umgang mit Visual Studio .NET 2003. Nicht, wie Sie ein Projekt anlegen (das sollten Sie bereits beherrschen), sondern kleine, aber hilfreiche Details, die oft ungenutzt bleiben, werden hier vorgestellt. Natrlich nennen wir auch einige Quellen im Internet, in denen Sie zustzliche Informationen finden knnen. Auch erklren wir, wie Sie in den gngigen Newsgroups Hilfe finden knnen, wie Sie mit Google in den Newsgroups recherchieren oder selber an den Diskussionen teilnehmen knnen. Einige Grundlagenthemen, die aus Platzgrnden nicht in die Rezepte aufgenommen werden konnten, werden im Referenzteil ebenfalls kurz aufgegriffen und erlutert. Da das .NET Framework nicht alles abdecken kann, werden in einigen Rezepten WindowsAPI-Funktionen verwendet. Die verwendeten Funktionen, Strukturen und Konstanten haben wir in einer Klasse gekapselt, die ebenfalls im Referenzteil abgedruckt ist.

Basics

Datum und Zeit

Anwendungen

Teil II Rezepte

Mit GDI+ zeichnen

GDI+-Bildbearbeitung

Windows Forms

Windows Controls

Eigenschaftsfenster (Property Grid)

Dateisystem

Netzwerk

System/WMI

Datenbanken

XML Wissenschaftliche Berechnungen und Darstellungen Geodaten

DirectX

Verschiedenes

BasicsZu Beginn wollen wir Ihnen ein paar grundlegende Vorgehensweisen vorstellen, die einige Leser vielleicht schon kennen. Aber die Erfahrung zeigt, dass viele Umsteiger von VB6 mit den neuen Features von VB.NET und den grundlegenden Framework-Klassen und -Methoden nicht vertraut sind. Daher beginnen wir mit einfachen Dingen wie Zahlenformaten und gehen auch auf Bitoperationen und Vergleiche von Objekten ein.

1

Zahlen-, Zeichen- und String-Literale

Aufgrund der in .NET allgegenwrtigen Typprfungen ist es oft wichtig, bereits die Literale mit dem richtigen Typ zu definieren. Auch wenn VB.NET im Umgang mit Literalen etwas grozgiger ist, als es sein drfte, sollten Sie wissen, wie ein Literal fr den jeweiligen Typ definiert wird. In Tabelle 1 sind die wichtigsten Literal-Formate aufgefhrt.DatentypInteger Integer Short Long Double Double Single Decimal String Char

Postfix I S L F D c

Beispiel123 123I 123S 123L 123.456 123.45E45 123.45F 123.45D "A" "A"c

Framework-TypSystem.Int32 System.Int32 System.Int16 System.Int64 System.Double System.Double System.Single System.Decimal System.String System.Char

Tabelle 1: Definition von Literalen in VB.NET

Die Methode PrintInfoPublic Sub PrintInfo(ByVal o As Object) Debug.WriteLine(o.ToString() & " [" & o.GetType.Name & "]") End Sub

erzeugt bei den folgenden AufrufenPrintInfo(3.2) PrintInfo(3.2F) PrintInfo(3D) PrintInfo(3.2E+25) PrintInfo(3) PrintInfo(3L) PrintInfo(3S) PrintInfo("A") PrintInfo("A"c)

diese Ausgaben:

Basics

40Basics

>> Ganzzahlen dual, oktal oder hexadezimal darstellen

3,2 [Double] 3,2 [Single] 3 [Decimal] 3,2E+25 [Double] 3 [Int32] 3 [Int64] 3 [Int16] A [String] A [Char]

Wollen Sie bei Methodenaufrufen Literale bergeben, dann knnen Sie durch den entsprechenden Postfix gezielt eine berladung fr einen bestimmten Typ aufrufen. Bei dieser Methodenberladung:Public Sub Compute(ByVal value As Integer) ' Berechnungen mit Integer-Wert End Sub Public Sub Compute(ByVal value As Short) ' Berechnungen mit Short-Wert End Sub

knnen Sie gezielt eine der beiden Methoden mit einem Literal aufrufen:Compute(123) ' ruft die erste Variante auf Compute(123S) ' ruft die zweite Variante auf

Alternativ knnen Sie auch den Typ mit einem TypeCast anpassen, entweder allgemein mit CType oder speziell mit den VB-Typumwandlungen CSng, CShort, CChar usw. Hexadezimal-Literale werden genauso definiert wie schon frher in VB6: mit vorangestelltem &H:Dim h As Integer = &H1000 ' weist h den Wert 4096 zu

Analog gilt fr Oktal-Literale ein vorangestelltes &O:Dim o As Integer = &O1000 ' weist o den Wert 512 zu

Datums-Literale werden in amerikanischer Notation angegeben (#Monat/Tag/Jahr# bzw. # Stunde:Minute:Sekunde oder Kombinationen hieraus). Beispiele:Dim d = d = d = d As DateTime #10/20/2003# #2:20:30 PM# #9/10/2004 2:20:30 PM#

2

Ganzzahlen dual, oktal oder hexadezimal darstellen

Bentigen Sie einen String, der die duale, oktale oder hexadezimale Reprsentation einer ganzen Zahl darstellt, dann knnen Sie diesen durch Aufruf der statischen Methode Convert.ToString (Wert, Basis) abrufen. Basis gibt die Darstellungsbasis an. Erlaubt sind die Werte 2 (dual), 8 (oktal) und 16 (hexadezimal). Die AufrufeDebug.WriteLine(Convert.ToString(1024, 2)) Debug.WriteLine(Convert.ToString(1024, 8)) Debug.WriteLine(Convert.ToString(1024, 16))

>> Basics

41Basics

erzeugen die Ausgaben10000000000 2000 400

3

String mit dualer, oktaler oder hexadezimaler Darstellung in Zahlenwert wandeln

Umgekehrt funktioniert die Wandlung selbstverstndlich auch. Je nach bentigtem Datentyp knnen Sie eine der ToXXX-Methoden von Convert verwenden:Convert.ToByte (text, base) Convert.ToInt16 (text, base) Convert.ToInt32 (text, base) Convert.ToInt64 (text, base) base gibt hier wieder die Darstellungsbasis an und kann die Werte 2, 8 und 16 annehmen. Bei-

spielsweise wird mit

Dim b As Byte = Convert.ToByte("0000111", 2)

der Variablen b der Wert 7 zugewiesen.

4

Zahlenwerte formatieren

Jeder numerische Datentyp verfgt ber eine eigene berschreibung der Methode ToString mit verschiedenen berladungen. Eine der berladungen nimmt als Parameter einen FormatString an, mit dem Sie definieren knnen, wie der Zahlenwert ausgegeben werden soll. Wird kein Format-String bergeben, wird eine Standardformatierung vorgenommen (Format General). Die mglichen Formatierungen sind von Typ zu Typ unterschiedlich. Grundstzlich gibt es standardisierte Formatbezeichner wie D, E, X usw. sowie benutzerdefinierte Formate wie #.## und 0000. Hier einige Beispiele: Verschiedene Formatierungen fr Integer-Werte:Dim value As Integer = 876 Debug.WriteLine(value.ToString("00000")) Debug.WriteLine(value.ToString("d")) Debug.WriteLine(value.ToString("e")) Debug.WriteLine(value.ToString("X"))

erzeugen die Ausgabe00876 876 8,760000e+002 36C

Oder fr Double-Werte:Dim value As Double = 0.43219 Debug.WriteLine(value.ToString("G")) Debug.WriteLine(value.ToString("00.00"))

42Basics

>> Positive und negative Zahlen unterschiedlich formatieren

Debug.WriteLine(value.ToString("##.##")) Debug.WriteLine(value.ToString("0.00%")) Debug.WriteLine(value.ToString("E"))

mit den Ausgaben0,43219 00,43 ,43 43,22% 4,321900E-001

Bei der Verwendung von Dezimal- und Tausendertrennzeichen werden die lnderspezifischen Einstellungen des Betriebssystems bercksichtigt. Die Beispielausgaben wurden auf einem deutschen Betriebssystem erzeugt. Zur Formatierung von Datum und Uhrzeit siehe Rezept 36.

5

Positive und negative Zahlen unterschiedlich formatieren

In manchen Fllen mssen positive und negative Werte unterschiedlich behandelt werden. Hierfr lsst sich der Format-String in Abschnitte aufteilen. Diese Abschnitte werden mit einem Semikolon getrennt. Zwei oder drei Abschnitte sind mglich. Bei zwei Abschnitten gibt der erste das Format fr positive Zahlen und Null an, der zweite das Format fr negative Zahlen. Bei drei Abschnitten gibt der erste das Format fr positive Zahlen, der zweite fr negative Zahlen und der dritte fr den Wert null an. Die Ausgabe in der For-SchleifeFor i As Integer = -1 To 1 Debug.WriteLine(i.ToString("Positiv: +00;Negativ: -00;Null: 00")) Next

erzeugt die Ausgaben:Negativ: -01 Null: 00 Positiv: +01

6

Zusammengesetzte Formatierungen

Mithilfe der Methode String.Format knnen Sie auf einfache Weise komplexe Werte formatiert zusammenfhren. Als ersten Parameter bergeben Sie hierzu einen Format-String. Die bentigten Werte sind die nachfolgenden Parameter:String.Format ( Formatstring, Wert1, Wert2, Wert3 ...)

Der Format-String kann beliebigen Text beinhalten. Um an einer bestimmten Position einen der bergebenen Werte einzusetzen, geben Sie dessen Index in geschweiften Klammern an. Beispiel:Dim Dim Dim Dim d i x p As As As As Double = 54.293 Integer = 200 Integer = 1023 Double = 0.55

>> BasicsDim t As String t = String.Format("d: {0}, i: {1}, x: {2}, p:{3}", d, i, x, p) Debug.WriteLine(t)

43Basics

Erzeugt die Ausgabe:d: 54,293, i: 200, x: 1023, p:0,55

Fr jeden Parameter knnen Sie, abgetrennt durch einen Doppelpunkt, die Formatierung whlen. Der Format-String"d: {0:0.0}, i: {1:0000}, x: {2:X}, p:{3:0.0%}"

eingesetzt in obigem Code fhrt zu folgender Ausgabe:d: 54,3, i: 0200, x: 3FF, p:55,0%

7

Format-Provider fr eigene Klassen definieren

Auch fr Ihre eigenen Klassen knnen Sie Formatierungen durch Format-Strings untersttzen. Hierzu mssen Sie lediglich die Schnittstelle IFormattable implementieren und die Methode ToString mit den entsprechenden Parametern berladen. Sie knnen beliebige Format-Strings untersttzen. Einzig das Format G ist Pflicht. In Listing 1 sehen Sie ein Beispiel fr die Klasse Vector, welche die Formate X, Y, Z und G untersttzt. Fr X und Y wird jeweils der Zahlenwert der betreffenden Komponente zurckgegeben, bei Z eine spezielle Formatierung mit spitzen Klammern und bei G und allen anderen die Standardformatierung, die auch die ToString-berladung ohne Parameter zurckgibt.Public Class Vector Implements IFormattable Public X, Y As Double Public Sub New(ByVal x As Double, ByVal y As Double) Me.X = x Me.Y = y End Sub Public Overloads Overrides Function ToString() As String Return String.Format("({0},{1})", X, Y) End Function Public Overloads Function ToString(ByVal format As String, _ ByVal formatProvider As System.IFormatProvider) As String _ Implements System.IFormattable.ToString ' Gewnschtes Format bercksichtigen Select Case format Case "X", "x" : Return X.ToString("0.00") Case "Y", "y" : Return Y.ToString("0.00") Case "Z", "z" : Return String.Format( _ Listing 1: Untersttzen von Formatanweisungen durch Implementierung der Schnittstelle IFormattable

44Basics

>> Ausgaben in lnderspezifischen Formaten

"", X, Y) Case Else : Return Me.ToString() End Select End Function End Class Listing 1: Untersttzen von Formatanweisungen durch Implementierung der Schnittstelle IFormattable (Forts.)

Die AusgabenDim V1 As New Vector(4.283, 6.733) Dim V2 As New Vector(21.4, 55.2) Debug.WriteLine(String.Format("{0} und {1}", V1, V2)) Debug.WriteLine(String.Format("{0:z} und {1:z}", V1, V2)) Debug.WriteLine(String.Format("{0:x} und {0:y}", V1))

fhren zu folgendem Ergebnis:(4,283,6,733) und (21,4,55,2) und 4,28 und 6,73

8

Ausgaben in lnderspezifischen Formaten

Formatierte Zahlen- und Datumsausgaben erfolgen stets in den kulturspezifischen Formaten, wie sie in den Lndereinstellungen des Betriebssystems vorgegeben worden sind. Sie knnen diese Einstellung aber temporr fr den laufenden Thread ndern, um nachfolgende Ausgaben in einem lnderspezifischen Format eines anderen Landes zu formatieren. Zunchst bentigen Sie hierzu die Referenz des CultureInfo-Objektes der gewnschten Kultur. Diese erhalten Sie beispielsweise ber die Methode CultureInfo.CreateSpecificCulture. bergeben knnen Sie den aus Sprachcode und Landescode bestehenden Namen (siehe RFC 1766), z.B. de-DE, en-US, nl-NL usw. Anschlieend weisen Sie die Referenz der CurrentCulture-Eigenschaft des laufenden Threads zu. Danach erfolgen alle Formatierungen mit dem neu eingestellten Format, bis Sie wieder ein anderes CultureInfo-Objekt zuweisen. Ein Beispiel hierzu: Der folgende CodeDebug.WriteLine("ISO-Datum: Debug.WriteLine("Datum : " Debug.WriteLine("Double : " Debug.WriteLine("Double : " Debug.WriteLine("Whrung: " " & & & &