Auf einen Blick 1 Einführung .................................................................... 17 Teil I Erste Schritte.................................................... 27 2 Aufbau von C#-Programmen ......................................... 29 3 Konstanten, Variablen & Datentypen ........................... 47 4 Zusammengesetzte Datentypen und Namensräume ..... 81 5 Operatoren ................................................................... 101 6 Kontrollkonstrukte ....................................................... 127 Teil II Objektorientierte Programmierung mit C# ..... 153 7 Einführung in die objektorientierte Programmierung ... 155 8 Generische Klassen, Schnittstellen und statische Klassenmitglieder ......................................................... 213 9 Strings & reguläre Ausdrücke ........................................ 245 10 Ausnahmen – Exceptions .............................................. 267 11 Überladen von Operatoren ........................................... 283 12 Delegates und Ereignisse .............................................. 291 13 Indizierer, Enumeratoren und Collections ..................... 315 14 Attribute und Metadaten .............................................. 341 15 XML-Dokumentation und Präprozessor ........................ 367 16 Threading ...................................................................... 389 Teil III Windows Forms .............................................. 423 17 Einführung .................................................................... 425 18 Steuerelemente ............................................................. 471 19 Grafik und Drucken in Windows FormsAnwendungen ............................................................... 505 20 Bibliotheken und CodeDOM ........................................ 555 A Fehlersuche in Programmen .......................................... 569 B Hilfequellen .................................................................. 579 Index ............................................................................. 583 Inhalt 1 Einführung 17 1.1 .NET .................................................................................................................... 1.1.1 Verwendung mehrerer Programmiersprachen für ein Projekt ..... 1.1.2 Garbage Collection und Sicherheit ................................................. 17 19 21 1.2 C# ........................................................................................................................ 22 1.3 Zielgruppe ......................................................................................................... 23 1.4 Danksagungen .................................................................................................. 23 1.5 Kontakt .............................................................................................................. 24 1.6 Aufbau des Buches ........................................................................................... 1.6.1 Anmerkungen zur verwendeten Notation ..................................... 24 25 1.7 C# Version 1 oder 2? ....................................................................................... 25 1.8 Einrichten einer Entwicklungsumgebung .................................................... 25 Teil I Erste Schritte 27 2 Aufbau von C#-Programmen 29 2.1 Hello, World! .................................................................................................... 2.1.1 Der Projektmappen-Explorer ........................................................... 2.1.2 Das Eigenschaftsfenster .................................................................... 2.1.3 Die Fehlerliste .................................................................................... 2.1.4 Der Texteditor .................................................................................... 29 32 33 33 33 2.2 Kommentare ...................................................................................................... 2.2.1 Kommentarblöcke ............................................................................. 2.2.2 Zeilenkommentare ............................................................................ 35 36 37 2.3 Syntax und Semantik ....................................................................................... 38 2.4 Verwendete Syntaxschreibweise ................................................................... 38 2.5 Eine kurze Einführung zum Thema »Klassen« ............................................. 2.5.1 Deklaration von Klassen ................................................................... 2.5.2 Der Einsprungspunkt ........................................................................ 38 39 40 2.6 Zusammenhang zwischen Klassen- & Dateiname ...................................... 40 2.7 Ausgaben auf dem Bildschirm ....................................................................... 2.7.1 Namensräume .................................................................................... 2.7.2 Umbruch der Ausgabe von WriteLine() .......................................... 41 41 42 Inhalt 5 2.8 Assembly ............................................................................................................ 42 2.9 Zusammenfassung ............................................................................................ 2.9.1 Bestandteile eines C#-Programmes ................................................. 2.9.2 Zusätzliches über das .NET Framework .......................................... 2.9.3 C# Sprachelemente ........................................................................... 44 44 45 45 2.10 Übungen ............................................................................................................ 46 3 Konstanten, Variablen & Datentypen 3.1 Das EVA-Prinzip ................................................................................................ 47 3.2 Variablen ............................................................................................................ 3.2.1 Primitive Datentypen in C# .............................................................. 3.2.2 Datentypen für ganzzahlige Werte (Menge der ganzen Zahlen) ................................................................................................ 3.2.3 Datentypen für gebrochene Werte (Menge der rationalen Zahlen) ................................................................................................ 3.2.4 Wahrheitswerte ................................................................................. 3.2.5 Zeichenketten .................................................................................... 3.2.6 Namenskonventionen für Variablen ................................................ 3.2.7 Deklaration von Variablen ................................................................ 3.2.8 Wertzuweisung und Initialisierung von Variablen ......................... 3.2.9 Ausgabe von Variableninhalten ....................................................... 3.2.10 Gültigkeit von Variablen ................................................................... 48 49 3.3 Felder .................................................................................................................. 3.3.1 Deklaration und Initialisierung ......................................................... 3.3.2 Zugriff und Ausgabe von Arrays: [..], foreach ................................ 3.3.3 Mehrdimensionale Arrays ................................................................. 3.3.4 Unregelmäßige Arrays ....................................................................... 3.3.5 Speicherbereinigung .......................................................................... 68 69 70 72 73 73 3.4 Parameter der Main-Funktion ........................................................................ 74 3.5 Typqualifizierer ................................................................................................. 3.5.1 static .................................................................................................... 3.5.2 const .................................................................................................... 75 76 76 3.6 Einlesen von Variablenwerten über die Tastatur ........................................ 76 3.7 Zusammenfassung ............................................................................................ 77 3.8 Übungen ............................................................................................................ 79 4 Zusammengesetzte Datentypen und Namensräume 4.1 6 Inhalt Strukturen .......................................................................................................... 4.1.1 Deklaration einer Struktur ................................................................ 4.1.2 Eine Struktur zur Aufnahme von Adressen .................................... 4.1.3 Werte- und Verweistypen ................................................................ 4.1.4 Boxing und Unboxing ........................................................................ 47 50 51 52 53 53 55 56 62 67 81 81 81 84 85 89 4.2 Aufzählungen (Enumerationen) ..................................................................... 4.2.1 Deklaration einer Aufzählung .......................................................... 4.2.2 Enumerationen und Zahlwerte ........................................................ 4.2.3 Basistyp einer Enumeration .............................................................. 89 91 91 93 4.3 Namensräume ................................................................................................... 4.3.1 Definition eines Namensraums ........................................................ 4.3.2 Die using-Klausel ............................................................................... 94 94 96 4.4 Zusammenfassung ............................................................................................ 4.4.1 Strukturen ........................................................................................... 4.4.2 Enumerationen .................................................................................. 4.4.3 Namespaces ....................................................................................... 97 97 98 98 4.5 Übungen ............................................................................................................ 99 5 Operatoren 5.1 Operatoren in C# ............................................................................................. 101 5.2 Additive und multiplikative Operatoren ...................................................... 103 5.2.1 Addition, Subtraktion, Multiplikation und Division ...................... 103 5.2.2 Division mit Rest (Division modulo x) ............................................ 104 101 5.3 Der Zuweisungsoperator ................................................................................ 105 5.4 Primäre Operatoren ......................................................................................... 5.4.1 Klammerung "()" ................................................................................ 5.4.2 Memberzugriff "." ............................................................................. 5.4.3 Methodenaufruf ................................................................................ 5.4.4 Array-Zugriff "[ ]" ............................................................................... 5.4.5 Post-Inkrement und Post-Dekrement ............................................. 5.4.6 Anlegen von Objekten – Der new-Operator ................................. 5.4.7 Typ und Größe einer Variablen ........................................................ 5.4.8 Geprüfte und ungeprüfte Ausführung von Operationen ............. 106 106 107 107 108 108 109 111 113 5.5 Unäre Operatoren ............................................................................................ 5.5.1 Vorzeichen .......................................................................................... 5.5.2 Negationen ......................................................................................... 5.5.3 Pre-Inkrement und Pre-Dekrement ................................................ 5.5.4 Typumwandlung ................................................................................ 116 116 116 117 118 5.6 Schiebe-Operatoren ........................................................................................ 119 5.7 Relationale und Vergleichs-Operatoren ....................................................... 120 5.7.1 Vergleichsoperatoren ........................................................................ 120 5.7.2 Die Operatoren is und as ................................................................. 121 5.8 Logisches UND, ODER und EXKLUSIV ODER (XOR) ................................ 122 5.9 Bedingtes UND, ODER und EXKLUSIV ODER ............................................ 123 5.10 Bedingung ......................................................................................................... 124 5.11 Zusammenfassung ............................................................................................ 125 5.12 Übungen ............................................................................................................ 125 Inhalt 7 6 Kontrollkonstrukte 6.1 Nassi-Shneiderman .......................................................................................... 127 6.2 Schleifen ............................................................................................................. 6.2.1 for ........................................................................................................ 6.2.2 while .................................................................................................... 6.2.3 do-while .............................................................................................. 6.2.4 foreach ................................................................................................ 6.2.5 Steuerung der Schleifenabläufe: break & continue ....................... 6.3 Bedingungen (bedingte Anweisungen) ........................................................ 139 6.3.1 if ........................................................................................................... 139 6.3.2 switch-case ......................................................................................... 144 6.4 goto ..................................................................................................................... 148 6.5 Unterstützung durch die Entwicklungsumgebung ..................................... 149 6.6 Zusammenfassung ............................................................................................ 149 6.7 Übungen ............................................................................................................ 150 Teil II Objektorientierte Programmierung mit C# 7 7.1 8 127 Einführung in die objektorientierte Programmierung 128 129 133 136 138 138 153 155 Klassen und Objekte ........................................................................................ 7.1.1 Die Klasse als programmiersprachliche Beschreibung von realen Objekten ................................................................................. 7.1.2 Objektmethoden ............................................................................... 7.1.3 Eine spezielle Methode: Der Konstruktor ...................................... 7.1.4 Die Vererbungslehre in der Programmiersprache ......................... 7.1.5 Gleichheit von Objekten ................................................................... 7.1.6 Überladen von Methoden ................................................................ 7.1.7 Überschreiben von Methode: Virtuelle Methoden ....................... 155 155 163 172 177 188 188 191 7.2 Abstrakte Klassen ............................................................................................. 194 7.2.1 Abstrakte Methoden ......................................................................... 195 7.3 Eigenschaften (Properties) .............................................................................. 7.3.1 get ........................................................................................................ 7.3.2 set ........................................................................................................ 7.3.3 Unterschiedliche Sichtbarkeitsstufen für Getter und Setter ......... 7.3.4 Benutzung von Properties ................................................................ 7.4 Klassen auf mehrere Dateien verteilen: partielle Klassen ......................... 202 7.5 Ref- & Out-Parameter von Methoden .......................................................... 203 7.5.1 Ref-Parameter .................................................................................... 203 7.5.2 Out-Parameter ................................................................................... 204 Inhalt 196 198 199 200 201 7.6 Die Speicherverwaltung von .NET ................................................................ 205 7.6.1 Finalize() und C#-Destruktoren ....................................................... 206 7.6.2 Referenzen auf Objekte während Finalisierung ............................. 208 7.7 Zusammenfassung ............................................................................................ 7.7.1 Klassen ................................................................................................ 7.7.2 Properties ........................................................................................... 7.7.3 Methoden ........................................................................................... 7.8 Übungen ............................................................................................................ 209 8 Generische Klassen, Schnittstellen und statische Klassenmitglieder 208 208 209 209 213 8.1 Klassen mit Typparametern: Generische Klassen – Generics ................... 8.1.1 Anwendung auf die Klasse Stack ..................................................... 8.1.2 Instanzen der Klasse Stack erstellen ................................................ 8.1.3 Typparameter und Vererbung .......................................................... 8.1.4 Generische Methoden ...................................................................... 213 214 216 216 217 8.2 Schnittstellen .................................................................................................... 8.2.1 Deklaration einer Schnittstelle ......................................................... 8.2.2 Implementierung einer Schnittstelle ............................................... 8.2.3 Schnittstellen und Typparameter .................................................... 8.2.4 Einschränkungen für Typparameter festlegen ................................ 218 218 220 222 223 8.3 Klassenmember (statische Member) ............................................................ 8.3.1 Statische Methoden .......................................................................... 8.3.2 Statische Daten .................................................................................. 8.3.3 Statische Eigenschaften ..................................................................... 8.3.4 Statische Daten in nicht-statischen Methoden .............................. 8.3.5 Statische Klassen ................................................................................ 8.3.6 Erzeugung von Objekten mit privaten Konstruktoren .................. 224 225 225 226 226 226 227 8.4 Objektorientierte Schmankerl5 in C# ........................................................... 8.4.1 Neuimplementierung einer Methode ............................................. 8.4.2 sealed vor virtuellen Methoden ....................................................... 8.4.3 Zugriff auf Implementierung der Basisklasse: base Teil II ............. 8.4.4 Dispose(): Eine bessere Lösung als Finalize() ................................. 228 228 233 233 236 8.5 Weitere Elemente der Unified Modelling Language ................................. 237 8.5.1 Schnittstellen ...................................................................................... 237 8.5.2 Assoziationen ..................................................................................... 238 8.6 Unterstützung durch die Entwicklungsumgebung ..................................... 239 8.7 Zusammenfassung ............................................................................................ 8.7.1 Generische Klassen ............................................................................ 8.7.2 Schnittstellen ...................................................................................... 8.7.3 Klassenmember .................................................................................. 8.7.4 Methoden und die Vererbung ......................................................... 8.8 Übungen ............................................................................................................ 242 241 241 241 242 242 Inhalt 9 10 9 Strings & reguläre Ausdrücke 245 9.1 Zeichenketten ................................................................................................... 9.1.1 string vs. String ................................................................................... 9.1.2 Länge von Zeichenketten .................................................................. 9.1.3 Iteration über eine Zeichenkette ..................................................... 9.1.4 Vergleich zweier Zeichenketten ....................................................... 9.1.5 Untersuchung von Zeichenketten ................................................... 9.1.6 Splitting von Strings ........................................................................... 9.1.7 Zurechtschneiden von Zeichenketten ............................................. 9.1.8 Groß- und Kleinschreibung .............................................................. 9.1.9 Löschen und Ersetzen von Zeichen ................................................. 9.1.10 Einfügen von Zeichen ........................................................................ 9.1.11 Teilstrings herauslösen ...................................................................... 9.1.12 Weitere Operationen mit Strings im Überblick ............................. 9.1.13 Format() .............................................................................................. 245 245 246 246 247 250 251 252 253 253 254 254 255 255 9.2 Dynamische Zeichenketten – StringBuilder ................................................. 9.2.1 Instantiierung eines StringBuilder-Objektes ................................... 9.2.2 Eigenschaften und Methoden .......................................................... 9.2.3 ToString() ............................................................................................ 255 256 256 257 9.3 Reguläre Ausdrücke ......................................................................................... 9.3.1 Regex: Eine Klasse für reguläre Ausdrücke ..................................... 9.3.2 Grundlegender Aufbau eines regulären Ausdrucks ....................... 9.3.3 Optionen ............................................................................................. 259 259 260 262 9.4 Zusammenfassung ............................................................................................ 265 9.5 Übungen ............................................................................................................ 266 10 Ausnahmen – Exceptions 267 10.1 Der klassische Ansatz: Rückgabewerte ........................................................ 267 10.2 Exception-Mechanismus ................................................................................. 10.2.1 Exceptions – Allgemein ..................................................................... 10.2.2 Exceptions – Wie funktioniert's? ..................................................... 10.2.3 Exceptions – Nachteile ...................................................................... 10.2.4 Exceptions und .NET ......................................................................... 269 269 269 270 271 10.3 Exceptions in C# ............................................................................................... 10.3.1 Das Werfen einer Exception ............................................................ 10.3.2 Das Fangen einer Exception ............................................................. 10.3.3 Member der Klasse Exception ......................................................... 10.3.4 Exception-Klassen .............................................................................. 10.3.5 Eigene Exception-Klassen ................................................................. 10.3.6 Aufräumarbeiten: finally ................................................................... 10.3.7 Verhaltensweisen beim Auftreten einer Ausnahme ...................... 271 271 272 273 274 277 278 279 10.4 Zusammenfassung ............................................................................................ 281 10.5 Übungen ............................................................................................................ 282 Inhalt 11 Überladen von Operatoren 283 11.1 Unäre Operatoren ............................................................................................ 283 11.2 Binäre Operatoren ........................................................................................... 285 11.3 Vergleichsoperatoren ...................................................................................... 287 11.3.1 Equals() ............................................................................................... 287 11.3.2 GetHashCode() .................................................................................. 288 11.4 Einschränkungen .............................................................................................. 289 11.5 Zusammenfassung ............................................................................................ 289 11.6 Übungen ............................................................................................................ 290 12 Delegates und Ereignisse 12.1 Delegates ........................................................................................................... 12.1.1 Beispiel: Motorüberwachung ........................................................... 12.1.2 Die Deklaration eines Delegates ...................................................... 12.1.3 Die Verwendung von Delegates ...................................................... 12.1.4 Erstellen eines Delegates .................................................................. 12.1.5 Multicast-Delegates .......................................................................... 12.1.6 Callback-Methoden und Ausnahmen ............................................. 12.1.7 Delegates und Rückgabewerte ........................................................ 291 291 292 293 295 297 301 301 12.2 Ereignisse ........................................................................................................... 12.2.1 Delegate vs. Ereignis ......................................................................... 12.2.2 Ereignisse: Hintergrund .................................................................... 12.2.3 Deklaration eines Ereignisses ........................................................... 12.2.4 Hinweise ............................................................................................. 12.2.5 Ereignisse und Rückgabewerte ........................................................ 302 302 305 305 307 309 12.3 Generische Delegates ...................................................................................... 309 12.4 Anonyme Methoden ........................................................................................ 309 12.5 Leichtere Erzeugung von Delegate-Instanzen ............................................. 310 12.6 Unterstützung durch die Entwicklungsumgebung ..................................... 311 12.7 Zusammenfassung ............................................................................................ 312 12.8 Übungen ............................................................................................................ 313 13 Indizierer, Enumeratoren und Collections 13.1 Indizierer ............................................................................................................ 13.1.1 Allgemeines über Indizierer ............................................................. 13.1.2 Deklaration eines Indizierers ............................................................ 13.1.3 Die Verwendung eines Indizierers ................................................... 13.1.4 Indizierer mit mehreren Parametern ............................................... 291 315 315 315 315 318 320 Inhalt 11 13.2 13.3 12 Enumeratoren .................................................................................................... 13.2.1 IEnumerable und IEnumerator ......................................................... 13.2.2 Ein Enumerator für BitVector64 ...................................................... 13.2.3 Erweiterungen für die Unterstützung des Enumerators an BitVector64 ........................................................................................ 13.2.4 Verwendung des Enumerators ......................................................... 13.2.5 Zur Perfektion fehlt noch etwas ...................................................... 13.2.6 Noch einmal foreach ......................................................................... 321 321 323 Collections in .NET ........................................................................................... 13.3.1 Vorwort zu Collections für .NET ab Version 2.0 ........................... 13.3.2 ArrayList .............................................................................................. 13.3.3 Queue ................................................................................................. 13.3.4 Stack .................................................................................................... 13.3.5 Hashtable ............................................................................................ 330 331 331 333 335 337 326 327 328 330 13.4 Zusammenfassung ............................................................................................ 338 13.5 Übungen ............................................................................................................ 339 14 Attribute und Metadaten 14.1 Attribute ............................................................................................................ 14.1.1 Attribute im Code platzieren ........................................................... 14.1.2 Reservierte Attribute ......................................................................... 14.1.3 Globale Attribute ............................................................................... 14.1.4 Eigene Attribute entwickeln ............................................................. 14.1.5 Ziele für Attribute .............................................................................. 341 342 342 349 349 352 14.2 Metadaten ......................................................................................................... 14.2.1 Typinformationen zur Laufzeit ermitteln ........................................ 14.2.2 Attribute auslesen .............................................................................. 14.2.3 Ausblick ............................................................................................... 353 354 362 364 341 14.3 Zusammenfassung ............................................................................................ 364 14.4 Übungen ............................................................................................................ 365 15 XML-Dokumentation und Präprozessor 15.1 XML-Dokumentation ....................................................................................... 15.1.1 XML als Datenformat ........................................................................ 15.1.2 Eine weitere Form des Kommentars: /// ..................................... 15.1.3 Dokumentationstags ......................................................................... 15.1.4 Textauszeichnung und Verweise ...................................................... 15.2 Präprozessor ...................................................................................................... 381 15.2.1 Ein- und Ausblenden von Code ....................................................... 381 15.2.2 Weitere Direktiven ............................................................................ 384 367 367 367 371 372 378 15.3 Zusammenfassung ............................................................................................ 386 15.4 Übungen ............................................................................................................ 386 Inhalt 16 Threading 389 16.1 Betriebssystemhintergrund: Prozesse und Threads ................................... 16.1.1 Programme: Historie ......................................................................... 16.1.2 Prozesse und Threads ........................................................................ 16.1.3 Parallelität durch den Einsatz von Threads ..................................... 389 389 391 392 16.2 Threads in C# .................................................................................................... 16.2.1 Thread-Erzeugung ............................................................................. 16.2.2 Auch Threads brauchen ihren Schlaf ............................................... 16.2.3 Suspendieren von außen .................................................................. 16.2.4 Abbruch eines Threads ..................................................................... 16.2.5 Warten auf das Ende eines Threads ................................................ 16.2.6 Aktueller Thread-Zustand ................................................................. 16.2.7 Thread-Prioritäten ............................................................................. 16.2.8 Name eines Threads .......................................................................... 16.2.9 Zusammenfassung der wichtigsten Methoden und Properties der Klasse Thread ............................................................ 16.2.10 Übergabe und Rückgabe von Daten ............................................... 392 392 396 400 402 404 404 405 407 16.3 Synchronisierung .............................................................................................. 16.3.1 Die Gefahr von nicht synchronisierten Threads ............................ 16.3.2 Die Klasse Monitor ............................................................................ 16.3.3 Ein Monitor in C# .............................................................................. 408 408 410 412 16.4 Asynchrone Methodenaufrufe ....................................................................... 16.4.1 BeginInvoke() und EndInvoke() ....................................................... 16.4.2 Methodenaufruf ohne Parameter und Rückgabewert .................. 16.4.3 Methodenaufruf mit Parametern und Rückgabewert ................... 414 414 415 417 16.5 Zusammenfassung ............................................................................................ 420 16.6 Übungen ............................................................................................................ 421 407 408 Teil III Windows Forms 423 17 Einführung 425 17.1 Die Definition und Funktionsweise eines Fensters ................................... 425 17.2 Die Windows Forms-Bibliothek .................................................................... 17.2.1 Der Namensraum .............................................................................. 17.2.2 Fenster vs. Formulare ....................................................................... 17.2.3 Grundgerüst für Windows Forms-Programme .............................. 427 427 427 428 17.3 Die Klasse Form im Detail .............................................................................. 17.3.1 Hinweise zur Online-Hilfe ................................................................ 17.3.2 Wichtige Eigenschaften der Klasse Form ....................................... 17.3.3 Wichtige Methoden der Klasse Form ............................................. 17.3.4 Wichtige Ereignisse der Klasse Form .............................................. 430 430 430 437 441 Inhalt 13 17.4 17.5 14 Einfügen von Elementen in ein Fenster ........................................................ 17.4.1 Einfügen einer Schaltfläche in ein Fenster ...................................... 17.4.2 Das Koordinatensystem von Windows Forms ............................... 17.4.3 Die Positionierung von Elementen in einem Fenster mit Hilfe der Dock- und Anchor-Eigenschaft ........................................ 17.4.4 Das Baukastensystem von Windows Forms ................................... Dialoge 17.5.1 17.5.2 17.5.3 447 448 450 451 455 ............................................................................................................... 456 Dialoge mit ShowDialog() anzeigen ................................................ 456 Vorgefertigte Dialoge ........................................................................ 458 Die Klasse MessageBox ..................................................................... 458 460 460 462 465 17.6 Unterstützung durch die Entwicklungsumgebung ..................................... 17.6.1 Ein neues Projekt anlegen ................................................................ 17.6.2 Hinzufügen und Parametrieren eines Steuerelements .................. 17.6.3 Automatisch generierter Code ......................................................... 17.7 Zusammenfassung ............................................................................................ 468 17.8 Übungen ............................................................................................................ 468 18 Steuerelemente 18.1 Die Basisklasse Control ................................................................................... 18.1.1 Eigenschaften ..................................................................................... 18.1.2 Methoden ........................................................................................... 18.1.3 Ereignisse ............................................................................................ 471 471 475 477 18.2 Containersteuerelemente ................................................................................ 18.2.1 Formulare – Fenster .......................................................................... 18.2.2 Panels – Platten .................................................................................. 18.2.3 FlowLayoutPanel und TableLayoutPanel ........................................ 18.2.4 SplitContainer .................................................................................... 18.2.5 GroupBox ............................................................................................ 18.2.6 TabControl .......................................................................................... 18.2.7 Anmerkungen zum Umgang mit Containersteuerelementen ...... 478 479 479 480 482 484 484 484 18.3 Schaltflächen, Checkboxen und Radiobuttons ............................................ 18.3.1 Schaltflächen – Buttons ..................................................................... 18.3.2 Optionsfelder Teil 1: Checkboxen ................................................... 18.3.3 Optionsfelder Teil 2: Radiobuttons ................................................. 485 485 488 489 18.4 Textfelder ........................................................................................................... 18.4.1 Einfache Textein-/ausgaben: TextBox ............................................. 18.4.2 Formatierte Eingaben: MaskedTextBox .......................................... 18.4.3 Dokumente mit Formatierungen: RichTextBox ............................. 490 490 490 491 18.5 Beschriftungen .................................................................................................. 492 18.6 Bilder .................................................................................................................. 494 18.7 Listen und Tabellen .......................................................................................... 18.7.1 Einfache Listen: ListBox und CheckedListBox ................................ 18.7.2 Aufklappbare Listen: ComboBox ..................................................... 18.7.3 Listen und Tabellen: ListView .......................................................... 18.7.4 Bäume: TreeView ............................................................................... Inhalt 471 494 495 495 496 497 18.8 Menüs, Symbolleisten und Kontextmenüs .................................................. 18.8.1 Menüs ................................................................................................. 18.8.2 Symbolleisten ..................................................................................... 18.8.3 Kontextmenüs .................................................................................... 497 497 499 500 18.9 Sonstige Steuerelemente ................................................................................ 18.9.1 Darstellung von Objekteigenschaften: PropertyGrid .................... 18.9.2 Zeitlich wiederkehrende Aufgaben auslösen ................................. 18.9.3 Fortschrittsanzeige und Schiebebalken: ProgressBar und TrackBar ...................................................................................... 500 500 501 502 18.10 Zusammenfassung ............................................................................................ 503 18.11 Übungen ............................................................................................................ 504 19 Grafik und Drucken in Windows FormsAnwendungen 505 19.1 Grafik – GDI+ .................................................................................................... 19.1.1 Einfache, grafische Ausgaben: Das Graphics-Objekt .................... 19.1.2 Der Garbage Collector und das Graphics-Objekt .......................... 19.1.3 Farben ................................................................................................. 19.1.4 Stifte und Pinsel ................................................................................. 19.1.5 Koordinaten und Punkte .................................................................. 19.1.6 Rechtecke ........................................................................................... 19.1.7 Größe des Zeichenbereichs ermitteln ............................................. 19.1.8 Methoden zum Zeichnen ................................................................. 19.1.9 Methoden zum Füllen von Flächen ................................................ 19.1.10 Fehler in der grafischen Ausgabe .................................................... 19.1.11 Ausgabe einzelner Bildpunkte ......................................................... 19.1.12 Grafische Pfade .................................................................................. 19.1.13 Regionen ............................................................................................. 19.1.14 Erzeugen von Graphics-Objekten ................................................... 505 505 506 507 510 515 515 516 516 531 534 534 535 537 537 19.2 Icons und Bilder ............................................................................................... 537 19.2.1 Icons .................................................................................................... 538 19.2.2 Bilder ................................................................................................... 539 19.3 Drucken .............................................................................................................. 19.3.1 Ereignisse der Klasse PrintDocument ............................................. 19.3.2 Eigenschaften der Klasse PrintDialog .............................................. 19.3.3 Erstellen einer Druckvorschau ......................................................... 19.4 Unterstützung durch die Entwicklungsumgebung ..................................... 552 542 545 546 548 19.5 Zusammenfassung ............................................................................................ 552 19.6 Übungen ............................................................................................................ 553 20 Bibliotheken und CodeDOM 20.1 Bibliotheken ...................................................................................................... 555 20.1.1 Statische und dynamische Bibliotheken ......................................... 555 555 Inhalt 15 20.1.2 20.1.3 20.1.4 Unterschied zwischen einem Programm und einer Bibliothek .... 556 Ein einfaches Beispiel ........................................................................ 556 Projekte mit mehreren Code-Dateien ............................................ 559 CodeDOM ......................................................................................................... 20.2.1 Ein Simulator für ein Makro ............................................................. 20.2.2 Die Oberfläche der Anwendung ...................................................... 20.2.3 Code zur Laufzeit erzeugen .............................................................. 20.2.4 Vorbemerkungen ............................................................................... 20.2.5 Die Methode OnClickedStart() ........................................................ 20.3 Zusammenfassung ............................................................................................ 567 20.4 Übungen ............................................................................................................ 568 A Fehlersuche in Programmen A.1 Trace-Ausgaben ................................................................................................ 569 A.2 Der Debugger von Visual C# 2005 Express ................................................. A.2.1 Programme im Debugger starten .................................................... A.2.2 Variablenwerte anzeigen ................................................................... A.2.3 Weitere Debug-Fenster .................................................................... B Hilfequellen B.1 Online-Hilfe ....................................................................................................... 579 B.2 Quickstart Tutorials ......................................................................................... 580 569 571 571 574 576 579 B.3 Webseiten .......................................................................................................... 581 B.4 Bücher ................................................................................................................ 582 Index 16 560 561 562 562 562 563 20.2 Inhalt 583 1 2 2 Aufbau von C#-Programmen 3 In diesem Kapitel lernen Sie den grundlegenden Aufbau von C#-Programmen kennen. Des Weiteren werde ich Sie mit Begriffen wie »Klasse«, »Objekt«, »namespace« und »Assembly« sowie Syntax und Semantik einer Programmiersprache vertraut machen. 4 5 6 Bevor wir uns in eine Unmenge von neuen Begriffen stürzen, möchte ich Ihnen gerne ein erstes, kleines Programm – in C# geschrieben – vorstellen. Es trägt den Namen »Hello-World«, benannt nach der Ausgabe, die es am Bildschirm erzeugt. 7 8 Dieses Programm besitzt einen großen Bekanntheitsgrad in der Entwicklergemeinde: Fast jeder Programmierer hat es mindestens einmal geschrieben. Es veranschaulicht auf einfache Art und Weise, aus welchen Sprachelementen ein minimales Programm besteht. Seit seiner Erfindung vor vielen Jahren hat es sich hartnäckig in der einschlägigen Literatur gehalten. 10 2.1 11 9 Hello, World! Da ich mit dieser »Tradition« nicht brechen möchte, finden Sie im nachfolgenden Listing 2.1 die C#-Version1 des »Hello-World« Programms. 01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 12 /* HelloWorld.cs Das Programm gibt "Hello, World!" am Bildschirm aus und beendet sich danach */ 13 class HelloWorld { public static void Main() { System.Console.WriteLine("Hello, World!"); } } 16 14 15 17 18 19 Listing 2.1 Das erste C#-Programm (HelloWorld). 20 Es gilt nun zunächst, dieses Programm zum Laufen zu bringen. Starten Sie hierfür die Entwicklungsumgebung Visual C# 2005 Express, indem Sie den Eintrag Visual C# 2005 Express Edition im Startmenü Ihres Windows-Systems anklicken. Danach erscheint nach kurzer Wartezeit die Entwicklungsumgebung auf Ihrem Bildschirm (Abbildung 2.1). A B 1 Im Buch »C#« von Eric Gunnerson (ebenfalls bei Galileo Computing erschienen), heißt es auch »Hello, Universe!« – wiederum frei nach dem ausgegebenen Text. Aufbau von C#-Programmen 29 Abbildung 2.1 Die Entwicklungsumgebung, wie sie sich nach dem Start präsentiert. Wenn Sie die Entwicklungsumgebung gestartet haben, sehen Sie zunächst die Startseite: Auf ihr finden Sie Informationen über Visual C# 2005 Express Edition (in der Mitte), die zuletzt bearbeiteten Projekte und kleine Anleitungen, genannt Erste Schritte. Möchte man ein Programm erstellen, muss dazu zunächst ein Projekt erzeugt werden: Projekte erfüllen Verwaltungsaufgaben; so enthalten sie Informationen darüber, welche Art von Programm2 erstellt und aus welchen Dateien der C#-Code für die Anwendung entnommen werden soll. Sie müssen also zunächst ein neues Projekt erstellen. Klicken Sie hierzu in dem Bereich Zuletzt geöffnete Projekte hinter dem Eintrag Erstellen den Schriftzug Projekt mit der linken Maustaste einmal an (Abbildung 2.2). Wählen Sie in dem darauf folgenden Dialog den Eintrag Konsolenanwendung aus (Abbildung 2.3); Sie können zudem im Feld Name einen anderen als den vorgeschlagenen Namen für das Projekt eingeben. Für alle Programme, die im Rahmen dieses Buches im weiteren Verlauf angeführt werden, können Sie Projekte dieses Anwendungstyps erstellen; Ausnahmen werde ich als solche kennzeichnen. Wenn Sie diesen Dialog durch einen Klick auf die Schaltfläche OK schließen, wird ein neues Projekt angelegt und geöffnet. 2 Konsolen-, Windows-Anwendungen und Bibliotheken sind die Arten, die am häufigsten benötigt werden. 30 Aufbau von C#-Programmen 1 2 3 4 5 6 Abbildung 2.2 Sie können ein neues Projekt über die Startseite erstellen, indem Sie auf den Eintrag Projekt hinter Erstellen klicken. 7 8 9 10 11 12 13 14 Abbildung 2.3 Erstellen Sie zunächst Konsolenanwendungen. Der Arbeitsbereich von Visual C# 2005 Express ist üblicherweise in drei Teile geteilt: In der Mitte sehen Sie einen Texteditor, am rechten Rand im oberen Teil den Projektmappen-Explorer und darunter das Eigenschaftsfenster. Am unteren Rand sehen Sie eine – hoffentlich leere – Liste mit aufgetretenen Fehlern (Abbildung 2.4). 15 Falls Sie nicht das gleiche Fenster wie in Abbildung 2.4 sehen, kann dies daran liegen, dass noch nicht alle Ansichten ausgeklappt sind. Fahren Sie in diesem Fall mit der Maus auf die sich an den Rändern befindlichen Schaltflächen; wenn Sie mit dem Mauszeiger kurz über diesen verweilen oder auf sie klicken, fährt das zugehörige Fenster heraus. Sie können dies dann durch einen Klick auf das Pinnwand-NadelSymbol des jeweiligen Fensters verankern. Falls Ihnen die Gestaltung des Arbeitsbereichs nicht zusagt, können Sie die Fenster auch an andere Ränder verschieben: Ziehen Sie diese hierzu einfach mit der Maus an den entsprechenden Fensterrand. Haben Sie ein Fenster aus Versehen geschlossen, können Sie dieses über das Menü Ansicht wiederherstellen. 17 16 18 19 20 A B Hello, World! 31 Abbildung 2.4 Der Arbeitsbereich von Visual C# 2005 Express 2.1.1 Der Projektmappen-Explorer Der Projektmappen-Explorer verwaltet die gerade geöffneten Projekte in Visual C# 2005 Express. Eine Projektmappe besitzt mindestens ein Projekt. Ein Projekt wiederum besteht aus Eigenschaften3, Verweisen und einzelnen Dateien mit C#-Code. Die Eigenschaften eines Projekts werden in Form einer Datei, meist AssemblyInfo.cs genannt, angegeben. Diese enthält C#-Code, so genannte Attribute4. Man kann hier die aktuelle Versionsnummer, den Autor usw. einstellen. Der Ordner Verweise enthält zusätzliche Abhängigkeiten, die die Anwendung benötigt, um später ausgeführt werden zu können. Darunter finden Sie die einzelnen Dateien, aus denen das spätere Programm zusammengebaut wird. Abbildung 2.5 Der Projektmappen-Explorer zeigt Projekte in einer Ordnerstruktur an. 3 engl. Properties 4 Attribute werden im Kapitel 14 ausführlich erläutert. 32 Aufbau von C#-Programmen 1 2 2.1.2 Das Eigenschaftsfenster 3 Wenn Sie ein Element im Projektmappen-Explorer ausgewählt haben, werden in diesem Fensterchen die dem Element zugeordneten Eigenschaften angezeigt. Bitte beachten Sie, dass Sie nicht alle Eigenschaften ändern können, da einige nur lesbar sind. Diese werden dann in grauer Farbe dargestellt. 2.1.3 4 5 Die Fehlerliste 6 Die Fehlerliste wird erst ein wenig später benötigt; sie enthält eine Auflistung aller Fehlermeldungen und Warnungen, die vom C#-Compiler während des Übersetzungsvorgangs erzeugt wurden. Lässt sich Ihr Programm nicht übersetzen, finden Sie meist den Grund dafür in diesem Fenster. Ein Doppelklick auf einen Eintrag führt Sie dann zu der entsprechenden Zeile in Ihrem Quellcode, an der der Fehler oder die Warnung aufgetreten ist: Ein Programm muss fehlerfrei sein, sonst lässt es sich nicht ausführen. Warnungen geben Hinweise an den Programmierer, dass er oder sie sich um eine bestimmte Stelle im Code nochmals Gedanken machen sollte – diese können und sollten beachtet werden, aber das ist kein Zwang. 10 2.1.4 11 7 8 9 Der Texteditor Das Herzstück der Entwicklungsumgebung bildet der Texteditor in der Mitte des Visual C# 2005 Express Fensters: Hier geben Sie Ihre Programme ein. Löschen Sie den Text, der automatisch für Sie generiert wurde, und tippen Sie dafür den in Listing 2.1 gezeigten Code ein (Abbildung 2.6). Speichern Sie nach der Eingabe die Datei über das entsprechende Symbol in der Symbolleiste oder über das Menü Datei. 12 13 14 Auch wenn das Kopieren der hier vorgestellten Programme sehr einfach geht, schreiben Sie sie ab! Viele Dinge lernt man besser, wenn man sie praktisch übt. Dazu gehören auch simpel aussehende Programme. 15 16 Wenn Sie alles richtig abgetippt haben, können Sie versuchen, das Programm mit dem Compiler übersetzen: Wählen Sie hierfür den Eintrag Projektmappe erstellen aus dem Menü Erstellen oder drücken Sie die Taste (F6). 17 18 Sollten im Programm Fehler vorhanden sein, bekommen Sie diese mit einer (mehr oder weniger genauen) Fehlermeldung sowie der betreffenden Zeilennummer vom Übersetzer gemeldet. Diese Fehlermeldungen werden in der Fehlerliste eingetragen. 19 20 C#-Programme sind casesensitive, d.h. es wird zwischen Groß- und Kleinschreibung unterschieden! Wenn Fehler auftreten, vergewissern Sie sich zunächst, dass nicht nur das entsprechende Wort korrekt geschrieben wurde, sondern auch die Schreibweise zu 100 % übereinstimmt! Hello, World! A B 33 Index -- (Post-Dekrement) 108 -- (Pre-Dekrement) 117 - (Subtraktion) 103, 285 - (Vorzeichen) 116, 283 ! 116, 283 -- 283 != 120, 287 #define 382 #elif 382 #else 382 #endif 382 #endregion 385 #error 385 #if 382 ! 384 != 384 && 384 == 384 || 384 #line 385 #region 385 #undef 382 #warning 385 % 104, 285 %= 105 & 122, 285 && 123, 289 &= 123 () (Methodenaufruf) 107, 165 () (runde Klammern) 106 () (Typumwandlung) 118 * 103, 285 *= 105 + 103, 285 + (Vorzeichen) 283 + (Zeichenketten) 104 ++ 283 ++ (Post-Inkrement) 108 ++ (Pre-Inkrement) 117 += 105, 298, 300 , 132 . (Memberzugriff) 107, 161, 289 .NET .NET Framework 19 Assembly 42 C# 22 COM Interop 20 Common Language Runtime (CLR) 43 Compact Framework 20 Exceptions 18 Garbage Collection 17 IL Disassembler 43 Intermediate Language 20 Just-In-Time Compiler 20 Linux 20 Memory Leaks 21 Mono 20 Polymorphie 18 Übersicht 17 Webservices 18 / 103, 285 /* */ 371 // 371 /// 371 /= 105 /unsafe 112 < 120, 287 << 119, 285 <<= 119–120 <= 287 <list> bullet 380 number 380 table 380 -= 105, 298, 300, 304 = 105, 289 == 120, 249, 287 > 120, 287 >= 120, 287 >> 119, 285 >>= 119 ?: 124, 289 [] 108, 319 ^ 122–123, 285 ^= 123 | 122, 285 |= 123 || 123, 289 ~ 117, 283 ~ (Destruktor) 206 A Ableitungshierarchie 218 abstract 194–195 Alignment 113 AnchorStyles 453 anonyme Methoden 309 AppDomain 76 Index 583 Application 468 ArgumentNullException 275 Array 68 Deklaration 69 foreach 70, 138 Initialisierung 69 mehrdimensionale Arrays 72 unregelmäßige Arrays 73 Zugriff 70, 108 ArrayList 331 Member 331 as 121, 180 Assembly 355, 486 GetExecutingAssembly() 355 GetModules() 357 GetName() 357 AssemblyCompany 364 AssemblyCopyright 364 AssemblyDescription 364 AssemblyInfo.cs 349 AssemblyName 357 CodeBase 357 Name 357 Version 357 AssemblyProduct 364 AssemblyTitle 364 AssemblyTrademark 364 AssemblyVersion 364 AsyncCallback 418 asynchrone Methodenaufrufe 414 BeginInvoke() 414 Callbacks und Zustandsobjekt 418 EndInvoke() 414 Methodenaufruf mit Parametern und Rückgabewert 417 Methodenaufruf ohne Parameter und Rückgabewert 415 AsyncResult 419 AsyncDelegate 419 AsyncWaitHandle 417 Attribute 341, 350 AssemblyInfo.cs 349 aus Metadaten auslesen 362 durch C# reservierte 342 eigene erstellen 349 erweiterte Syntax 348 globale 349 im Code platzieren 342 Syntax 342 Ziele 352 AttributeTargets 347 Werte 347 584 Index AttributeUsage 342, 347 Properties 348 Aufzählung 89 Ausgabe 62 formatiert 63 Variablen 62 Währung 64 Ausnahme 167 B base 184, 233 Bedingungen 139 if 139 switch-case 144 Benutzeroberfläche 425 Beschriftungen Label 492 LinkLabel 492 Bezeichner 53 Bézier-Kurve 519 Bibliotheken 555 dynamische 555 Main() 556 statische 555 Bilder 539 Formate 539 Bildlisten 542 Bildschirmausgaben 41 binäre Periodizität 51 BindingFlags 359 Bitmap 539 GetPixel() 541 SetPixel() 541 Bitmaske 122 bool 52, 364 BorderStyle 479 Bottom-Up 362 Boxing 85, 89, 119, 213, 288 break 138, 144 Brush 506, 512 Brushes 515 Button 485, 561 Click 485, 567 ImageAlign 487 TextAlign 487 Buttons 485 byte 50, 364 C CancelEventArgs 442–443 Cancel 442–443 CancelEventHandler 442 Cardinal-Spline-Kurve 521 case 144 Cast 118, 300 catch 272 Category 501 char 50, 247, 364 CheckBox 488 Checked 488 CheckedChanged 488 CheckState 488 CheckStateChanged 488 ThreeState 488 checked 113 CheckedListBox 495 CheckState 488 class 157 CloseReason 442 CodeDOM 560, 562 Collection 250 Collections 330 ArrayList 331 Hashtable 337 Queue 333 Stack 335 Color 507–508 FromArgb() 508 GetBrightness() 509 GetHue() 509 GetSaturation() 509 COM 222, 341 ComboBox 495 CompilerParameters 563 CompilerOptions 564 ReferencedAssemblies 564 ReferencedAssemblies.Add() 564 CompilerResult Errors 565 CompilerResults 564 Component Object Model 222, 341 Conditional 342, 344 Console 42, 76, 569 const 76 Constraints 223 Container 238 Anmerkungen 484 Dock & Anchor 484 Fenster, Formulare 479 FlowLayoutPanel 480 GroupBox 484 Panels 479 SplitContainer 482 TabControl 484 TableLayoutPanel 480 Container-Controls 456 ContextMenuStrip 500 continue 138 Control 456, 471, 506 Anchor 473 BackColor 472 BackgroundImage 472, 494 BackgroundImageLayout 472 BeginInvoke() 474–475 Click 456, 477 ClientSize 516 Contains() 475 CreateGraphics() 475, 537 Cursor 472–473 Dispose() 475 Dock 473 DoubleBuffered 438 DoubleClick 477 Eigenschaften 471 Enabled 474–475 EndInvoke() 474–475 Ereignisse 477 FindForm() 475 Focus() 475 Font 472 ForeColor 473 GetChildAtPoint() 476 GetContainerControl() 476 GetNextControl() 476 GetStyle() 438, 476 Hide() 476 Invalidate() 476 Invoke 474 Invoke() 475, 501 InvokeRequired 474–475 KeyDown 477 KeyPress 477 KeyUp 477 Location 473 Margin 473 MaximumSize 473 Methoden 475 MinimumSize 473 MouseClick 477 MouseDoubleClick 477 MouseDown 477 MouseEnter 478 MouseHover 478 MouseLeave 478 Index 585 MouseMove 478 MouseUp 477 MouseWheel 478 Move 478 OnPaint() 541–542 Padding 473 Paint 478, 541 Parent 474 Refresh() 476 Resize 478 RightToLeft 473 SetStyle() 438, 476 Show() 476 Size 473 TabIndex 474, 476 TabStop 474, 476 Tag 473 Text 473 Update() 476 UseWaitCursor 473 Visible 474–475 ControlStyles 438 AllPaintingInWmPaint 438 OptimizedDoubleBuffer 438 CSharpCodeProvider 563 CYMK-Farbmodell 509 D DashStyle Enumerationsmember 510 DateTime 491 Debug 569 WriteLine() 569 Debuggen 124 Debugger 571 Haltepunkt 571 Tastenkombinationen 571 Variablenwerte anzeigen 574 decimal 52 default 144 Deklaration Inline 309 Delegate BeginInvoke() 416 EndInvoke() 416 delegate 292 Delegates 291 Aufruf 294 Combine() 298 Deklaration 292 Erzeugung 295 Exceptions im Callback 301 586 Index Generische 309 GetInvocationList() 301 Multicast-Delegates 297 Remove() 298 Rückgabewerte 301 Schreibweise in C# 2.0 310 Typparameter 309 Verwendung 293 Description 501 Destruktor 206, 237 Deklaration 206 Dialoge vorgefertigte 458 DialogResult 456 Dispose() 236 DivideByZeroException 275 DLL 555, 557 do 136 DockStyle 452 Dokumentations-Tags 371, 373–374, 376–380 Übersicht 372 double 52, 364 Double Buffering 438 do-while 136 Drucken 542 Druckvorschau 548 Seitenvorschau 551 E Effizienz 216 Eigenschaftsfenster 33 Einschränkungen 223 Einsprungspunkt 38, 40 elementare Datentypen 49 else 139 enum 91 Enumeration 89 Basistyp 93 Deklaration 91 Zuweisung von Werten 91 Enumeratoren 321 Definition 321 typsicher 328 Verwendung 327 Ereignisse 302 Deklaration 305 Hintergrund 305 Rückgabewerte 309 Vergleich mit Delegate 302 Escape-Sequenzen 59–60, 261 Übersicht 59 EVA-Prinzip 47 event 305 EventArgs 307, 441 EventHandler 441–442, 447, 477–478 Events 304 Source und Sink 307 Exception 167, 200, 237 Exceptions 269 .NET 271 caller beware 281 caller confuse 281 caller inform 281 eigene Exception-Klassen 277 Exception-Klassen 274 fangen 269, 272 finally 278 Funktionsweise 269 in C# 271 in Delegates 301 Klasse 271 Member 273 Nachteile 270 Nachteile, Codierungsaufwand 270 Nachteile, Performance 270 Verhaltensweisen 279 Werfen 269, 271 F false 52, 283 Farben 507 Fehlerliste 33 Feld 68 Fenster 425, 427 Definition und Funktionsweise 425 Einfügen von Elementen 447 Nachrichten 426 Titel 473 transparent 434 FIFO 333 FileNotFoundException 540 FillMode 532, 535 Finalize() 236 Finalizer 237 finally 278 Flag 148 float 52, 364 FlowLayoutPanel 480 for 129, 247, 321 foreach 70, 138, 247, 321, 327, 330 Form 427, 473, 479 Activate() 437 Anchor 451, 453 BackColor 431 BackColorChanged 441 BackgroundImage 431 BackgroundImageChanged 441 ClientSize 431, 436, 450, 516 Close() 429, 437, 456 Closed 442 Closing 440, 442 ContextMenu 431 ControlBox 431 Controls 431 DefaultSize 436 DesktopBounds 432 DesktopLocation 432 Details 430 Dock 451–452 DoubleBuffered 438 Einfügen von Elementen 447 EventHandler 446 Fenstertitel 473 FormBorderStyle 432 FormClosed 442 FormClosing 442 GetChildAtPoint() 446 GetStyle() 438 HelpButton 433 HelpButtonClicked 433, 443 HelpRequested 433, 443 Hide() 438 Icon 434 InitializeComponent() 450 Koordinatensystem 450 Load 446 Location 452 MaximizeBox 431, 433–434 MaximumSize 434 MinimizeBox 431, 433–434 MinimumSize 434 Name 434 OnClosing() 440 OnHelpButtonClicked() 443 OnHelpRequested() 445 OnPaint() 441, 506 Opacity 434 Paint 441, 446, 506 PointToClient() 445 Refresh() 440 Resize 446 ResizeBegin 446 ResizeEnd 446 ResizeRedraw 435 ResumeLayout() 467 Index 587 SetStyle() 438 Show() 438, 440, 456 ShowDialog() 440, 456, 550 ShowIcon 431, 435 ShowInTaskbar 435 Shown 447 Size 436 SizeChanged 446 SizeGripStyle 436 SuspendLayout() 467 Text 436 Visible 437–438, 447 VisibleChanged 447 wichtige Eigenschaften 430 wichtige Ereignisse 441 wichtige Methoden 437 WindowState 437 formatierte Ausgabe 63 Formatierungszeichen 65 FormBorderStyle 432 Aufzählungsmember 432 FixedDialog 456 FormClosedEventArgs CloseReason 442 FormClosedEventHandler 442 FormClosingEventArgs 443 CloseReason 442 FormClosingEventHandler 442 Formulare 427 FormWindowState 437 G ganzzahlige Werte 50 Garbage Collection 21, 73 Garbage Collector 74, 88, 163, 205, 236 GDI+ 427, 505 Bildlisten 542 Fehler in der Ausgabe 534 Füllen von Flächen 531 Grafische Pfade 535 Icons und Bilder 537 Koordinaten & Punkte 515 Methoden zum Zeichnen 516 Punkte ausgeben 534 Rechtecke 515 Regionen 537 Stifte & Pinsel 510 gebrochene Werte 51 GenerateMember 463 Generics 213 Collections in .NET ab v2.0 331 588 Index generische Klassen Vererbung 216 generische Methoden 217 get 198 Gleitkommadatentypen 52 Globale Attribute 349 goto 148 Sprungmarken 148 grafische Benutzeroberfläche 425 Graphics 505 DrawArc() 518, 528 DrawBezier() 519 DrawBeziers() 519 DrawClosedCurve() 521 DrawCurve() 521 DrawEllipse() 523 DrawIcon() 524 DrawIconUnstretched() 524 DrawImage() 525 DrawImageUnscaled() 525 DrawImageUnscaledAndClipped() 525 DrawLine() 526 DrawLines() 526 DrawPath() 527, 536 DrawPie() 528 DrawPolygon() 529 DrawRectangle() 530 DrawRectangles() 530 DrawString() 530 Erzeugen 537 FillClosedCurve() 532 FillPath() 532, 536 FillPolygon() 532 FillRegion() 534 Garbage Collection 506 GraphicsPath 514, 527, 535 CloseFigure() 536 Hinzufügen geometrischer Formen 535 GroupBox 484, 489 Gültigkeitsbereich 67 H Haltepunkt 571 Handler 301 Hashtable 288, 337 Hashwert 288 Schlüssel 337 Hashwert 288 HatchBrush 511–512 HatchStyle 513 Hello, World! 29 HelpEventArgs 444 HelpEventHandler 444 HSB-Farbmodell 509 I IAsyncResult 415, 418 AsyncState 420 ICodeCompiler 563 Icon 538 ExtractAssociatedIcon() 539 Icons 538 IDisposable 236 Dispose() 236 IEnumerable 321 Member 322 IEnumerator 321 Current 322 Member 322 MoveNext() 322 Reset() 322 if 139 Hintereinanderschaltung 142 Schachtelung (Kaskadierung) 141 Image 539 FromFile() 540 Save() 542 ImageList 542 Indexer 247, 315 Indizierer 315, 319 Deklaration 315 mit mehreren Parametern 320 this 319 Verwendung 318 Inline-Deklaration 309 Instanzdaten 159 int 50, 364 interface 218 Intermediate Language 20, 50 internal 157, 182–183 internal protected 182, 184 InvalidOperationException 323 is 121, 180 J Java Java 21 Java Byte-Code 21 Java-Applet 21 K KeyEventHandler 477 KeyPressedEventHandler 477 Klassen 155–156 abstrakte Klassen 194 Aufruf des Basisklassenkonstruktors 184 Begriffsdefinition 156 Deklaration 39, 157 Finalize() und Destruktoren 206 generisch 213 Implementierung einer Schnittstelle 220 Instantiierung 158 Instanz 158 Instanzdaten 159 Klassenmember 224 konkrete 216 Konstruktor 172 kurze Einführung 38 mehrere Konstruktoren 175 Memberdaten 159 partial 202 private Konstruktoren 227 Properties 196 Referenzen auf Basisklassen 180 Schnittstelle 218 sealed 187 Sichtbarkeitsspezifizierer 157, 182 Standardkonstruktor 173 statische 226 statische Konstruktoren 176 Überladen von Methoden 188 Überschreiben von Methoden 191 Umbenennung 96 Vererbung 177 virtuelle Methoden 191 Klassenbibliothek 556 Klassendiagramm 157 Klassenfabrik 184 Klassenmember 224 Daten 225 Eigenschaften 226 Methoden 225 Kommentare 35 Blockkommentar 36 Dokumentationskommentar 371 Zeilenkommentar 37, 371 Konkatenation 104 Konstante 41, 57 Konstruktor private 184 Index 589 Konvertierungshierarchien 119 kritischer Fehler 267 L Label 492 AutoEllipsis 493 AutoSize 493 Ländereinstellungen 64 LIFO 335 LinearGradientBrush 512 LinkLabel 492 LinkArea 493 LinkBehavior 493 LinkClicked 494 LinkColor 493 LinkVisited 493 ListBox 495 Items 495 MultiColumn 495 SelectedIndex 495 SelectedIndices 495 SelectedItem 495 SelectedItems 495 SelectionMode 495 Sorted 495 ListView 496, 542 Columns 496 Groups 496 Items 496 View 496 Literal 41, 57 boolesches 59 ganzzahlig 57 Qualifizierer 58 reales (Gleitkomma) 58 Stringliteral 60 Zeichenliteral 59 lock 402, 412 long 50, 364 M Main() 40, 166, 225, 556 Parameter 74 Makros 560 Manifest 43 MaskedTextBox 490 Mask 491 Validate() 491 Masken 122 Match 263 Member 263 Mehrfachvererbung 218 590 Index Member öffentlich 183 Memberdaten 159 Initialisierungsreihenfolge 174 MemberInfo 359 MemberTypes Werte 359 Memberzugriffsoperator 107 Menüs 497 Kontextmenüs 500 MenuStrip 498 GripStyle 498 MessageBox 446, 458, 485, 561, 565 Icon 459 MessageBoxIcon 459 Metadaten 353 Metafile 539 Metazeichen 260 Quantifizierer 260 Methode 40, 182 abstrakte 195 anonyme 309 Argumente 166 Aufruf 165 Aufruf (Operator) 107 Dispatching, virtuell 209, 232–233 generische 217 mit Parameter 166 mit Rückgabewert 170 Name 164 Neuimplementierung 228, 230 Out-Parameter 204 Parameterliste 164–165 Polymorphie 192 Ref-Parameter 203 Rückgabetyp 163 sealed vor virtuelle Methoden 233 statische 225 Überladen 188 Überladung 189 Verweis auf eine Methode 295 virtuelle 191–192 Zugriff auf statische Member 226 Methodenrumpf 40 MethodInfo 361, 566 GetCustomAttributes() 363 GetParameters() 361 Invoke() 566 Name 361 ReturnType 361 Microsoft.CSharp 563 Module 356 GetTypes() 358 Monitor 410 Enter() 410 Exit() 410 Hinweise zur Verwendung 412 in C# lock 412 MouseEventArgs 477 MouseEventHandler 477–478 mscorlib 43 Multicast-Delegates 297 Multitasking 391 Multithreading 392 N Nachrichten 426, 429 Nachrichtenschleife 429 Namenskonventionen für Variablen 53 Namensraum 41, 94 Definition 94 Schachtelung (Kaskadierung) 95 namespace 94 Nassi-Shneiderman 127 do-while 136 for 131 foreach 138 if 140 switch-case 146 while 134 NDoc 370 new 73, 88, 109, 158, 289, 295 new (Neuimplementierung von Methoden) 230, 234 Notifizierung 292 null 180 O Object 354, 359 Equals() 287 GetHashCode() 288 GetType() 354 Member 187 ToString() 257 object 89, 187, 354, 364 Objekte 155–156, 158 Erzeugung 158 Gleichheit 188 Konstruktor 172 Lebenszeit 161 mehrere Konstruktoren 175 Objektmethoden 163 Objektmethoden mit Parametern 166 Objektmethoden mit Rückgabewert 170 Referenztypen 161 Selbstreferenz 169 Standardkonstruktor 173 statische Konstruktoren 176 Obsolete 342–343, 363 Parameter 343 Online-Hilfe 579 Operatoren 101 additive und multiplikative 103 arithmetische 103 bedingte 123 Bedingung 124 logische 122 primäre 106 relationale 120 Shift 119 unäre 116 Operatorüberladung binäre Operatoren 285 Einschränkung 289 unäre Operatoren 283 Vergleichsoperatoren 287 zusammengesetzte Zuweisungsoperatoren 289 out 169 OutOfMemoryException 540 override 192, 196 P PaintEventArgs 506 Eigenschaften 506 Panel 479 Parameterliste 164–165 Parameterübergabemechanismen 167 call-by-reference 169, 203 call-by-value 167 Parser 368 partial 202 PathGradientBrush 512 SurroundColors 515 Pen 506, 510 Brush 510 Color 510 DashStyle 510 Width 510 PictureBox 494 Image 494 SizeMode 494 PictureSizeMode 494 Index 591 Pinsel 512 Point 450, 515 Empty 451 PointF 515 Polymorphie 192 Präprozessor 367, 381, 570 Definieren von Symbolen 382 Präprozessordirektiven 367, 381 Ein- und Ausblenden von Code 381 Präprozessorsymbole 344 PreviewPageInfo 552 PreviewPrintController GetPreviewPageInfo() 552 primitive Datentypen 49 PrintController 548 PrintControllerWithStatusDialog 548 PrintDialog 543 AllowCurrentPage 547 AllowPrintToFile 547 AllowSelection 547 AllowSomePages 547 Eigenschaften 546 PrintToFile 547 ShowHelp 547 ShowNetwork 547 PrintDocument 543 BeginPrint 546 EndPrint 546 Ereignisse 545 Print() 543 PrintPage 543, 545 QueryPageSettings 546 PrintEventArgs 546 PrintEventHandler 546 PrintPageEventArgs 544 PrintPreviewControl 550 Eigenschaften 550 PrintPreviewController 548 PrintPreviewDialog 548 ShowDialog() 550 private 82, 182–183 ProgressBar 502 Maximum 502 Minimum 502 Value 502 Projektmappe 32 Projektmappen-Explorer 32 Properties 196 Deklaration 197 Getter 198, 219 Nutzung 201 Setter 198, 219 592 Index PropertyGrid 463, 500 SelectedObject 500 protected 182–183 Prozesse 389 Scheduling 390 public 82, 157, 182 Q Qualifizierer 58 QueryPageSettingsEventArgs 546 QueryPageSettingsEventHandler 546 Queue 333 Member 334 Quickstart Tutorials 580 R RadioButton 489 Checked 489 ReadLine() 76 Rectangle 432, 506, 515 Bottom 516 Contains() 516 Height 516 Inflate() 516 Intersect() 516 IntersectsWith() 516 Left 516 Location 516 Offset() 516 Right 516 Size 516 Top 516 Union() 516 Width 516 X 516 Y 516 RectangleF 516 ref 169 Reference 559 Referenzen 86 Reflection API 111, 341, 353, 562, 565 Regex 259 Match() 263 Optionen 262 RegexOption 262 Member 262 Region 534, 537 reguläre Ausdrücke 259 Assertionen 261 Aufbau 260 Metazeichen 260 Quantifizierer 260 Suchen und Ersetzen 263 Zeichenklassen 261 Ressourcen-Editor 487 return 171 RGB-Farbmodell 507 Alpha-Kanal 508 RichTextBox 491 Lines 491 LinkClicked 492 Select() 491 Selected 491 Text 491 Rückgabetyp 163 S sbyte 50 Schaltfläche 448, 485 Schleifen 128 Abbruch 138 do-while 136 for 129 foreach 138 Fortsetzung mit nächstem Durchlauf 138 while 133 Schlüsselwörter Übersicht 53 Schnittstelle 218, 291 Deklaration 218 Properties 219 Typparameter 222 sealed 187, 233 Seiteneffekt 167 SelectionMode 495 Semantik 38 Serialisierung 341 set 198–199 short 50, 364 Sichtbarkeitsspezifizierer 157, 159–160, 163, 184 Size 431, 434, 436, 516 SizeGripStyle 436 sizeof 111 Smarttag 239 SolidBrush 512 Spaghetti-Code 148 Spezialisierung 179 SplitContainer 482 Sprungmarken 148 Stack 88, 335 Member 335 StandardPrintController 548 static 76, 224–225, 298 Steuerelemente Bäume 497 Beschriftungen 492 Bilder 494 Checkboxen 485, 488 Container 478 Fortschrittsanzeige 502 Listen & Tabellen 494 Menüs, Symbolleisten & Kontextmenüs 497 PropertyGrid 500 Radiobuttons 485, 489 Schaltflächen 485 Schiebebalken 502 Textfelder 490 Zeitgeber 501 Stifte 510 string 53, 162, 245, 364, 490 CompareTo() 247, 289 EndsWith() 250 Format() 255 IndexOf() 251 Insert() 254 LastIndexOf() 251 Length 246 Remove() 253 Replace() 253 Split() 251 StartsWith() 250 Substring() 254 ToLower() 253 ToUpper() 253 Trim() 252 TrimEnd() 252 TrimStart() 252 weitere Methoden 255 StringBuilder 255 Konstruktoren 256 Properties und Methoden 256 Strings 41, 245 [] 246 Interning 249 Iteration über eine Zeichenkette 246 Konkatenation 104 Länge 246 Vergleich zweier Zeichenketten 247 struct 81 Struktur 81 Deklaration 81 Memberzugriff 83 Verschachtelung 84 Index 593 Strukturen Konstruktor 172, 176 statische Konstruktoren 176 switch 142, 144 default-Alternative 144 mehrere Alternativen für einen Block 146 Synchronisation 408 Syntax 38 verwendete Schreibweise 38 System.CodeDom 563 System.CodeDom.Compiler 563 System.ComponentModel 442, 501 System.Console 45 System.Diagnostics 569 System.dll 564 System.Drawing 427, 450, 508, 512 System.Drawing.dll 564 System.Drawing.Drawing2D 510, 512, 532 System.Drawing.Printing 543 System.Object 187 System.Reflection 563 System.Reflection.Emit 568 System.Threading 393 System.Type 364 System.Windows.Forms 427, 471, 505 System.Windows.Forms.dll 564 SystemBrushes 515 SystemColors 509 SystemIcons 538 SystemPens 512 T TabControl 484 TableLayoutPanel 480 Tags 369 Tastatureingaben 76 TextBox 490 Lines 490 Multiline 490 PasswordChar 490 Text 490 UseSystemPasswordChar 490 Textfelder MaskedTextBox 490 RichTextBox 491 TextBox 490 TextureBrush 512 ToBitmap() 512 this 169, 226, 316, 319, 411 594 Index Thread 389, 392 Abort() 403 aktueller 64 Beendigung von Threads 393 Erzeugung 392 Interrupt() 398 IsAlive 405 IsBackground 394 Join() 404 Ländereinstellung 64 Main-Thread 391 Member 407 Name 407 Priority 405 ResetAbort() 403 Resume() 400 Sleep() 396 Sleep(0) 398 Start() 393 Suspend() 400 suspendieren 400 Thread-Prozedur 392 Vorder- und HintergrundThreads 391, 394 Zustände 395 ThreadAbortException 403 Threading 389 ThreadInterruptedException 399 Thread-Pool 414 ThreadPriority 406 Thread-Prioritäten 406 ThreadStart 393 ThreadState 404 AbortRequested 403 Background 395 Running 393, 395 Stopped 395 Suspended 400 SuspendRequest 400 Unstarted 393, 395 WaitSleepJoin 396 ThreadStateException 393 throw 271 Timeout 398 Infinite 398 Timer 502 Enabled 502 Interval 502 Start() 502 Stop() 502 Tick 502 ToolBar 542 Toolbox 462, 483 ToolStrip 499 ToolStripContainer 497, 499 Top-Down 362 ToString() 257, 363 Trace-Ausgaben 569 Tracing-Tabellen 166 TrackBar 502 Maximum 502 Minimum 502 Scroll 503 Value 503 TreeView 497, 542 CheckBoxes 497 Nodes 497 SelectedNode 497 true 52, 283 Type 354, 357 BaseType 359 FullName 358 typeof 111 Typparameter 213, 222–223 Delegates 309 Einschränkungen 223 Vererbung 216 where 223 Typqualifizierer 59, 75 Typsicherheit 216 Typumwandlung 118, 180, 300 U uint 50 ulong 50 UML 157 Assoziationen 238 Kardinalität 238 Klassendiagramm 178 Schnittstellen 237 Vererbung 177 Unboxing 85, 89, 119, 213, 288 unchecked 113 Unified Modelling Language 157 unsafe 111 ushort 50 using 46, 96, 342 using System.Runtime.Remoting. Messaging 418 V value 199 Variablen 48 Deklaration 55 Einlesen von der Tastatur 76 Initialisierung 56, 61 Wertzuweisung 56, 61 Variableninitialisierung 56, 61 Vererbung 177 Ableitungshierarchie 178 Basisklasse 178 Kind/Child 178 mehrfache 218 Referenzen auf Basisklassen 180 Syntax einer Ableitung 179 Typparameter 216 Vater/Parent 178 Zugriff auf Methoden der Basisklasse 233 Verweis 559 Verweistypen 85 virtual 192 virtuelle Methoden 182 W Wahrheitswerte 52 Währung Ausgabe 64 WaitHandle WaitOne() 417 Wertetypen 85 Größe 111 Wertzuweisung 56, 61 Wertzuweisung (Operator) 105 where 223 while 133, 136 Wildcard 259 Windows Forms 425, 427, 505, 560 Baukastensystem 455 Bibliothek 427 Container-Controls 456 Designer 471 Dialoge 456 Drucken 542 Fenster 425 Formulare 427 Grundgerüst für Programme 428 Koordinatensystem 450 Menüs 497 Namensraum 427 Symbolleisten 499 Visual C# 2005 Express 460 Zeitgeber 501 Windows-Anwendungen Grundgerüst 428 Index 595 596 WinForms 560 WriteLine() 41, 62, 225 XML-Dokumentation 367 XPath 375 X XML 367 Dokumentaufbau 368 Root-Element, Wurzel 369 Z Zeichenketten 41, 53, 245 Zeitscheibe 390 Index