E-Book, Deutsch, 2207 Seiten
Doberenz / Gewinnus Visual C# 2012 - Grundlagen und Profiwissen
1. Auflage 2012
ISBN: 978-3-446-43521-6
Verlag: Hanser, Carl
Format: PDF
Kopierschutz: Adobe DRM (»Systemvoraussetzungen)
E-Book, Deutsch, 2207 Seiten
ISBN: 978-3-446-43521-6
Verlag: Hanser, Carl
Format: PDF
Kopierschutz: Adobe DRM (»Systemvoraussetzungen)
- Für Einsteiger, Fortgeschrittene und Profis
- Mit Informationen und Lösungen, nach denen Sie anderswo vergeblich suchen
- Alle Beispiele aus dem Buch unter: www.doko-buch.de
Sprachumfang und Einsatzgebiete von Visual C# decken mit jeder neuen Version ein immer breiteres, kaum mehr überschaubares Spektrum ab. Dieses Übungs- und Nachschlagewerk führt Sie mit sicherer Hand quer durch den Dschungel der .NET-Programmierung auf Basis von Visual C# 2012.
Schwerpunkt dieser Neuauflage ist die Entwicklung von Apps für Windows 8. Neben einer fundierten Einführung erleichtern viele Praxisbeispiele den Einstieg in dieses komplexe Thema.
Die insgesamt 43 Kapitel des Buches gruppieren sich in acht Themenkomplexe:
Teil I: Grundlagen der Programmierung mit Visual C# 2012
Teil II: Technologien der Programmentwicklung
Teil III: WPF-Anwendungen
Teil IV: Windows Store Apps
Teil V: Weitere Technologien
Teil VI: Windows Forms
Teil VII: ASP.NET
Teil VIII: Silverlight
Die Kapitel innerhalb eines Teils bilden eine logische Aufeinanderfolge, können aber auch quergelesen werden. Im Praxisteil eines jeden Kapitels werden anhand realer Problemstellungen die behandelten Programmiertechniken im Zusammenhang demonstriert.
AUS DEM INHALT:
C#-Sprachfeatures, OOP, LINQ // Dateien & Dateisystem // Asynchrone Programmierung & Task Parallel Library // WPF & XAML // Windows Store Apps & WinRT // XML, ADO.NET, DataSet, MS Event Pattern // Konsolen-Anwendungen // GUI-Programmierung mit Windows Forms // Web-Applikationen mit ASP.NET & Silverlight // Verteilen von Anwendungen
Autoren/Hrsg.
Weitere Infos & Material
1;Visual C# 2012 - Grundlagen und Profiwissen;4
1.1;Vorwort;52
1.1.1;Zum Buchinhalt;52
1.1.2;Zu den Neuigkeiten in Visual Studio 2012;53
1.1.3;Weitere Bücher von uns;54
1.1.4;Zu den Codebeispielen;54
1.1.5;Nobody is perfect;55
1.2;1 Einstieg in Visual Studio 2012;58
1.2.1;1.1 Die Installation von Visual Studio 2012;58
1.2.1.1;1.1.1 Überblick über die Produktpalette;58
1.2.1.1.1;Visual Studio 2012 Express;58
1.2.1.1.2;Visual Studio 2012 Professional;59
1.2.1.1.3;Visual Studio 2012 Premium;60
1.2.1.1.4;Visual Studio 2012 Ultimate;60
1.2.1.2;1.1.2 Anforderungen an Hard- und Software;60
1.2.2;1.2 Unser allererstes C#-Programm;61
1.2.2.1;1.2.1 Vorbereitungen;61
1.2.2.1.1;Compilerpfad eintragen;61
1.2.2.2;1.2.2 Quellcode schreiben;63
1.2.2.3;1.2.3 Programm kompilieren und testen;64
1.2.2.4;1.2.4 Einige Erläuterungen zum Quellcode;64
1.2.2.4.1;Befehlszeilen und Gültigkeitsbereiche;64
1.2.2.4.2;using-Anweisung;65
1.2.2.4.3;class-Anweisung;65
1.2.2.4.4;WriteLine- und ReadLine-Methoden;65
1.2.2.4.5;Assemblierung;65
1.2.2.5;1.2.5 Konsolenanwendungen sind langweilig;65
1.2.3;1.3 Die Windows-Philosophie;66
1.2.3.1;1.3.1 Mensch-Rechner-Dialog;66
1.2.3.2;1.3.2 Objekt- und ereignisorientierte Programmierung;66
1.2.3.2.1;Objekte (Objects);67
1.2.3.2.2;Eigenschaften (Properties);67
1.2.3.2.3;Methoden (Methods);67
1.2.3.2.4;Ereignisse (Events);68
1.2.3.3;1.3.3 Programmieren mit Visual Studio 2012;68
1.2.4;1.4 Die Entwicklungsumgebung Visual Studio 2012;69
1.2.4.1;1.4.1 Neues Projekt;69
1.2.4.2;1.4.2 Die wichtigsten Fenster;70
1.2.4.2.1;Der Projektmappen-Explorer;71
1.2.4.2.2;Der Designer;72
1.2.4.2.3;Der Werkzeugkasten;72
1.2.4.2.4;Das Eigenschaften-Fenster;72
1.2.4.2.5;Das Codefenster;73
1.2.5;1.5 Microsofts .NET-Technologie;73
1.2.5.1;1.5.1 Zur Geschichte von .NET;73
1.2.5.1.1;Warum eine extra Programmiersprache?;74
1.2.5.1.2;Wie funktioniert eine .NET-Sprache?;75
1.2.5.2;1.5.2 .NET-Features und Begriffe;76
1.2.5.2.1;.NET-Framework;76
1.2.5.2.2;Die Common Language Specification (CLS);77
1.2.5.2.3;Das Common Type System (CTS);77
1.2.5.2.4;Die Common Language Runtime (CLR);78
1.2.5.2.5;Namespaces ersetzen Registry;79
1.2.5.2.6;Assemblierungen;80
1.2.5.2.7;Zugriff auf COM-Komponenten;80
1.2.5.2.8;Metadaten und Reflexion;80
1.2.5.2.9;Attribute;81
1.2.5.2.10;Serialisierung;82
1.2.5.2.11;Multithreading;82
1.2.5.2.12;Objektorientierte Programmierung;83
1.2.6;1.6 Wichtige Neuigkeiten in Visual Studio 2012;83
1.2.6.1;1.6.1 Die neue Visual Studio 2012 Entwicklungsumgebung;83
1.2.6.1.1;Neues Outfit der Toolbar;83
1.2.6.1.2;Veränderter Projektmappen-Explorer;84
1.2.6.1.3;Registerkartenverwaltung der geöffneten Dateien;85
1.2.6.1.4;Suchen überall;85
1.2.6.1.5;Neuer Verweis Manager-Dialog;85
1.2.6.1.6;Projekt-Kompatibilität;85
1.2.6.1.7;Neue Projekttypen;86
1.2.6.1.8;Multi-Monitor -Unterstützung;86
1.2.6.1.9;Zusätzliche Tools und Features;86
1.2.6.2;1.6.2 Neuheiten im .NET Framework 4.5;86
1.2.6.2.1;WinRT-Anwendungen;86
1.2.6.2.2;Portable Klassenbibliotheken;86
1.2.6.2.3;Parallele Computervorgänge;87
1.2.6.2.4;Internet;87
1.2.6.2.5;WPF;87
1.2.6.2.6;WCF;87
1.2.6.3;1.6.3 C# 5.0 – Sprache und Compiler;88
1.2.6.3.1;Asynchrone Methoden;88
1.2.6.3.2;Caller Information;88
1.2.7;1.7 Praxisbeispiele;88
1.2.7.1;1.7.1 Windows Forms-Anwendung für Einsteiger;88
1.2.7.1.1;1. Etappe: Visueller Entwurf der Bedienoberfläche;89
1.2.7.1.2;2. Etappe: Zuweisen der Objekteigenschaften;90
1.2.7.1.3;3. Etappe: Verknüpfen der Objekte mit Ereignissen;90
1.2.7.1.4;4. Etappe: Programm kompilieren und testen;91
1.2.7.1.5;Bemerkungen;92
1.2.7.2;1.7.2 Windows-Anwendung für fortgeschrittene Einsteiger;93
1.2.7.2.1;1. Etappe: Visueller Entwurf der Bedienoberfläche;93
1.2.7.2.2;2. Etappe: Zuweisen der Objekteigenschaften;94
1.2.7.2.3;3. Etappe: Verknüpfen der Objekte mit Ereignissen;95
1.2.7.2.4;4. Etappe: Programm kompilieren und testen;98
1.2.7.2.5;IntelliSense – die hilfreiche Fee;99
1.2.7.2.6;Hilfe ein Fehler!;99
1.3;2 Grundlagen der Sprache C#;102
1.3.1;2.1 Grundbegriffe;102
1.3.1.1;2.1.1 Anweisungen;102
1.3.1.2;2.1.2 Bezeichner;103
1.3.1.3;2.1.3 Schlüsselwörter;104
1.3.1.4;2.1.4 Kommentare;104
1.3.1.4.1;Einzeilige Kommentare;104
1.3.1.4.2;Mehrzeilige Kommentare;105
1.3.2;2.2 Datentypen, Variablen und Konstanten;105
1.3.2.1;2.2.1 Fundamentale Typen;105
1.3.2.2;2.2.2 Wertetypen versus Verweistypen;106
1.3.2.2.1;Wertetypen;107
1.3.2.2.2;Verweistypen;107
1.3.2.3;2.2.3 Benennung von Variablen;107
1.3.2.4;2.2.4 Deklaration von Variablen;107
1.3.2.4.1;Initialisierte Variablen;108
1.3.2.4.2;Typinferenz;108
1.3.2.5;2.2.5 Typsuffixe;109
1.3.2.6;2.2.6 Zeichen und Zeichenketten;110
1.3.2.6.1;char;110
1.3.2.6.2;string;110
1.3.2.7;2.2.7 object-Datentyp;112
1.3.2.8;2.2.8 Konstanten deklarieren;112
1.3.2.9;2.2.9 Nullable Types;113
1.3.2.9.1;Initialisieren von Wertetypen mit null;113
1.3.2.9.2;Zuweisungen mit dem ??-Operator;114
1.3.2.10;2.2.10 Typinferenz;114
1.3.2.11;2.2.11 Gültigkeitsbereiche und Sichtbarkeit;115
1.3.3;2.3 Konvertieren von Datentypen;115
1.3.3.1;2.3.1 Implizite und explizite Konvertierung;115
1.3.3.1.1;as-Konverierungsoperator;117
1.3.3.2;2.3.2 Welcher Datentyp passt zu welchem?;117
1.3.3.3;2.3.3 Konvertieren von string;118
1.3.3.3.1;ToString-Methode;118
1.3.3.3.2;String in Zahl verwandeln;119
1.3.3.3.3;EVA-Prinzip;119
1.3.3.4;2.3.4 Die Convert-Klasse;120
1.3.3.5;2.3.5 Die Parse-Methode;120
1.3.3.6;2.3.6 Boxing und Unboxing;121
1.3.3.6.1;Boxing;121
1.3.3.6.2;Unboxing;121
1.3.4;2.4 Operatoren;122
1.3.4.1;2.4.1 Arithmetische Operatoren;123
1.3.4.1.1;Standard-Operatoren;123
1.3.4.1.2;Inkrement- und Dekrement-Operatoren;123
1.3.4.2;2.4.2 Zuweisungsoperatoren;124
1.3.4.3;2.4.3 Logische Operatoren;125
1.3.4.3.1;Vergleichsoperatoren;125
1.3.4.3.2;Boolesche Operatoren;126
1.3.4.3.3;Kurzschlussauswertung;127
1.3.4.3.4;Bitweise Operationen;127
1.3.4.4;2.4.4 Rangfolge der Operatoren;128
1.3.5;2.5 Kontrollstrukturen;129
1.3.5.1;2.5.1 Verzweigungsbefehle;129
1.3.5.1.1;Klassische Entscheidungsanweisungen;129
1.3.5.1.2;Ergänzung;131
1.3.5.1.3;Sprungbefehle;132
1.3.5.2;2.5.2 Schleifenanweisungen;132
1.3.5.2.1;for-Schleifen;133
1.3.5.2.2;while-Schleife;133
1.3.5.2.3;do-Schleife;133
1.3.5.2.4;Vorzeitiges Verlassen einer Schleife;134
1.3.6;2.6 Benutzerdefinierte Datentypen;135
1.3.6.1;2.6.1 Enumerationen;135
1.3.6.1.1;Deklaration;135
1.3.6.1.2;Zugriff;135
1.3.6.2;2.6.2 Strukturen;136
1.3.6.2.1;Deklaration;136
1.3.6.2.2;Datenzugriff;137
1.3.6.2.3;Struktur versus Klasse;138
1.3.7;2.7 Nutzerdefinierte Methoden;138
1.3.7.1;2.7.1 Methoden mit Rückgabewert;139
1.3.7.1.1;Deklaration;139
1.3.7.1.2;Aufruf;139
1.3.7.2;2.7.2 Methoden ohne Rückgabewert;140
1.3.7.2.1;Deklaration;140
1.3.7.2.2;Aufruf;140
1.3.7.3;2.7.3 Parameterübergabe mit ref;141
1.3.7.3.1;Noch einmal – aber bitte langsam;142
1.3.7.4;2.7.4 Parameterübergabe mit out;142
1.3.7.5;2.7.5 Methodenüberladung;143
1.3.7.5.1;Bemerkungen;143
1.3.7.6;2.7.6 Optionale Parameter;144
1.3.7.7;2.7.7 Benannte Parameter;145
1.3.8;2.8 Praxisbeispiele;146
1.3.8.1;2.8.1 Vom PAP zur Konsolenanwendung;146
1.3.8.1.1;Programmablaufplan;146
1.3.8.1.2;Programmierung;146
1.3.8.1.3;Kompilieren;147
1.3.8.1.4;Test;147
1.3.8.2;2.8.2 Ein Konsolen- in ein Windows-Programm verwandeln;148
1.3.8.2.1;Oberfläche;148
1.3.8.2.2;Quelltext;149
1.3.8.2.3;Test;150
1.3.8.2.4;Bemerkungen;150
1.3.8.3;2.8.3 Schleifenanweisungen verstehen;150
1.3.8.3.1;Oberfläche;150
1.3.8.3.2;Quellcode;150
1.3.8.3.3;Test;152
1.3.8.4;2.8.4 Benutzerdefinierte Methoden überladen;152
1.3.8.4.1;Oberfläche;153
1.3.8.4.2;Quellcode;153
1.3.8.4.3;Test;155
1.4;3 OOP-Konzepte;156
1.4.1;3.1 Kleine Einführung in die OOP;156
1.4.1.1;3.1.1 Historische Entwicklung;156
1.4.1.1.1;Strukturierte Programmierung;157
1.4.1.1.2;Objektorientiertes Programmieren;157
1.4.1.2;3.1.2 Grundbegriffe der OOP;158
1.4.1.2.1;Objekt;158
1.4.1.2.2;Klasse;159
1.4.1.2.3;Instanz;159
1.4.1.2.4;Kapselung;159
1.4.1.2.5;Wiederverwendbarkeit;159
1.4.1.2.6;Vererbung;159
1.4.1.2.7;Polymorphie;160
1.4.1.3;3.1.3 Sichtbarkeit von Klassen und ihren Mitgliedern;160
1.4.1.3.1;Klassen;160
1.4.1.3.2;Klassenmitglieder;161
1.4.1.4;3.1.4 Allgemeiner Aufbau einer Klasse;161
1.4.1.5;3.1.5 Das Erzeugen eines Objekts;162
1.4.1.5.1;Referenzieren und Instanziieren;163
1.4.1.5.2;Klassische Initialisierung;164
1.4.1.5.3;Objekt-Initialisierer;164
1.4.1.5.4;Arbeiten mit dem Objekt;165
1.4.1.5.5;Zerstören des Objekts;165
1.4.1.6;3.1.6 Einführungsbeispiel;165
1.4.1.6.1;Vorbereitungen;165
1.4.1.6.2;Klasse definieren;166
1.4.1.6.3;Bemerkungen;167
1.4.1.6.4;Objekt erzeugen und initialisieren;168
1.4.1.6.5;Objekt verwenden;168
1.4.1.6.6;Unterstützung durch die IntelliSense;168
1.4.1.6.7;Objekt testen;169
1.4.1.6.8;Bemerkungen;170
1.4.2;3.2 Eigenschaften;170
1.4.2.1;3.2.1 Eigenschaften mit Zugriffsmethoden kapseln;170
1.4.2.1.1;Deklarieren von Eigenschaften;171
1.4.2.1.2;Zugriff;172
1.4.2.1.3;Bemerkung;172
1.4.2.2;3.2.2 Berechnete Eigenschaften;172
1.4.2.3;3.2.3 Lese-/Schreibschutz;174
1.4.2.4;3.2.4 Property-Accessoren;175
1.4.2.5;3.2.5 Statische Felder/Eigenschaften;175
1.4.2.5.1;Konstante Felder;177
1.4.2.6;3.2.6 Einfache Eigenschaften automatisch implementieren;178
1.4.3;3.3 Methoden;179
1.4.3.1;3.3.1 Öffentliche und private Methoden;179
1.4.3.2;3.3.2 Überladene Methoden;180
1.4.3.3;3.3.3 Statische Methoden;180
1.4.3.3.1;Bemerkungen;182
1.4.4;3.4 Ereignisse;182
1.4.4.1;3.4.1 Ereignis hinzufügen;183
1.4.4.1.1;Ereignis deklarieren;184
1.4.4.1.2;Ereignis instanziieren;184
1.4.4.1.3;Ereignis auslösen;185
1.4.4.2;3.4.2 Ereignis verwenden;186
1.4.4.2.1;Ereignisbehandlung schreiben;187
1.4.4.2.2;Ereignisbehandlung anmelden;188
1.4.4.2.3;Bemerkungen;188
1.4.5;3.5 Arbeiten mit Konstruktor und Destruktor;189
1.4.5.1;3.5.1 Konstruktor und Objektinitialisierer;189
1.4.5.1.1;Deklaration;190
1.4.5.1.2;Aufruf;190
1.4.5.1.3;Objektinitialisierer;191
1.4.5.1.4;Statischer Konstruktor;191
1.4.5.2;3.5.2 Destruktor und Garbage Collector;192
1.4.5.3;3.5.3 Mit using den Lebenszyklus des Objekts kapseln;195
1.4.5.4;3.5.4 Verzögerte Initialisierung;195
1.4.6;3.6 Vererbung und Polymorphie;196
1.4.6.1;3.6.1 Klassendiagramm;196
1.4.6.2;3.6.2 Method-Overriding;198
1.4.6.3;3.6.3 Klassen implementieren;198
1.4.6.3.1;Basisklasse CKunde;198
1.4.6.3.2;Subklasse CPrivatKunde;199
1.4.6.3.3;Subklasse CFirmenKunde;200
1.4.6.3.4;Testoberfläche;201
1.4.6.4;3.6.4 Implementieren der Objekte;201
1.4.6.4.1;Praxistest;202
1.4.6.5;3.6.5 Ausblenden von Mitgliedern durch Vererbung;203
1.4.6.6;3.6.6 Allgemeine Hinweise und Regeln zur Vererbung;205
1.4.6.7;3.6.7 Polymorphes Verhalten;206
1.4.6.7.1;Praxistest;208
1.4.6.8;3.6.8 Die Rolle von System.Object;209
1.4.7;3.7 Spezielle Klassen;210
1.4.7.1;3.7.1 Abstrakte Klassen;210
1.4.7.1.1;Abstrakte Methoden;210
1.4.7.2;3.7.2 Versiegelte Klassen;211
1.4.7.3;3.7.3 Partielle Klassen;212
1.4.7.4;3.7.4 Statische Klassen;213
1.4.8;3.8 Schnittstellen (Interfaces);214
1.4.8.1;3.8.1 Definition einer Schnittstelle;214
1.4.8.2;3.8.2 Implementieren einer Schnittstelle;215
1.4.8.3;3.8.3 Abfragen, ob Schnittstelle vorhanden ist;216
1.4.8.4;3.8.4 Mehrere Schnittstellen implementieren;216
1.4.8.5;3.8.5 Schnittstellenprogrammierung ist ein weites Feld;216
1.4.9;3.9 Praxisbeispiele;217
1.4.9.1;3.9.1 Eigenschaften sinnvoll kapseln;217
1.4.9.1.1;Oberfläche;217
1.4.9.1.2;Quellcode (CKreis);218
1.4.9.1.3;Quellcode (Form1);219
1.4.9.1.4;Test;219
1.4.9.1.5;Bemerkungen;220
1.4.9.2;3.9.2 Eine statische Klasse anwenden;220
1.4.9.2.1;Oberfläche;220
1.4.9.2.2;Quellcode;220
1.4.9.2.3;Test;221
1.4.9.3;3.9.3 Vom fetten zum schlanken Client;222
1.4.9.3.1;Oberfläche;222
1.4.9.3.2;Quellcode (Fat Client);223
1.4.9.3.3;Test;226
1.4.9.3.4;Bemerkungen;226
1.4.9.3.5;Abmagerungskur für den fetten Client;227
1.4.9.3.6;Quellcode für CRegister;228
1.4.9.3.7;Quellcode für CRechenmodul;229
1.4.9.3.8;Quellcode für Form1;232
1.4.9.3.9;Test;233
1.4.9.3.10;Bemerkungen;233
1.4.9.4;3.9.4 Schnittstellenvererbung verstehen;233
1.4.9.4.1;Klassendiagramme;234
1.4.9.4.2;Oberfläche Form1;234
1.4.9.4.3;Quellcode CPerson;235
1.4.9.4.4;Quellcode CKunde;235
1.4.9.4.5;Quellcode Form1;236
1.4.9.4.6;Test;237
1.4.9.4.7;Quellcode IPerson;237
1.4.9.4.8;Quellcode CKunde;238
1.4.9.4.9;Bemerkungen;238
1.5;4 Arrays, Strings, Funktionen;240
1.5.1;4.1 Datenfelder (Arrays);240
1.5.1.1;4.1.1 Array deklarieren;240
1.5.1.2;4.1.2 Array instanziieren;241
1.5.1.3;4.1.3 Array initialisieren;241
1.5.1.4;4.1.4 Zugriff auf Array-Elemente;242
1.5.1.4.1;Indexüberprüfung;242
1.5.1.4.2;Oberen Array-Index ermitteln;243
1.5.1.5;4.1.5 Zugriff mittels Schleife;243
1.5.1.5.1;for-Schleife;243
1.5.1.5.2;foreach-Schleife;243
1.5.1.6;4.1.6 Mehrdimensionale Arrays;244
1.5.1.6.1;Dimensionsgrenzen ermitteln;245
1.5.1.6.2;Mehrdimensional initialisieren;245
1.5.1.7;4.1.7 Zuweisen von Arrays;246
1.5.1.8;4.1.8 Arrays aus Strukturvariablen;247
1.5.1.9;4.1.9 Löschen und Umdimensionieren von Arrays;248
1.5.1.9.1;Felder löschen;248
1.5.1.9.2;Array löschen;248
1.5.1.9.3;Array-Dimensionen ändern;249
1.5.1.10;4.1.10 Eigenschaften und Methoden von Arrays;249
1.5.1.10.1;Wichtige Eigenschaften und Methoden von Array-Variablen;250
1.5.1.10.2;Wichtige Methoden der Array-Klasse;250
1.5.1.11;4.1.11 Übergabe von Arrays;251
1.5.1.11.1;Arrays als Parameter;251
1.5.1.11.2;Rückgabe von Arrays;251
1.5.2;4.2 Verarbeiten von Zeichenketten;252
1.5.2.1;4.2.1 Zuweisen von Strings;252
1.5.2.2;4.2.2 Eigenschaften und Methoden von String-Variablen;253
1.5.2.2.1;Strings in Char-Arrays verwandeln;255
1.5.2.3;4.2.3 Wichtige Methoden der String-Klasse;255
1.5.2.3.1;Strings zerlegen und wieder zusammenstückeln;256
1.5.2.4;4.2.4 Die StringBuilder-Klasse;257
1.5.2.4.1;Grundlegendes;257
1.5.2.4.2;Eigenschaften;258
1.5.2.4.3;Methoden;259
1.5.3;4.3 Reguläre Ausdrücke;259
1.5.3.1;4.3.1 Wozu werden reguläre Ausdrücke verwendet?;260
1.5.3.2;4.3.2 Eine kleine Einführung;260
1.5.3.3;4.3.3 Wichtige Methoden/Eigenschaften der Klasse Regex;261
1.5.3.3.1;Die Match-Methode;261
1.5.3.3.2;Eigenschaften des Match-Objekts;262
1.5.3.3.3;Die NextMatch-Methode;262
1.5.3.3.4;Die Matches-Methode;262
1.5.3.3.5;Der Alternator;262
1.5.3.4;4.3.4 Kompilierte reguläre Ausdrücke;263
1.5.3.5;4.3.5 RegexOptions-Enumeration;264
1.5.3.6;4.3.6 Metazeichen (Escape-Zeichen);264
1.5.3.7;4.3.7 Zeichenmengen (Character Sets);265
1.5.3.8;4.3.8 Quantifizierer;267
1.5.3.9;4.3.9 Zero-Width Assertions;268
1.5.3.9.1;String- und Zeilengrenzen (^ und $);268
1.5.3.9.2;Wortgrenzen (b);269
1.5.3.9.3;Positiver Lookahead (?=expr);269
1.5.3.9.4;Negativer Lookahead (?!expr);270
1.5.3.9.5;Positiver (?<=expr) und negativer (?;332
1.6.8.4;5.8.4 SortedSet<>;333
1.6.9;5.9 Praxisbeispiele;334
1.6.9.1;5.9.1 ArrayList versus generische List;334
1.6.9.1.1;Oberfläche;335
1.6.9.1.2;Quellcode (mit ArrayList);335
1.6.9.1.3;Quellcode (mit generischer List);336
1.6.9.1.4;Test;337
1.6.9.1.5;Bemerkungen;338
1.6.9.2;5.9.2 Generische IEnumerable-Interfaces implementieren;338
1.6.9.2.1;Oberfläche;338
1.6.9.2.2;Quellcode CTestListe;339
1.6.9.2.3;Quellcode Form1;340
1.6.9.2.4;Test;340
1.6.9.2.5;Bemerkungen;341
1.6.9.3;5.9.3 Delegates, anonyme Methoden, Lambda Expressions;341
1.6.9.3.1;Oberfläche;341
1.6.9.3.2;Quellcode;342
1.6.9.3.3;Test;344
1.6.9.4;5.9.4 Dynamischer Zugriff auf COM Interop;345
1.6.9.4.1;Oberfläche;345
1.6.9.4.2;Quellcode (klassische Programmierung);345
1.6.9.4.3;Quellcode (dynamische Programmierung);346
1.6.9.4.4;Test;346
1.6.9.4.5;Bemerkungen;347
1.7;6 Einführung in LINQ;348
1.7.1;6.1 LINQ-Grundlagen;348
1.7.1.1;6.1.1 Die LINQ-Architektur;348
1.7.1.1.1;LINQ-Implementierungen;349
1.7.1.2;6.1.2 Anonyme Typen;349
1.7.1.3;6.1.3 Erweiterungsmethoden;351
1.7.2;6.2 Abfragen mit LINQ to Objects;352
1.7.2.1;6.2.1 Grundlegendes zur LINQ-Syntax;352
1.7.2.2;6.2.2 Zwei alternative Schreibweisen von LINQ Abfragen;353
1.7.2.3;6.2.3 Übersicht der wichtigsten Abfrage-Operatoren;354
1.7.3;6.3 LINQ-Abfragen im Detail;355
1.7.3.1;6.3.1 Die Projektionsoperatoren Select und SelectMany;356
1.7.3.1.1;Select;356
1.7.3.1.2;SelectMany;357
1.7.3.2;6.3.2 Der Restriktionsoperator Where;357
1.7.3.3;6.3.3 Die Sortierungsoperatoren OrderBy und ThenBy;358
1.7.3.3.1;OrderBy/OrderByDescending;358
1.7.3.3.2;ThenBy/ThenByDescending;358
1.7.3.3.3;Reverse;359
1.7.3.4;6.3.4 Der Gruppierungsoperator GroupBy;359
1.7.3.5;6.3.5 Verknüpfen mit Join;362
1.7.3.6;6.3.6 Aggregat-Operatoren;362
1.7.3.6.1;Count;362
1.7.3.6.2;Sum;363
1.7.3.7;6.3.7 Verzögertes Ausführen von LINQ-Abfragen;364
1.7.3.8;6.3.8 Konvertierungsmethoden;365
1.7.3.9;6.3.9 Abfragen mit PLINQ;365
1.7.3.9.1;Probleme mit der Sortierfolge;367
1.7.4;6.4 Praxisbeispiele;368
1.7.4.1;6.4.1 Die Syntax von LINQ-Abfragen verstehen;368
1.7.4.1.1;Oberfläche;369
1.7.4.1.2;Quellcode;369
1.7.4.1.3;Test;370
1.7.4.1.4;Bemerkungen;370
1.7.4.2;6.4.2 Aggregat-Abfragen mit LINQ;371
1.7.4.2.1;Oberfläche;371
1.7.4.2.2;Quellcode;372
1.7.4.2.3;Test;373
1.7.4.2.4;Bemerkungen;373
1.8;7 Zugriff auf das Dateisystem;376
1.8.1;7.1 Grundlagen;376
1.8.1.1;7.1.1 Klassen für den Zugriff auf das Dateisystem;377
1.8.1.2;7.1.2 Statische versus Instanzen-Klasse;377
1.8.2;7.2 Übersichten;378
1.8.2.1;7.2.1 Methoden der Directory-Klasse;378
1.8.2.2;7.2.2 Methoden eines DirectoryInfo-Objekts;379
1.8.2.3;7.2.3 Eigenschaften eines DirectoryInfo-Objekts;379
1.8.2.4;7.2.4 Methoden der File-Klasse;379
1.8.2.5;7.2.5 Methoden eines FileInfo-Objekts;380
1.8.2.6;7.2.6 Eigenschaften eines FileInfo-Objekts;381
1.8.3;7.3 Operationen auf Verzeichnisebene;381
1.8.3.1;7.3.1 Existenz eines Verzeichnisses/einer Datei feststellen;381
1.8.3.2;7.3.2 Verzeichnisse erzeugen und löschen;382
1.8.3.3;7.3.3 Verzeichnisse verschieben und umbenennen;382
1.8.3.4;7.3.4 Aktuelles Verzeichnis bestimmen;383
1.8.3.5;7.3.5 Unterverzeichnisse ermitteln;383
1.8.3.6;7.3.6 Alle Laufwerke ermitteln;383
1.8.3.7;7.3.7 Dateien kopieren und verschieben;384
1.8.3.8;7.3.8 Dateien umbenennen;385
1.8.3.9;7.3.9 Dateiattribute feststellen;385
1.8.3.9.1;Attribute von Verzeichnissen und Dateien;386
1.8.3.10;7.3.10 Verzeichnis einer Datei ermitteln;387
1.8.3.11;7.3.11 Alle im Verzeichnis enthaltenen Dateien ermitteln;387
1.8.3.12;7.3.12 Dateien und Unterverzeichnisse ermitteln;387
1.8.4;7.4 Zugriffsberechtigungen;388
1.8.4.1;7.4.1 ACL und ACE;388
1.8.4.2;7.4.2 SetAccessControl-Methode;389
1.8.4.3;7.4.3 Zugriffsrechte anzeigen;389
1.8.5;7.5 Weitere wichtige Klassen;390
1.8.5.1;7.5.1 Die Path-Klasse;390
1.8.5.2;7.5.2 Die Klasse FileSystemWatcher;391
1.8.6;7.6 Datei- und Verzeichnisdialoge;392
1.8.6.1;7.6.1 OpenFileDialog und SaveFileDialog;393
1.8.6.1.1;Anzeige und Auswertung;393
1.8.6.1.2;Wichtige Eigenschaften;393
1.8.6.1.3;Dateifilter;394
1.8.6.2;7.6.2 FolderBrowserDialog;394
1.8.6.2.1;Die SpecialFolder-Enumeration;394
1.8.7;7.7 Praxisbeispiele;395
1.8.7.1;7.7.1 Infos über Verzeichnisse und Dateien gewinnen;395
1.8.7.1.1;Oberfläche;395
1.8.7.1.2;Quelltext;396
1.8.7.1.3;Test;398
1.8.7.2;7.7.2 Eine Verzeichnisstruktur in die TreeView einlesen;399
1.8.7.2.1;Oberfläche;399
1.8.7.2.2;Quellcode;399
1.8.7.2.3;Test;400
1.8.7.3;7.7.3 Mit LINQ und RegEx Verzeichnisbäume durchsuchen;401
1.8.7.3.1;Oberfläche;401
1.8.7.3.2;Quellcode;402
1.8.7.3.3;Test;404
1.8.7.3.4;Bemerkungen;405
1.9;8 Dateien lesen und schreiben;406
1.9.1;8.1 Grundprinzip der Datenpersistenz;406
1.9.1.1;8.1.1 Dateien und Streams;406
1.9.1.2;8.1.2 Die wichtigsten Klassen;407
1.9.1.3;8.1.3 Erzeugen eines Streams;408
1.9.2;8.2 Dateiparameter;408
1.9.2.1;8.2.1 FileAccess;408
1.9.2.2;8.2.2 FileMode;408
1.9.2.3;8.2.3 FileShare;409
1.9.3;8.3 Textdateien;409
1.9.3.1;8.3.1 Eine Textdatei beschreiben bzw. neu anlegen;409
1.9.3.1.1;WriteAllLines/AppendAllText;410
1.9.3.2;8.3.2 Eine Textdatei lesen;411
1.9.3.2.1;ReadAllLines/ReadLines;411
1.9.4;8.4 Binärdateien;412
1.9.4.1;8.4.1 Lese-/Schreibzugriff;412
1.9.4.2;8.4.2 Die Methoden ReadAllBytes und WriteAllBytes;413
1.9.4.3;8.4.3 Erzeugen von BinaryReader/BinaryWriter;413
1.9.5;8.5 Sequenzielle Dateien;414
1.9.5.1;8.5.1 Lesen und schreiben von strukturierten Daten;414
1.9.5.2;8.5.2 Serialisieren von Objekten;415
1.9.6;8.6 Dateien verschlüsseln und komprimieren;416
1.9.6.1;8.6.1 Das Methodenpärchen Encrypt/Decrypt;416
1.9.6.2;8.6.2 Verschlüsseln unter Vista/Windows 7/Windows 8;416
1.9.6.3;8.6.3 Verschlüsseln mit der CryptoStream-Klasse;417
1.9.6.4;8.6.4 Dateien komprimieren;418
1.9.7;8.7 Memory Mapped Files;419
1.9.7.1;8.7.1 Grundprinzip;419
1.9.7.2;8.7.2 Erzeugen eines MMF;420
1.9.7.2.1;CreateFromFile-Methode;420
1.9.7.2.2;CreateNew-Methode;421
1.9.7.3;8.7.3 Erstellen eines Map View;421
1.9.8;8.8 Praxisbeispiele;422
1.9.8.1;8.8.1 Auf eine Textdatei zugreifen;422
1.9.8.1.1;Oberfläche;422
1.9.8.1.2;Quellcode;422
1.9.8.1.3;Test;424
1.9.8.2;8.8.2 Einen Objektbaum persistent speichern;425
1.9.8.2.1;Klassendiagramm;425
1.9.8.2.2;Klasse CBestellung;426
1.9.8.2.3;Klasse CPerson;427
1.9.8.2.4;Klasse CKunde;427
1.9.8.2.5;Klasse CFirma;428
1.9.8.2.6;Klasse CPersistent;428
1.9.8.2.7;Form1;429
1.9.8.2.8;Test;431
1.9.8.2.9;Anzeige mit DataGridView;431
1.9.8.3;8.8.3 Ein Memory Mapped File (MMF) verwenden;432
1.9.8.3.1;Oberfläche;432
1.9.8.3.2;Quellcode;432
1.9.8.3.3;Test;433
1.9.8.3.4;Bemerkungen;434
1.10;9 Asynchrone Programmierung;436
1.10.1;9.1 Übersicht;436
1.10.1.1;9.1.1 Multitasking versus Multithreading;437
1.10.1.2;9.1.2 Deadlocks;438
1.10.1.3;9.1.3 Racing;438
1.10.2;9.2 Programmieren mit Threads;440
1.10.2.1;9.2.1 Einführungsbeispiel;440
1.10.2.2;9.2.2 Wichtige Thread-Methoden;441
1.10.2.3;9.2.3 Wichtige Thread-Eigenschaften;443
1.10.2.4;9.2.4 Einsatz der ThreadPool-Klasse;444
1.10.3;9.3 Sperrmechanismen;446
1.10.3.1;9.3.1 Threading ohne lock;446
1.10.3.2;9.3.2 Threading mit lock;448
1.10.3.2.1;Ein anschauliches Beispiel;449
1.10.3.3;9.3.3 Die Monitor-Klasse;450
1.10.3.3.1;Wait und Pulse/PulseAll;451
1.10.3.3.2;TryEnter;453
1.10.3.4;9.3.4 Mutex;453
1.10.3.5;9.3.5 Methoden für die parallele Ausführung sperren;455
1.10.3.6;9.3.6 Semaphore;455
1.10.4;9.4 Interaktion mit der Programmoberfläche;457
1.10.4.1;9.4.1 Die Werkzeuge;457
1.10.4.2;9.4.2 Einzelne Steuerelemente mit Invoke aktualisieren;457
1.10.4.3;9.4.3 Mehrere Steuerelemente aktualisieren;459
1.10.4.4;9.4.4 Ist ein Invoke-Aufruf nötig?;459
1.10.4.5;9.4.5 Und was ist mit WPF?;460
1.10.5;9.5 Timer-Threads;461
1.10.6;9.6 Die BackgroundWorker-Komponente;462
1.10.7;9.7 Asynchrone Programmier-Entwurfsmuster;465
1.10.7.1;9.7.1 Kurzübersicht;465
1.10.7.1.1;Begin...-Methode;465
1.10.7.1.2;End...-Methode;466
1.10.7.1.3;Die Rückrufmethode;466
1.10.7.2;9.7.2 Polling;466
1.10.7.3;9.7.3 Callback verwenden;468
1.10.7.4;9.7.4 Callback mit Parameterübergabe verwenden;469
1.10.7.5;9.7.5 Callback mit Zugriff auf die Programm-Oberfläche;470
1.10.8;9.8 Asynchroner Aufruf beliebiger Methoden;471
1.10.8.1;9.8.1 Die Beispielklasse;471
1.10.8.2;9.8.2 Asynchroner Aufruf ohne Callback;473
1.10.8.3;9.8.3 Asynchroner Aufruf mit Callback und Anzeigefunktion;474
1.10.8.4;9.8.4 Aufruf mit Rückgabewerten (per Eigenschaft);475
1.10.8.5;9.8.5 Aufruf mit Rückgabewerten (per EndInvoke);475
1.10.9;9.9 Es geht auch einfacher – async und await;476
1.10.9.1;9.9.1 Der Weg von Synchron zu Asynchron;477
1.10.9.2;9.9.2 Achtung: Fehlerquellen!;479
1.10.9.3;9.9.3 Eigene asynchrone Methoden entwickeln;481
1.10.10;9.10 Praxisbeispiele;483
1.10.10.1;9.10.1 Spieltrieb & Multithreading erleben;483
1.10.10.1.1;Aufgabenstellung;483
1.10.10.1.2;Oberfläche;484
1.10.10.1.3;Quelltext LKW;485
1.10.10.1.4;Quelltext Schiff;487
1.10.10.1.5;Quelltext Controller;490
1.10.10.1.6;Quelltext Global;492
1.10.10.1.7;Quelltext Form1;492
1.10.10.1.8;Test;495
1.10.10.1.9;Bemerkungen;496
1.10.10.2;9.10.2 Prozess- und Thread-Informationen gewinnen;496
1.10.10.2.1;Oberfläche;496
1.10.10.2.2;Quellcode;496
1.10.10.2.3;Test;500
1.10.10.3;9.10.3 Ein externes Programm starten;501
1.10.10.3.1;Oberfläche;501
1.10.10.3.2;Quelltext;501
1.10.10.3.3;Test;502
1.10.10.3.4;Ergänzungen;502
1.10.10.3.5;Bemerkung;503
1.11;10 Die Task Parallel Library;504
1.11.1;10.1 Überblick;504
1.11.1.1;10.1.1 Parallel-Programmierung;504
1.11.1.2;10.1.2 Möglichkeiten der TPL;507
1.11.1.3;10.1.3 Der CLR-Threadpool;507
1.11.2;10.2 Parallele Verarbeitung mit Parallel.Invoke;508
1.11.2.1;10.2.1 Aufrufvarianten;509
1.11.2.2;10.2.2 Einschränkungen;510
1.11.3;10.3 Verwendung von Parallel.For;510
1.11.3.1;10.3.1 Abbrechen der Verarbeitung;512
1.11.3.2;10.3.2 Auswerten des Verarbeitungsstatus;513
1.11.3.3;10.3.3 Und was ist mit anderen Iterator-Schrittweiten?;514
1.11.4;10.4 Collections mit Parallel.ForEach verarbeiten;514
1.11.5;10.5 Die Task-Klasse;515
1.11.5.1;10.5.1 Einen Task erzeugen;515
1.11.5.2;10.5.2 Den Task starten;516
1.11.5.3;10.5.3 Datenübergabe an den Task;518
1.11.5.4;10.5.4 Wie warte ich auf das Ende des Task?;519
1.11.5.5;10.5.5 Tasks mit Rückgabewerten;521
1.11.5.6;10.5.6 Die Verarbeitung abbrechen;524
1.11.5.6.1;Abbruch per return;524
1.11.5.6.2;Abbruch per CancellationToken;525
1.11.5.7;10.5.7 Fehlerbehandlung;527
1.11.5.8;10.5.8 Weitere Eigenschaften;528
1.11.5.8.1;Task-Id;528
1.11.5.8.2;Status;529
1.11.5.8.3;IsCanceled, IsCompleted, IsFaulted;529
1.11.5.8.4;TaskCreationOptions;529
1.11.6;10.6 Zugriff auf das User-Interface;529
1.11.6.1;10.6.1 Task-Ende und Zugriff auf die Oberfläche;530
1.11.6.2;10.6.2 Zugriff auf das UI aus dem Task heraus;531
1.11.7;10.7 Weitere Datenstrukturen im Überblick;533
1.11.7.1;10.7.1 Threadsichere Collections;533
1.11.7.2;10.7.2 Primitive für die Threadsynchronisation;534
1.11.8;10.8 Parallel LINQ (PLINQ);534
1.11.9;10.9 Die Parallel Diagnostic Tools;535
1.11.9.1;10.9.1 Fenster für parallele Aufgaben;535
1.11.9.2;10.9.2 Fenster für parallele Stacks;536
1.11.9.3;10.9.3 IntelliTrace;537
1.11.10;10.10 Praxisbeispiel: Spieltrieb – Version 2;537
1.11.10.1;10.10.1 Aufgabenstellung;537
1.11.10.2;10.10.2 Global-Klasse;538
1.11.10.3;10.10.3 Controller-Klasse;539
1.11.10.4;10.10.4 LKW-Klasse;541
1.11.10.5;10.10.5 Schiff-Klasse;542
1.11.10.6;10.10.6 Oberfläche;545
1.12;11 Fehlersuche und Behandlung;548
1.12.1;11.1 Der Debugger;548
1.12.1.1;11.1.1 Allgemeine Beschreibung;548
1.12.1.2;11.1.2 Die wichtigsten Fenster;549
1.12.1.2.1;Befehlsfenster;549
1.12.1.2.2;Direktfenster;550
1.12.1.2.3;Lokal-Fenster;550
1.12.1.2.4;Überwachungsfenster;551
1.12.1.2.5;Autofenster;551
1.12.1.2.6;Ausgabefenster;551
1.12.1.3;11.1.3 Debugging-Optionen;552
1.12.1.3.1;Einzelschritt-Modus;553
1.12.1.3.2;Prozedurschritt-Modus;553
1.12.1.3.3;Breakpoints;553
1.12.1.4;11.1.4 Praktisches Debugging am Beispiel;554
1.12.1.4.1;Haltepunkte setzen;555
1.12.1.4.2;Abbruchbedingung setzen;555
1.12.1.4.3;Trefferanzahl verwenden;556
1.12.1.4.4;Einzelschritt-Modus;556
1.12.1.4.5;Prozedurschritt;557
1.12.1.4.6;Ausführen bis Rücksprung;557
1.12.1.4.7;Auswerten von Ausdrücken;557
1.12.2;11.2 Arbeiten mit Debug und Trace;558
1.12.2.1;11.2.1 Wichtige Methoden von Debug und Trace;558
1.12.2.1.1;Write, WriteLine, WriteIf und WriteLineIf;558
1.12.2.1.2;IndentLevel, Indent, IndentSize und UnIndent;560
1.12.2.1.3;Assert;560
1.12.2.1.4;Fail;561
1.12.2.2;11.2.2 Besonderheiten der Trace-Klasse;562
1.12.2.3;11.2.3 TraceListener-Objekte;562
1.12.2.3.1;TextWriterTraceListener;562
1.12.2.3.2;App.config zur Definition verwenden;563
1.12.2.3.3;EventLogTraceListener;564
1.12.3;11.3 Caller Information;565
1.12.3.1;11.3.1 Attribute;565
1.12.3.2;11.3.2 Anwendung;565
1.12.4;11.4 Fehlerbehandlung;566
1.12.4.1;11.4.1 Anweisungen zur Fehlerbehandlung;566
1.12.4.2;11.4.2 try-catch;567
1.12.4.2.1;Ausnahmen über Fehlerklassen auswerten;568
1.12.4.2.2;Spezifische Fehlerklassen auswerten;568
1.12.4.2.3;Fehler erneut auslösen;569
1.12.4.3;11.4.3 try-finally;572
1.12.4.4;11.4.4 Das Standardverhalten bei Ausnahmen festlegen;574
1.12.4.5;11.4.5 Die Exception-Klasse;575
1.12.4.6;11.4.6 Fehler/Ausnahmen auslösen;576
1.12.4.7;11.4.7 Eigene Fehlerklassen;576
1.12.4.8;11.4.8 Exceptionhandling zur Entwurfszeit;578
1.12.4.9;11.4.9 Code Contracts;579
1.13;12 Einführung in WPF;582
1.13.1;Und was ist mit Silverlight?;583
1.13.2;12.1 Neues aus der Gerüchteküche;583
1.13.2.1;12.1.1 Silverlight;583
1.13.2.2;12.1.2 WPF;583
1.13.3;12.2 Einführung;584
1.13.3.1;12.2.1 Was kann eine WPF-Anwendung?;584
1.13.3.2;12.2.2 Die eXtensible Application Markup Language;586
1.13.3.2.1;Unsere erste XAML-Anwendung;587
1.13.3.2.2;Probleme mit dem Stammelement;588
1.13.3.2.3;Ein kleines Experiment;589
1.13.3.2.4;Soll ich das alles von Hand eintippen?;590
1.13.3.3;12.2.3 Verbinden von XAML und C#-Code;590
1.13.3.3.1;App.xaml;590
1.13.3.3.2;App.xaml.cs;591
1.13.3.3.3;MainWindow.xaml;592
1.13.3.3.4;MainWindow.xaml.cs;593
1.13.3.3.5;Ein erster Ereignis-Handler;593
1.13.3.3.6;Und wo ist mein Button-Objekt?;594
1.13.3.3.7;Brauche ich unbedingt eine Trennung von Code und XAML?;595
1.13.3.3.8;Kann ich Oberflächen auch per Code erzeugen?;595
1.13.3.4;12.2.4 Zielplattformen;596
1.13.3.5;12.2.5 Applikationstypen;597
1.13.3.5.1;WPF-Anwendung;597
1.13.3.5.2;WPF-Browseranwendungen;597
1.13.3.6;12.2.6 Vor- und Nachteile von WPF-Anwendungen;598
1.13.3.7;12.2.7 Weitere Dateien im Überblick;598
1.13.3.7.1;Was sind .BAML-Dateien und was passiert damit?;598
1.13.3.7.2;Worum handelt es sich bei den .G.CS-Dateien?;599
1.13.4;12.3 Alles beginnt mit dem Layout;601
1.13.4.1;12.3.1 Allgemeines zum Layout;601
1.13.4.2;12.3.2 Positionieren von Steuerelementen;603
1.13.4.2.1;Was sind das überhaupt für Maßangaben?;603
1.13.4.2.2;Top/Left/Width/Height;604
1.13.4.2.3;MinWidth/MaxWidth/MinHeight/MaxHeight;604
1.13.4.2.4;Margin/Padding;605
1.13.4.2.5;HorizontalAlignment/VerticalAligment;606
1.13.4.3;12.3.3 Canvas;607
1.13.4.4;12.3.4 StackPanel;607
1.13.4.5;12.3.5 DockPanel;609
1.13.4.6;12.3.6 WrapPanel;611
1.13.4.7;12.3.7 UniformGrid;611
1.13.4.8;12.3.8 Grid;613
1.13.4.8.1;Definition des Grundlayouts;613
1.13.4.8.2;Zuordnen von Kind-Elementen;615
1.13.4.8.3;Verwendung des GridSplitters;617
1.13.4.9;12.3.9 ViewBox;618
1.13.4.10;12.3.10 TextBlock;619
1.13.4.10.1;Textformatierungen;620
1.13.4.10.2;Besonderheit von Leerzeichen/Zeilenumbrüchen;621
1.13.4.10.3;Textausrichtung;622
1.13.5;12.4 Das WPF-Programm;622
1.13.5.1;12.4.1 Die App-Klasse;622
1.13.5.2;12.4.2 Das Startobjekt festlegen;623
1.13.5.3;12.4.3 Kommandozeilenparameter verarbeiten;624
1.13.5.4;12.4.4 Die Anwendung beenden;625
1.13.5.5;12.4.5 Auswerten von Anwendungsereignissen;625
1.13.6;12.5 Die Window-Klasse;626
1.13.6.1;12.5.1 Position und Größe festlegen;626
1.13.6.2;12.5.2 Rahmen und Beschriftung;627
1.13.6.3;12.5.3 Das Fenster-Icon ändern;627
1.13.6.4;12.5.4 Anzeige weiterer Fenster;628
1.13.6.5;12.5.5 Transparenz;628
1.13.6.6;12.5.6 Abstand zum Inhalt festlegen;629
1.13.6.7;12.5.7 Fenster ohne Fokus anzeigen;629
1.13.6.8;12.5.8 Ereignisfolge bei Fenstern;630
1.13.6.9;12.5.9 Ein paar Worte zur Schriftdarstellung;630
1.13.6.9.1;TextOptions.TextFormattingMode;631
1.13.6.9.2;TextOptions.TextRenderingMode;632
1.13.6.10;12.5.10 Ein paar Worte zur Darstellung von Controls;633
1.13.6.11;12.5.11 Wird mein Fenster komplett mit WPF gerendert?;635
1.14;13 Übersicht WPF-Controls;636
1.14.1;13.1 Allgemeingültige Eigenschaften;636
1.14.2;13.2 Label;638
1.14.3;13.3 Button, RepeatButton, ToggleButton;639
1.14.3.1;13.3.1 Schaltflächen für modale Dialoge;639
1.14.3.2;13.3.2 Schaltflächen mit Grafik;640
1.14.4;13.4 TextBox, PasswordBox;641
1.14.4.1;13.4.1 TextBox;641
1.14.4.2;13.4.2 PasswordBox;643
1.14.5;13.5 CheckBox;644
1.14.6;13.6 RadioButton;646
1.14.7;13.7 ListBox, ComboBox;647
1.14.7.1;13.7.1 ListBox;647
1.14.7.2;13.7.2 ComboBox;650
1.14.7.3;13.7.3 Den Content formatieren;652
1.14.8;13.8 Image;653
1.14.8.1;13.8.1 Grafik per XAML zuweisen;653
1.14.8.2;13.8.2 Grafik zur Laufzeit zuweisen;654
1.14.8.3;13.8.3 Bild aus Datei laden;655
1.14.8.4;13.8.4 Die Grafikskalierung beeinflussen;656
1.14.9;13.9 MediaElement;657
1.14.10;13.10 Slider, ScrollBar;659
1.14.10.1;13.10.1 Slider;659
1.14.10.2;13.10.2 ScrollBar;660
1.14.11;13.11 ScrollViewer;661
1.14.12;13.12 Menu, ContextMenu;662
1.14.12.1;13.12.1 Menu;662
1.14.12.2;13.12.2 Tastenkürzel;663
1.14.12.3;13.12.3 Grafiken;664
1.14.12.4;13.12.4 Weitere Möglichkeiten;665
1.14.12.5;13.12.5 ContextMenu;666
1.14.13;13.13 ToolBar;667
1.14.13.1;Der ToolBarTray;668
1.14.14;13.14 StatusBar, ProgressBar;670
1.14.14.1;13.14.1 StatusBar;670
1.14.14.2;13.14.2 ProgressBar;672
1.14.15;13.15 Border, GroupBox, BulletDecorator;673
1.14.15.1;13.15.1 Border;673
1.14.15.2;13.15.2 GroupBox;674
1.14.15.3;13.15.3 BulletDecorator;675
1.14.16;13.16 RichTextBox;677
1.14.16.1;13.16.1 Verwendung und Anzeige von vordefiniertem Text;677
1.14.16.2;13.16.2 Neues Dokument zur Laufzeit erzeugen;679
1.14.16.3;13.16.3 Sichern von Dokumenten;679
1.14.16.4;13.16.4 Laden von Dokumenten;681
1.14.16.5;13.16.5 Texte per Code einfügen/modifizieren;682
1.14.16.6;13.16.6 Texte formatieren;683
1.14.16.7;13.16.7 EditingCommands;684
1.14.16.8;13.16.8 Grafiken/Objekte einfügen;685
1.14.16.9;13.16.9 Rechtschreibkontrolle;687
1.14.17;13.17 FlowDocumentPageViewer & Co.;687
1.14.17.1;13.17.1 FlowDocumentPageViewer;687
1.14.17.2;13.17.2 FlowDocumentReader;688
1.14.17.3;13.17.3 FlowDocumentScrollViewer;688
1.14.18;13.18 FlowDocument;688
1.14.18.1;13.18.1 FlowDocument per XAML beschreiben;689
1.14.18.2;13.18.2 FlowDocument per Code erstellen;691
1.14.19;13.19 DocumentViewer;692
1.14.20;13.20 Expander, TabControl;693
1.14.20.1;13.20.1 Expander;693
1.14.20.2;13.20.2 TabControl;695
1.14.21;13.21 Popup;696
1.14.22;13.22 TreeView;698
1.14.23;13.23 ListView;701
1.14.24;13.24 DataGrid;702
1.14.25;13.25 Calendar/DatePicker;703
1.14.25.1;DisplayMode;703
1.14.25.2;DisplayDate, SelectedDate und SelectedDates;703
1.14.25.3;Auswahlmodi;704
1.14.25.4;Sperrtage;705
1.14.25.5;Calendar skalieren;706
1.14.26;13.26 InkCanvas;707
1.14.26.1;13.26.1 Stift-Parameter definieren;707
1.14.26.2;13.26.2 Die Zeichenmodi;708
1.14.26.3;13.26.3 Inhalte laden und sichern;709
1.14.26.4;13.26.4 Konvertieren in eine Bitmap;709
1.14.26.5;13.26.5 Weitere Eigenschaften;710
1.14.27;13.27 Ellipse, Rectangle, Line und Co.;711
1.14.27.1;13.27.1 Ellipse;711
1.14.27.2;13.27.2 Rectangle;711
1.14.27.3;13.27.3 Line;712
1.14.28;13.28 Browser;712
1.14.29;13.29 Ribbon;715
1.14.29.1;13.29.1 Allgemeine Grundlagen;715
1.14.29.2;13.29.2 Download/Installation;716
1.14.29.3;13.29.3 Erste Schritte;717
1.14.29.4;13.29.4 Registerkarten und Gruppen;718
1.14.29.5;13.29.5 Kontextabhängige Registerkarten;719
1.14.29.6;13.29.6 Einfache Beschriftungen;720
1.14.29.7;13.29.7 Schaltflächen;720
1.14.29.7.1;Schaltflächen zusammenfassen;722
1.14.29.8;13.29.8 Auswahllisten;722
1.14.29.9;13.29.9 Optionsauswahl;725
1.14.29.10;13.29.10 Texteingaben;725
1.14.29.11;13.29.11 Screentips;725
1.14.29.12;13.29.12 Symbolleiste für den Schnellzugriff;726
1.14.29.13;13.29.13 Das RibbonWindow;727
1.14.29.14;13.29.14 Menüs;728
1.14.29.15;13.29.15 Anwendungsmenü;730
1.14.29.16;13.29.16 Alternativen;733
1.14.30;13.30 Chart;733
1.14.31;13.31 WindowsFormsHost;734
1.15;14 Wichtige WPF-Techniken;738
1.15.1;14.1 Eigenschaften;738
1.15.1.1;14.1.1 Abhängige Eigenschaften (Dependency Properties);738
1.15.1.2;14.1.2 Angehängte Eigenschaften (Attached Properties);740
1.15.2;14.2 Einsatz von Ressourcen;740
1.15.2.1;14.2.1 Was sind eigentlich Ressourcen?;740
1.15.2.2;14.2.2 Wo können Ressourcen gespeichert werden?;740
1.15.2.3;14.2.3 Wie definiere ich eine Ressource?;742
1.15.2.4;14.2.4 Statische und dynamische Ressourcen;743
1.15.2.5;14.2.5 Wie werden Ressourcen adressiert?;744
1.15.2.6;14.2.6 System-Ressourcen einbinden;745
1.15.3;14.3 Das WPF-Ereignis-Modell;745
1.15.3.1;14.3.1 Einführung;745
1.15.3.2;14.3.2 Routed Events;746
1.15.3.3;14.3.3 Direkte Events;748
1.15.4;14.4 Verwendung von Commands;749
1.15.4.1;14.4.1 Einführung zu Commands;749
1.15.4.2;14.4.2 Verwendung vordefinierter Commands;749
1.15.4.3;14.4.3 Das Ziel des Commands;751
1.15.4.4;14.4.4 Welche vordefinierten Commands stehen zur Verfügung?;752
1.15.4.5;14.4.5 Commands an Ereignismethoden binden;753
1.15.4.6;14.4.6 Wie kann ich ein Command per Code auslösen?;754
1.15.4.7;14.4.7 Command-Ausführung verhindern;755
1.15.5;14.5 Das WPF-Style-System;755
1.15.5.1;14.5.1 Übersicht;755
1.15.5.2;14.5.2 Benannte Styles;756
1.15.5.3;14.5.3 Typ-Styles;757
1.15.5.4;14.5.4 Styles anpassen und vererben;758
1.15.5.4.1;Styles anpassen (überschreiben);759
1.15.5.4.2;Style ersetzen;759
1.15.5.4.3;Styles vererben;760
1.15.5.4.4;Styleänderung per Code;760
1.15.6;14.6 Verwenden von Triggern;761
1.15.6.1;14.6.1 Eigenschaften-Trigger (Property Triggers);761
1.15.6.2;14.6.2 Ereignis-Trigger;763
1.15.6.3;14.6.3 Daten-Trigger;764
1.15.7;14.7 Einsatz von Templates;765
1.15.7.1;14.7.1 Neues Template erstellen;765
1.15.7.2;14.7.2 Template abrufen und verändern;769
1.15.8;14.8 Transformationen, Animationen, StoryBoards;772
1.15.8.1;14.8.1 Transformationen;772
1.15.8.1.1;Drehen mit RotateTransform;773
1.15.8.1.2;Skalieren mit ScaleTransform;774
1.15.8.1.3;Verformen mit SkewTransform;774
1.15.8.1.4;Verschieben mit TranslateTransform;775
1.15.8.1.5;Und alles zusammen mit TransformGroup;775
1.15.8.1.6;Hilfe durch den WPF-Editor;777
1.15.8.2;14.8.2 Animationen mit dem StoryBoard realisieren;778
1.15.8.2.1;Animation per C#-Code realisieren;779
1.15.8.2.2;Animation per Code steuern;779
1.15.8.2.3;Mehrere Animationen zusammenfassen;782
1.15.9;14.9 Praxisbeispiel;782
1.15.9.1;14.9.1 Arbeiten mit Microsoft Expression Blend;782
1.15.9.1.1;Eine Animation realisieren;783
1.15.9.1.2;Der XAML-Code;784
1.15.9.1.3;Test;785
1.15.9.1.4;Bemerkung;785
1.16;15 WPF-Datenbindung;788
1.16.1;15.1 Grundprinzip;788
1.16.1.1;15.1.1 Bindungsarten;789
1.16.1.2;15.1.2 Wann eigentlich wird die Quelle aktualisiert?;790
1.16.1.3;15.1.3 Geht es auch etwas langsamer?;791
1.16.1.4;15.1.4 Bindung zur Laufzeit realisieren;792
1.16.2;15.2 Binden an Objekte;794
1.16.2.1;15.2.1 Objekte im XAML-Code instanziieren;794
1.16.2.2;15.2.2 Verwenden der Instanz im C#-Quellcode;796
1.16.2.3;15.2.3 Anforderungen an die Quell-Klasse;796
1.16.2.4;15.2.4 Instanziieren von Objekten per C#-Code;798
1.16.3;15.3 Binden von Collections;799
1.16.3.1;15.3.1 Anforderung an die Collection;799
1.16.3.2;15.3.2 Einfache Anzeige;800
1.16.3.3;15.3.3 Navigieren zwischen den Objekten;801
1.16.3.4;15.3.4 Einfache Anzeige in einer ListBox;803
1.16.3.4.1;Verwendung von DisplayMemberPath;803
1.16.3.5;15.3.5 DataTemplates zur Anzeigeformatierung;804
1.16.3.6;15.3.6 Mehr zu List- und ComboBox;805
1.16.3.6.1;SelectedIndex;805
1.16.3.6.2;SelectedItem/SelectedItems;805
1.16.3.6.3;SelectedValuePath und SelectedValue;806
1.16.3.7;15.3.7 Verwendung der ListView;807
1.16.3.7.1;Einfache Bindung;807
1.16.3.7.2;Sortieren der Einträge;808
1.16.4;15.4 Noch einmal zurück zu den Details;809
1.16.4.1;15.4.1 Navigieren in den Daten;809
1.16.4.2;15.4.2 Sortieren;811
1.16.4.3;15.4.3 Filtern;811
1.16.4.4;15.4.4 Live Shaping;812
1.16.5;15.5 Anzeige von Datenbankinhalten;813
1.16.5.1;15.5.1 Datenmodell per LINQ to SQL-Designer erzeugen;814
1.16.5.2;15.5.2 Die Programm-Oberfläche;815
1.16.5.3;15.5.3 Der Zugriff auf die Daten;816
1.16.6;15.6 Drag & Drop-Datenbindung;817
1.16.6.1;15.6.1 Vorgehensweise;817
1.16.6.2;15.6.2 Weitere Möglichkeiten;820
1.16.7;15.7 Formatieren von Werten;821
1.16.7.1;15.7.1 IValueConverter;822
1.16.7.2;15.7.2 BindingBase.StringFormat-Eigenschaft;824
1.16.8;15.8 Das DataGrid als Universalwerkzeug;826
1.16.8.1;15.8.1 Grundlagen der Anzeige;826
1.16.8.2;15.8.2 UI-Virtualisierung;827
1.16.8.3;15.8.3 Spalten selbst definieren;827
1.16.8.4;15.8.4 Zusatzinformationen in den Zeilen anzeigen;829
1.16.8.5;15.8.5 Vom Betrachten zum Editieren;830
1.16.9;15.9 Praxisbeispiele;831
1.16.9.1;15.9.1 Collections in Hintergrundthreads füllen;831
1.16.9.1.1;Oberfläche;831
1.16.9.1.2;Das Problem;831
1.16.9.1.3;Lösung (bis .NET 4.0);833
1.16.9.1.4;Test;833
1.16.9.1.5;Lösung (ab .NET 4.5);833
1.16.9.1.6;Test;834
1.16.9.2;15.9.2 Drag & Drop-Bindung bei 1:n-Beziehungen;834
1.16.9.2.1;Oberfläche;834
1.16.9.2.2;Quellcode (XAML);836
1.16.9.2.3;Quellcode (C#);837
1.16.9.2.4;Test;838
1.17;16 Druckausgabe mit WPF;840
1.17.1;16.1 Grundlagen;840
1.17.1.1;16.1.1 XPS-Dokumente;840
1.17.1.2;16.1.2 System.Printing;841
1.17.1.3;16.1.3 System.Windows.Xps;842
1.17.2;16.2 Einfache Druckausgaben mit dem PrintDialog;842
1.17.3;16.3 Mehrseitige Druckvorschau-Funktion;845
1.17.3.1;16.3.1 Fix-Dokumente;845
1.17.3.1.1;Einsatzbeispiel;845
1.17.3.1.2;Die Klasse FixedPrintManager;849
1.17.3.2;16.3.2 Flow-Dokumente;851
1.17.3.2.1;Einführungsbeispiel;851
1.17.3.2.2;Die Klasse FlowPrintManager;852
1.17.4;16.4 Druckerinfos, -auswahl, -konfiguration;854
1.17.4.1;16.4.1 Die installierten Drucker bestimmen;855
1.17.4.2;16.4.2 Den Standarddrucker bestimmen;856
1.17.4.3;16.4.3 Mehr über einzelne Drucker erfahren;856
1.17.4.4;16.4.4 Spezifische Druckeinstellungen vornehmen;858
1.17.4.5;16.4.5 Direkte Druckausgabe;860
1.18;17 Erste Schritte in WinRT;864
1.18.1;17.1 Grundkonzepte und Begriffe;864
1.18.1.1;17.1.1 Windows Runtime (WinRT);864
1.18.1.2;17.1.2 Windows Store Apps;865
1.18.1.3;17.1.3 Fast and Fluid;866
1.18.1.4;17.1.4 Process Sandboxing und Contracts;867
1.18.1.5;17.1.5 .NET WinRT-Profil;869
1.18.1.6;17.1.6 Language Projection;869
1.18.1.7;17.1.7 Vollbildmodus;871
1.18.1.8;17.1.8 Windows Store;871
1.18.1.9;17.1.9 Zielplattformen;872
1.18.2;17.2 Entwurfsumgebung;873
1.18.2.1;17.2.1 Betriebssystem;873
1.18.2.2;17.2.2 Windows-Simulator;874
1.18.2.3;17.2.3 Remote-Debugging;876
1.18.3;17.3 Ein (kleines) Einstiegsbeispiel;877
1.18.3.1;17.3.1 Aufgabenstellung;877
1.18.3.2;17.3.2 Quellcode;877
1.18.3.3;17.3.3 Oberflächenentwurf;880
1.18.3.4;17.3.4 Installation und Test;882
1.18.3.5;17.3.5 Verbesserungen;883
1.18.3.5.1;Persistenz;884
1.18.3.5.2;Touchscreen;885
1.18.3.6;17.3.6 Fazit;886
1.18.4;17.4 Weitere Details zu WinRT;888
1.18.4.1;17.4.1 Wo ist WinRT einzuordnen?;888
1.18.4.2;17.4.2 Die WinRT-API;889
1.18.4.2.1;Benutzerschnittstelle;890
1.18.4.2.2;Daten & Kommunikation;890
1.18.4.2.3;Geräte und Medien;891
1.18.4.2.4;Anwendungsdienste;891
1.18.4.3;17.4.3 Wichtige WinRT-Namespaces;891
1.18.4.4;17.4.4 Der Unterbau;892
1.18.4.4.1;Die Schnittstellen;892
1.18.4.4.2;Language Projection;893
1.18.4.4.3;Assemblies für WinRT;894
1.18.5;17.5 Gedanken zum Thema "WinRT & Tablets";895
1.18.5.1;17.5.1 Windows 8-Oberfläche versus Desktop;895
1.18.5.2;17.5.2 Tablets und Touchscreens;895
1.18.6;17.6 Praxisbeispiel;897
1.18.6.1;17.6.1 WinRT in Desktop-Applikationen nutzen;897
1.18.6.1.1;Oberfläche;897
1.18.6.1.2;Quellcode;898
1.18.6.1.3;Test;899
1.18.6.1.4;Bemerkung;899
1.19;18 WinRT-Oberflächen entwerfen;900
1.19.1;18.1 Grundkonzepte;900
1.19.1.1;18.1.1 XAML (oder HTML 5) für die Oberfläche;901
1.19.1.2;18.1.2 Die Page, der Frame und das Window;902
1.19.1.3;18.1.3 Das Befehlsdesign;903
1.19.1.3.1;App-Leisten;904
1.19.1.3.2;Settingsbereich;905
1.19.1.4;18.1.4 Die Navigationsdesigns;905
1.19.1.5;18.1.5 Achtung: Fingereingabe!;906
1.19.1.6;18.1.6 Verwendung von Schriftarten;907
1.19.2;18.2 Projekttypen und Seitentemplates;907
1.19.2.1;18.2.1 Leere App;907
1.19.2.2;18.2.2 Geteilte App (Split App);909
1.19.2.3;18.2.3 Raster-App (Grid App);911
1.19.2.4;18.2.4 Leere Seite (Blank Page);912
1.19.2.5;18.2.5 Standardseite (Basic Page);913
1.19.2.6;18.2.6 Ein eigenes Grundlayout erstellen;915
1.19.3;18.3 Seitenauswahl und -navigation;916
1.19.3.1;18.3.1 Die Startseite festlegen;916
1.19.3.2;18.3.2 Navigation und Parameterübergabe;916
1.19.3.3;18.3.3 Den Seitenstatus erhalten;917
1.19.4;18.4 Die vier App-Ansichten;918
1.19.4.1;18.4.1 Vollbild quer und hochkant;918
1.19.4.2;18.4.2 Angedockt und Füllmodus;919
1.19.4.3;18.4.3 Reagieren auf die Änderung;919
1.19.4.3.1;SizeChanged auswerten;920
1.19.4.3.2;VisualStateManager;921
1.19.4.4;18.4.4 Angedockten Modus aktiv beenden;923
1.19.5;18.5 Skalieren von Apps;923
1.19.6;18.6 Praxisbeispiele;925
1.19.6.1;18.6.1 Seitennavigation und Parameterübergabe;925
1.19.6.1.1;Oberfläche BasicPage1;925
1.19.6.1.2;Quellcode BasicPage1;926
1.19.6.1.3;Oberfläche BasicPage2;926
1.19.6.1.4;Quellcode BasicPage2;927
1.19.6.1.5;Test;927
1.19.6.1.6;Bemerkung;927
1.19.6.2;18.6.2 Auf Ansichtsänderungen reagieren;927
1.19.6.2.1;Oberfläche & Quellcode MainPage;927
1.19.6.2.2;Oberfläche & Quellcode BlankPage1;928
1.19.6.2.3;Oberfläche der beiden Frame-Seiten;929
1.19.6.2.4;Oberfläche & Quellcode BasicPage2;930
1.19.7;18.7 Tipps & Tricks;931
1.19.7.1;18.7.1 Symbole für WinRT-Oberflächen finden;931
1.19.7.2;18.7.2 Wie werde ich das Grufti-Layout schnell los?;932
1.20;19 Die wichtigsten Controls;934
1.20.1;19.1 Einfache WinRT-Controls;934
1.20.1.1;19.1.1 TextBlock, RichTextBlock;934
1.20.1.2;19.1.2 Button, HyperlinkButton, RepeatButton;937
1.20.1.3;19.1.3 CheckBox, RadioButton, ToggleButton, ToggleSwitch;939
1.20.1.4;19.1.4 TextBox, PasswordBox, RichEditBox;940
1.20.1.5;19.1.5 Image;944
1.20.1.6;19.1.6 ScrollBar, Slider, ProgressBar, ProgressRing;946
1.20.1.7;19.1.7 Border, Ellipse, Rectangle;947
1.20.2;19.2 Layout-Controls;948
1.20.2.1;19.2.1 Canvas;948
1.20.2.2;19.2.2 StackPanel;949
1.20.2.3;19.2.3 ScrollViewer;949
1.20.2.4;19.2.4 Grid;950
1.20.2.5;19.2.5 VariableSizedWrapGrid;951
1.20.3;19.3 Listendarstellungen;952
1.20.3.1;19.3.1 ComboBox, ListBox;952
1.20.3.2;19.3.2 ListView;956
1.20.3.3;19.3.3 GridView;957
1.20.3.4;19.3.4 FlipView;960
1.20.4;19.4 Sonstige Controls;962
1.20.4.1;19.4.1 CaptureElement;962
1.20.4.2;19.4.2 MediaElement;963
1.20.4.3;19.4.3 Frame;965
1.20.4.4;19.4.4 WebView;965
1.20.4.5;19.4.5 ToolTip;966
1.20.5;19.5 Praxisbeispiele;968
1.20.5.1;19.5.1 Einen StringFormat-Konverter implementieren;968
1.20.5.1.1;Quellcode Klasse StringFormatConverter;968
1.20.5.1.2;Verwendung des Konverters;969
1.20.5.1.3;Test;970
1.20.5.2;19.5.2 Besonderheiten der TextBox kennen lernen;970
1.20.5.2.1;Virtuelle Tastatur;970
1.20.5.2.2;Tasteneingaben validieren/filtern;972
1.20.5.3;19.5.3 Daten in der GridView gruppieren;973
1.20.5.3.1;Oberfläche;973
1.20.5.3.2;Quelltext;975
1.20.5.3.3;Test;975
1.20.5.3.4;Bemerkung;976
1.20.5.4;19.5.4 Das SemanticZoom-Control verwenden;978
1.20.5.4.1;Oberflächen;979
1.20.5.4.2;Quellcode;981
1.20.5.4.3;Test;981
1.20.5.5;19.5.5 Die CollectionViewSource verwenden;982
1.20.5.5.1;Oberfläche;983
1.20.5.5.2;Quelltext;984
1.20.5.5.3;Test;985
1.20.5.6;19.5.6 Zusammenspiel ListBox/AppBar;986
1.20.5.6.1;Oberfläche;986
1.20.5.6.2;Quelltext;987
1.20.5.6.3;Test;989
1.20.5.7;19.5.7 Musikwiedergabe im Hintergrund realisieren;989
1.20.5.7.1;Oberfläche;989
1.20.5.7.2;Quelltext;991
1.20.5.7.3;Test;993
1.20.5.7.4;Bemerkung;993
1.21;20 Apps im Detail;994
1.21.1;20.1 Ein Windows Store App-Projekt im Detail;994
1.21.1.1;20.1.1 Contracts und Extensions;995
1.21.1.2;20.1.2 AssemblyInfo.cs;996
1.21.1.3;20.1.3 Verweise;997
1.21.1.4;20.1.4 App.xaml und App.xaml.cs;998
1.21.1.5;20.1.5 Package.appxmanifest;999
1.21.1.5.1;Anwendungsbenutzeroberfläche;999
1.21.1.5.2;Funktionen;1000
1.21.1.5.3;Deklarationen;1002
1.21.1.5.4;Verpacken;1003
1.21.1.6;20.1.6 Application1_TemporaryKey.pfx;1003
1.21.1.7;20.1.7 MainPage.xaml & MainPage.xaml.cs;1003
1.21.1.8;20.1.8 Datentyp-Konverter/Hilfsklassen;1004
1.21.1.8.1;BooleanToVisibilityConverter.cs;1004
1.21.1.8.2;BooleanNegationConverter.cs;1004
1.21.1.8.3;RichTextColumns.cs;1005
1.21.1.8.4;SuspensionManager.cs;1005
1.21.1.8.5;LayoutAwarePage.cs;1006
1.21.1.9;20.1.9 StandardStyles.xaml;1006
1.21.1.10;20.1.10 Assets/Symbole;1007
1.21.1.11;20.1.11 Nach dem Kompilieren;1008
1.21.2;20.2 Der Lebenszyklus einer WinRT-App;1008
1.21.2.1;20.2.1 Möglichkeiten der Aktivierung von Apps;1010
1.21.2.2;20.2.2 Der Splash Screen;1012
1.21.2.3;20.2.3 Suspending;1012
1.21.2.4;20.2.4 Resuming;1013
1.21.2.5;20.2.5 Beenden von Apps;1014
1.21.2.6;20.2.6 Die Ausnahmen von der Regel;1015
1.21.2.7;20.2.7 Debuggen;1015
1.21.2.7.1;Verwendung einer Protokolldatei;1015
1.21.2.7.2;Debuggen mit DebugView;1017
1.21.2.7.3;Steuern der Programmzustände über Visual Studio;1017
1.21.2.7.4;Debuggen von Contract-aktivierten Apps;1018
1.21.3;20.3 Daten speichern und laden;1019
1.21.3.1;20.3.1 Grundsätzliche Überlegungen;1019
1.21.3.2;20.3.2 Worauf und wie kann ich zugreifen?;1019
1.21.3.3;20.3.3 Das AppData-Verzeichnis;1019
1.21.3.3.1;LocalFolder;1020
1.21.3.3.2;RoamingFolder;1021
1.21.3.3.3;TemporaryFolder;1021
1.21.3.4;20.3.4 Das Anwendungs-Installationsverzeichnis;1022
1.21.3.5;20.3.5 Das Downloads-Verzeichnis;1023
1.21.3.6;20.3.6 Sonstige Verzeichnisse;1024
1.21.3.7;20.3.7 Anwendungsdaten lokal sichern und laden;1024
1.21.3.8;20.3.8 Daten in der Cloud ablegen/laden (Roaming);1026
1.21.3.9;20.3.9 Aufräumen;1029
1.21.3.10;20.3.10 Sensible Informationen speichern;1029
1.21.4;20.4 Praxisbeispiele;1031
1.21.4.1;20.4.1 Unterstützung für den Search-Contract bieten;1031
1.21.4.1.1;Oberfläche;1032
1.21.4.1.2;Quelltext (App.xaml.cs);1033
1.21.4.1.3;Quelltext (SearchPage.xaml.cs);1036
1.21.4.1.4;Quelltext (DetailPage.xaml.cs);1036
1.21.4.1.5;Test;1037
1.21.4.1.6;Erweiterungen;1038
1.21.4.2;20.4.2 Die Auto-Play-Funktion unterstützen;1038
1.21.4.2.1;Anpassen Package.appxmanifest;1038
1.21.4.2.2;Quelltext;1040
1.21.4.2.3;Oberfläche;1041
1.21.4.2.4;Test;1041
1.21.4.3;20.4.3 Einen zusätzlichen Splash Screen einsetzen;1042
1.21.4.3.1;Oberfläche (ErsatzSplashscreen.xaml);1042
1.21.4.3.2;Quellcode (App.xaml.cs);1043
1.21.4.3.3;Quellcode (ErsatzSplashScreen.xaml.cs);1043
1.21.4.3.4;Test;1044
1.21.4.4;20.4.4 Eine Dateiverknüpfung erstellen;1044
1.21.4.4.1;Oberfläche;1044
1.21.4.4.2;Quelltext (App.xaml.cs);1045
1.21.4.4.3;Quelltext (BasicPage1.xaml.cs);1046
1.21.4.4.4;Test;1046
1.21.4.4.5;Ergänzungen;1048
1.22;21 WinRT-Techniken;1050
1.22.1;21.1 Arbeiten mit Dateien/Verzeichnissen;1050
1.22.1.1;21.1.1 Verzeichnisinformationen auflisten;1050
1.22.1.2;21.1.2 Unterverzeichnisse auflisten;1053
1.22.1.3;21.1.3 Verzeichnisse erstellen/löschen;1054
1.22.1.4;21.1.4 Dateien auflisten;1056
1.22.1.5;21.1.5 Dateien erstellen/schreiben/lesen;1058
1.22.1.5.1;Datei erstellen;1058
1.22.1.5.2;Schreibzugriff mit FileIO;1059
1.22.1.5.3;Schreibzugriff mit StreamWriter;1060
1.22.1.5.4;Lesezugriff mit FileIO;1061
1.22.1.5.5;Lesezugriff mit StreamReader;1061
1.22.1.6;21.1.6 Dateien kopieren/umbenennen/löschen;1062
1.22.1.7;21.1.7 Verwenden der Dateipicker;1063
1.22.1.7.1;FileOpenPicker;1064
1.22.1.7.2;FileSavePicker;1067
1.22.1.7.3;FolderPicker;1068
1.22.1.8;21.1.8 StorageFile-/StorageFolder-Objekte speichern;1070
1.22.1.9;21.1.9 Verwenden der Most Recently Used-Liste;1072
1.22.2;21.2 Datenaustausch zwischen Apps/Programmen;1073
1.22.2.1;21.2.1 Zwischenablage;1074
1.22.2.1.1;Texte kopieren und einfügen;1075
1.22.2.1.2;Bilder kopieren und einfügen;1076
1.22.2.1.3;Dateien kopieren/verschieben und abrufen;1077
1.22.2.1.4;Zwischenablage überwachen;1079
1.22.2.2;21.2.2 Teilen von Inhalten;1081
1.22.2.2.1;Funktion "Teilen" programmgesteuert aufrufen;1083
1.22.2.2.2;Sie möchten temporär keine Daten teilen;1084
1.22.2.3;21.2.3 Eine App als Freigabeziel verwenden;1084
1.22.2.4;21.2.4 Zugriff auf die Kontaktliste;1085
1.22.3;21.3 Spezielle Oberflächenelemente;1087
1.22.3.1;21.3.1 MessageDialog;1087
1.22.3.1.1;Dialog mit Auswahl;1087
1.22.3.1.2;Alternativen beim Auswerten der Tasten;1089
1.22.3.1.3;Ergänzungen;1090
1.22.3.2;21.3.2 Popup-Benachrichtigungen;1090
1.22.3.2.1;Wann sollten Sie Popup-Benachrichtigungen einsetzen?;1091
1.22.3.2.2;Was können Sie alles parametrieren?;1093
1.22.3.2.3;Und wie funktioniert das alles?;1093
1.22.3.2.4;Unser ToastNotification-"Bäckerei";1094
1.22.3.2.5;Prüfen auf Funktionsfähigkeit;1098
1.22.3.3;21.3.3 PopUp/Flyouts;1098
1.22.3.4;21.3.4 Das PopupMenu einsetzen;1102
1.22.3.5;21.3.5 Eine AppBar verwenden;1104
1.22.4;21.4 Datenbanken und Windows 8-Apps;1109
1.22.4.1;21.4.1 Der Retter in der Not: SQLite!;1109
1.22.4.2;21.4.2 Verwendung/Kurzüberblick;1109
1.22.4.2.1;Was eigentlich ist SQLite?;1109
1.22.4.2.2;Vorteile;1110
1.22.4.2.3;Nachteile;1110
1.22.4.3;21.4.3 Installation;1111
1.22.4.4;21.4.4 Wie kommen wir zu einer neuen Datenbank?;1113
1.22.4.5;21.4.5 Wie werden die Daten manipuliert?;1117
1.22.5;21.5 Vertrieb der App;1119
1.22.5.1;21.5.1 Verpacken der App;1119
1.22.5.2;21.5.2 Windows App Certification Kit;1121
1.22.5.3;21.5.3 App-Installation per Skript;1123
1.22.6;21.6 Ein Blick auf die App-Schwachstellen;1124
1.22.6.1;21.6.1 Quellcodes im Installationsverzeichnis;1124
1.22.6.2;21.6.2 Zugriff auf den App-Datenordner;1126
1.22.7;21.7 Praxisbeispiele;1126
1.22.7.1;21.7.1 Ein Verzeichnis auf Änderungen überwachen;1126
1.22.7.1.1;Oberfläche;1127
1.22.7.1.2;Quellcode;1127
1.22.7.1.3;Test;1128
1.22.7.2;21.7.2 Eine App als Freigabeziel verwenden;1129
1.22.7.2.1;Oberfläche;1129
1.22.7.2.2;Registrieren der App als Freigabeziel;1130
1.22.7.2.3;Quellcode (App.xaml.cs);1131
1.22.7.2.4;Quellcode (InsertPage.xaml.cs);1131
1.22.7.2.5;Test;1133
1.22.7.3;21.7.3 ToastNotifications einfach erzeugen;1134
1.22.7.3.1;Quellcode;1135
1.22.7.3.2;Test;1139
1.23;Index;1150
2;Ergänzungsband;1170
2.1;Zweites Vorwort;1194
2.2;22 XML in Theorie und Praxis;1198
2.2.1;22.1 XML – etwas Theorie;1198
2.2.1.1;22.1.1 Übersicht;1198
2.2.1.2;22.1.2 Der XML-Grundaufbau;1201
2.2.1.3;22.1.3 Wohlgeformte Dokumente;1202
2.2.1.4;22.1.4 Processing Instructions (PI);1205
2.2.1.5;22.1.5 Elemente und Attribute;1205
2.2.1.6;22.1.6 Verwendbare Zeichensätze;1207
2.2.2;22.2 XSD-Schemas;1209
2.2.2.1;22.2.1 XSD-Schemas und ADO.NET;1209
2.2.2.2;22.2.2 XML-Schemas in Visual Studio analysieren;1211
2.2.2.2.1;Der XML-Schema-Explorer;1212
2.2.2.2.2;Ausgangsansicht des XML-Schema-Designers;1212
2.2.2.2.3;Inhaltsmodellansicht;1213
2.2.2.2.4;XML-Editor;1214
2.2.2.3;22.2.3 XML-Datei mit XSD-Schema erzeugen;1214
2.2.2.4;22.2.4 XSD-Schema aus einer XML-Datei erzeugen;1215
2.2.3;22.3 Verwendung des DOM unter .NET;1216
2.2.3.1;22.3.1 Übersicht;1216
2.2.3.2;22.3.2 DOM-Integration in C#;1217
2.2.3.3;22.3.3 Laden von Dokumenten;1217
2.2.3.4;22.3.4 Erzeugen von XML-Dokumenten;1218
2.2.3.5;22.3.5 Auslesen von XML-Dateien;1220
2.2.3.6;22.3.6 Direktzugriff auf einzelne Elemente;1222
2.2.3.7;22.3.7 Einfügen von Informationen;1222
2.2.3.8;22.3.8 Suchen in den Baumzweigen;1225
2.2.4;22.4 XML-Verarbeitung mit LINQ to XML;1228
2.2.4.1;22.4.1 Die LINQ to XML-API;1228
2.2.4.2;22.4.2 Neue XML-Dokumente erzeugen;1230
2.2.4.3;22.4.3 Laden und Sichern von XML-Dokumenten;1232
2.2.4.4;22.4.4 Navigieren in XML-Daten;1233
2.2.4.5;22.4.5 Auswählen und Filtern;1235
2.2.4.6;22.4.6 Manipulieren der XML-Daten;1235
2.2.4.6.1;Editieren der Daten;1236
2.2.4.6.2;Hinzufügen von Daten;1236
2.2.4.6.3;Löschen;1237
2.2.4.7;22.4.7 XML-Dokumente transformieren;1237
2.2.5;22.5 Weitere Möglichkeiten der XML-Verarbeitung;1240
2.2.5.1;22.5.1 Die relationale Sicht mit XmlDataDocument;1240
2.2.5.1.1;Laden von XML-Daten;1240
2.2.5.1.2;Verwendung des DataSets;1241
2.2.5.2;22.5.2 XML-Daten aus Objektstrukturen erzeugen;1243
2.2.5.3;22.5.3 Schnelles Suchen in XML-Daten mit XPathNavigator;1246
2.2.5.4;22.5.4 Schnelles Auslesen von XML-Daten mit XmlReader;1249
2.2.5.5;22.5.5 Erzeugen von XML-Daten mit XmlWriter;1251
2.2.5.6;22.5.6 XML transformieren mit XSLT;1253
2.2.6;22.6 Praxisbeispiele;1255
2.2.6.1;22.6.1 Mit dem DOM in XML-Dokumenten navigieren;1255
2.2.6.1.1;Oberfläche;1255
2.2.6.1.2;Quelltext;1256
2.2.6.1.3;Test;1257
2.2.6.1.4;Bemerkungen;1258
2.2.6.2;22.6.2 XML-Daten in eine TreeView einlesen;1258
2.2.6.2.1;Oberfläche;1258
2.2.6.2.2;Quelltext;1258
2.2.6.2.3;Test;1260
2.2.6.2.4;Ergänzung;1260
2.3;23 Einführung in ADO.NET;1262
2.3.1;23.1 Eine kleine Übersicht;1262
2.3.1.1;23.1.1 Die ADO.NET-Klassenhierarchie;1262
2.3.1.2;23.1.2 Die Klassen der Datenprovider;1263
2.3.1.2.1;.NET-Datenprovider;1264
2.3.1.2.2;Weitere Datenprovider;1264
2.3.1.2.3;Anzeige der installierten Datenprovider;1265
2.3.1.3;23.1.3 Das Zusammenspiel der ADO.NET-Klassen;1266
2.3.2;23.2 Das Connection-Objekt;1267
2.3.2.1;23.2.1 Allgemeiner Aufbau;1267
2.3.2.2;23.2.2 OleDbConnection;1267
2.3.2.2.1;Parameter für OleDb-Zugriff;1267
2.3.2.2.2;OleDb-Provider für Access Datenbank;1268
2.3.2.3;23.2.3 Schließen einer Verbindung;1269
2.3.2.4;23.2.4 Eigenschaften des Connection-Objekts;1269
2.3.2.4.1;ConnectionString-Eigenschaft;1269
2.3.2.4.2;Database- und DataSource-Eigenschaft;1270
2.3.2.4.3;Provider-Eigenschaft;1270
2.3.2.4.4;ServerVersion-Eigenschaft;1270
2.3.2.4.5;ConnectionTimeout-Eigenschaft;1271
2.3.2.4.6;State-Eigenschaft;1271
2.3.2.5;23.2.5 Methoden des Connection-Objekts;1271
2.3.2.5.1;Open- und Close-Methode;1271
2.3.2.5.2;ChangeDatabase-Methode;1272
2.3.2.5.3;CreateCommand-Methode;1272
2.3.2.6;23.2.6 Der ConnectionStringBuilder;1272
2.3.3;23.3 Das Command-Objekt;1272
2.3.3.1;23.3.1 Erzeugen und Anwenden eines Command-Objekts;1273
2.3.3.2;23.3.2 Erzeugen mittels CreateCommand-Methode;1273
2.3.3.3;23.3.3 Eigenschaften des Command-Objekts;1274
2.3.3.3.1;Connection- und CommandText-Eigenschaft;1274
2.3.3.3.2;CommandTimeout-Eigenschaft;1274
2.3.3.3.3;CommandType-Eigenschaft;1275
2.3.3.4;23.3.4 Methoden des Command-Objekts;1276
2.3.3.4.1;ExecuteNonQuery-Methode;1276
2.3.3.4.2;ExecuteReader-Methode;1276
2.3.3.4.3;ExecuteScalar-Methode;1276
2.3.3.5;23.3.5 Freigabe von Connection- und Command-Objekten;1277
2.3.4;23.4 Parameter-Objekte;1278
2.3.4.1;23.4.1 Erzeugen und Anwenden eines Parameter-Objekts;1278
2.3.4.2;23.4.2 Eigenschaften des Parameter-Objekts;1279
2.3.4.2.1;ParameterName- und Value-Eigenschaft;1279
2.3.4.2.2;DbType, OleDbType und SqlDbType-Eigenschaft;1279
2.3.4.2.3;Direction-Eigenschaft;1279
2.3.5;23.5 Das CommandBuilder-Objekt;1280
2.3.5.1;23.5.1 Erzeugen;1280
2.3.5.2;23.5.2 Anwenden;1280
2.3.6;23.6 Das DataReader-Objekt;1281
2.3.6.1;23.6.1 DataReader erzeugen;1281
2.3.6.2;23.6.2 Daten lesen;1282
2.3.6.3;23.6.3 Eigenschaften des DataReaders;1283
2.3.6.3.1;Item-Eigenschaft;1283
2.3.6.3.2;FieldCount-Eigenschaft;1283
2.3.6.3.3;IsClosed-Eigenschaft;1283
2.3.6.4;23.6.4 Methoden des DataReaders;1283
2.3.6.4.1;Read-Methode;1283
2.3.6.4.2;GetValue- und GetValues-Methode;1283
2.3.6.4.3;GetOrdinal- und ähnliche Methoden;1283
2.3.6.4.4;Bemerkungen;1283
2.3.7;23.7 Das DataAdapter-Objekt;1284
2.3.7.1;23.7.1 DataAdapter erzeugen;1284
2.3.7.1.1;Konstruktor mit SELECT-String und Connection-Objekt;1284
2.3.7.1.2;Konstruktor mit SelectCommand-Objekt;1285
2.3.7.2;23.7.2 Command-Eigenschaften;1285
2.3.7.3;23.7.3 Fill-Methode;1286
2.3.7.3.1;Begrenzen der Datenmenge;1286
2.3.7.4;23.7.4 Update-Methode;1287
2.3.8;23.8 Praxisbeispiele;1288
2.3.8.1;23.8.1 Wichtige ADO.NET-Objekte im Einsatz;1288
2.3.8.1.1;Oberfläche;1288
2.3.8.1.2;Quellcode;1288
2.3.8.1.3;Test;1289
2.3.8.1.4;Bemerkungen;1289
2.3.8.2;23.8.2 Eine Aktionsabfrage ausführen;1289
2.3.8.2.1;Oberfläche;1290
2.3.8.2.2;Quellcode;1290
2.3.8.2.3;Test;1291
2.3.8.2.4;Bemerkungen;1291
2.3.8.3;23.8.3 Eine Auswahlabfrage aufrufen;1292
2.3.8.3.1;Oberfläche;1292
2.3.8.3.2;Quellcode;1292
2.3.8.3.3;Test;1294
2.3.8.4;23.8.4 Die Datenbank aktualisieren;1294
2.3.8.4.1;Oberfläche;1295
2.3.8.4.2;Quellcode (Command-Objekte selbst programmiert);1295
2.3.8.4.3;Test;1296
2.3.8.4.4;Bemerkungen;1297
2.4;24 Das DataSet;1298
2.4.1;24.1 Grundlegende Features des DataSets;1298
2.4.1.1;24.1.1 Die Objekthierarchie;1299
2.4.1.2;24.1.2 Die wichtigsten Klassen;1299
2.4.1.3;24.1.3 Erzeugen eines DataSets;1300
2.4.1.3.1;Copy-Methode;1300
2.4.1.3.2;Clone-Methode;1301
2.4.1.3.3;GetChanges-/HasChanges-Methode;1301
2.4.2;24.2 Das DataTable-Objekt;1301
2.4.2.1;24.2.1 DataTable erzeugen;1302
2.4.2.2;24.2.2 Spalten hinzufügen;1302
2.4.2.3;24.2.3 Zeilen zur DataTable hinzufügen;1303
2.4.2.3.1;NewRow-Methode;1303
2.4.2.3.2;ImportRow-Methode;1303
2.4.2.4;24.2.4 Auf den Inhalt einer DataTable zugreifen;1304
2.4.2.4.1;Columns- und Rows-Eigenschaften;1304
2.4.2.4.2;TableName- und ColumnName-Eigenschaften;1304
2.4.2.4.3;Find-Methode;1305
2.4.2.4.4;Zeilen löschen;1305
2.4.3;24.3 Die DataView;1306
2.4.3.1;24.3.1 Erzeugen einer DataView;1306
2.4.3.2;24.3.2 Sortieren und Filtern von Datensätzen;1306
2.4.3.3;24.3.3 Suchen von Datensätzen;1307
2.4.4;24.4 Typisierte DataSets;1307
2.4.4.1;24.4.1 Ein typisiertes DataSet erzeugen;1308
2.4.4.2;24.4.2 Das Konzept der Datenquellen;1309
2.4.4.3;24.4.3 Typisierte DataSets und TableAdapter;1310
2.4.4.3.1;Warum sollte man ein typisiertes DataSet einsetzen?;1310
2.4.4.3.2;Der TableAdapter;1311
2.4.5;24.5 Die Qual der Wahl;1311
2.4.5.1;24.5.1 DataReader – der schnelle Lesezugriff;1312
2.4.5.2;24.5.2 DataSet – die Datenbank im Hauptspeicher;1312
2.4.5.2.1;Typisiertes versus untypisiertes DataSet;1312
2.4.5.3;24.5.3 Objektrelationales Mapping – die Zukunft?;1313
2.4.5.3.1;LINQ to SQL/LINQ to Entities;1313
2.4.6;24.6 Praxisbeispiele;1314
2.4.6.1;24.6.1 In der DataView sortieren und filtern;1314
2.4.6.1.1;Oberfläche;1314
2.4.6.1.2;Quellcode;1314
2.4.6.1.3;Test;1315
2.4.6.1.4;Bemerkungen;1316
2.4.6.2;24.6.2 Suche nach Datensätzen;1316
2.4.6.2.1;Oberfläche;1316
2.4.6.2.2;Quellcode;1316
2.4.6.2.3;Test;1317
2.4.6.3;24.6.3 Ein DataSet in einen XML-String serialisieren;1317
2.4.6.3.1;Konvertierungsmethoden;1318
2.4.6.3.2;Testoberfläche Form1;1319
2.4.6.3.3;Quellcode Form1;1319
2.4.6.3.4;Erzeugen eines untypisierten DataSets als Testobjekt;1320
2.4.6.3.5;Test;1321
2.4.6.4;24.6.4 Untypisiertes in ein typisiertes DataSet konvertieren;1322
2.4.6.4.1;Konvertierungscode;1323
2.4.6.4.2;Normales DataSet erzeugen;1323
2.4.6.4.3;Typisiertes DataSet erzeugen;1324
2.4.6.4.4;Oberfläche;1325
2.4.6.4.5;Test;1326
2.4.6.4.6;Bemerkungen;1327
2.4.6.5;24.6.5 Eine LINQ to SQL-Abfrage ausführen;1327
2.4.6.5.1;Datenmodell per LINQ to SQL-Designer erzeugen;1327
2.4.6.5.2;Datenquelle hinzufügen;1328
2.4.6.5.3;Oberfläche;1329
2.4.6.5.4;Test;1330
2.4.6.5.5;Bemerkung;1330
2.5;25 OOP-Spezial;1332
2.5.1;25.1 Eine kleine Einführung in die UML;1332
2.5.1.1;25.1.1 Use Case-Diagramm;1332
2.5.1.2;25.1.2 Use Case-Dokumentation;1334
2.5.1.2.1;USE CASE: Inbetriebnahme des Autos;1334
2.5.1.2.2;USE CASE: Versuchter Diebstahl des Autos;1335
2.5.1.3;25.1.3 Objekte identifizieren;1335
2.5.1.4;25.1.4 Statisches Modell;1336
2.5.1.5;25.1.5 Beziehungen zwischen den Klassen;1337
2.5.1.6;25.1.6 Dynamisches Modell;1337
2.5.1.6.1;Relevante Zustände identifizieren;1337
2.5.1.6.2;Zustandsüberführungsdiagramm;1338
2.5.1.7;25.1.7 Implementierung;1338
2.5.1.7.1;Klasse CSchlüssel;1339
2.5.1.7.2;Klasse CSchloss;1340
2.5.1.7.3;Klasse CAuto;1340
2.5.1.8;25.1.8 Test-Client;1342
2.5.1.8.1;Test;1344
2.5.1.8.2;Bemerkungen;1345
2.5.2;25.2 Der Klassen-Designer;1345
2.5.2.1;25.2.1 Ein neues Klassendiagramm erzeugen;1346
2.5.2.2;25.2.2 Werkzeugkasten;1347
2.5.2.3;25.2.3 Enumeration;1348
2.5.2.4;25.2.4 Klasse;1350
2.5.2.4.1;Klassendetails-Fenster;1351
2.5.2.5;25.2.5 Struktur;1352
2.5.2.6;25.2.6 Abstrakte Klasse;1352
2.5.2.7;25.2.7 Schnittstelle;1354
2.5.2.8;25.2.8 Delegate;1356
2.5.2.9;25.2.9 Zuordnung;1358
2.5.2.10;25.2.10 Vererbung;1359
2.5.2.11;25.2.11 Diagramme anpassen;1359
2.5.2.12;25.2.12 Wann lohnt sich der Klassen-Designer?;1360
2.5.3;25.3 Praxisbeispiele;1360
2.5.3.1;25.3.1 Implementierung einer Finite State Machine;1360
2.5.3.1.1;Zustandsüberführungsmatrix;1360
2.5.3.1.2;CAuto;1364
2.5.3.1.3;Clientcode;1365
2.5.3.1.4;Test;1366
2.5.3.2;25.3.2 Modellierung des Bestellsystems einer Firma;1366
2.5.3.2.1;Klassendiagramm;1366
2.5.3.2.2;Klasse CBestellung;1367
2.5.3.2.3;Klasse CPerson;1369
2.5.3.2.4;Klasse CKunde;1370
2.5.3.2.5;Klasse CFirma;1373
2.5.3.2.6;Klasse Form1;1374
2.5.3.2.7;Abschlusstest;1378
2.5.3.2.8;Bemerkungen;1378
2.6;26 Das Microsoft Event Pattern;1380
2.6.1;26.1 Einführung in Design Pattern;1380
2.6.2;26.2 Aufbau und Bedeutung des Observer Pattern;1381
2.6.2.1;26.2.1 Subjekt und Observer;1381
2.6.2.2;26.2.2 Sequenzdiagramme;1383
2.6.2.3;26.2.3 Die Registration-Sequenz;1383
2.6.2.4;26.2.4 Die Notification-Sequenz;1384
2.6.2.5;26.2.5 Die Unregistration-Sequenz;1384
2.6.2.6;26.2.6 Bedeutung der Sequenzen für das Geschäftsmodell;1385
2.6.2.7;26.2.7 Die Rolle des Containers;1385
2.6.3;26.3 Implementieren mit Interfaces und Callbacks;1386
2.6.3.1;26.3.1 Übersicht und Klassendiagramm;1386
2.6.3.2;26.3.2 Die Schnittstellen IObserver und IObservable;1388
2.6.3.3;26.3.3 Die Abstrakte Klasse Subject;1388
2.6.3.4;26.3.4 Observer1;1389
2.6.3.5;26.3.5 Observer2;1390
2.6.3.6;26.3.6 Model;1391
2.6.3.7;26.3.7 Form1;1392
2.6.3.8;26.3.8 Ein zweites Klassendiagramm;1393
2.6.3.9;26.3.9 Testen;1394
2.6.4;26.4 Implementierung mit Delegates und Events;1395
2.6.4.1;26.4.1 Multicast-Events;1396
2.6.4.2;26.4.2 IObserver, IObservable und Subject;1396
2.6.4.3;26.4.3 Observer1 und Observer2;1397
2.6.4.4;26.4.4 Model;1397
2.6.4.5;26.4.5 Form1;1398
2.6.4.6;26.4.6 Test und Vergleich;1398
2.6.4.7;26.4.7 Klassendiagramm;1399
2.6.5;26.5 Implementierung des Microsoft Event Pattern;1400
2.6.5.1;26.5.1 Namensgebung für Ereignisse;1400
2.6.5.2;26.5.2 Namensgebung und Signatur der Delegates;1400
2.6.5.3;26.5.3 Hinzufügen einer das Ereignis auslösenden Methode;1401
2.6.5.3.1;Neue Klasse NumberChangedEventArgs;1401
2.6.5.4;26.5.4 Model;1402
2.6.5.5;26.5.5 Observer1;1403
2.6.5.6;26.5.6 Form1;1404
2.6.6;26.6 Test und Vergleich;1404
2.6.7;26.7 Klassendiagramm;1404
2.6.8;26.8 Implementierung eines Event Pattern;1405
2.6.9;26.9 Praxisbeispiel;1407
2.6.9.1;26.9.1 Objekte beobachten sich gegenseitig;1407
2.6.9.1.1;Oberfläche;1407
2.6.9.1.2;NumberChangedEventArgs und MaximumChangedEventArgs;1407
2.6.9.1.3;Model;1408
2.6.9.1.4;Observer1;1410
2.6.9.1.5;Observer2;1411
2.6.9.1.6;Form1;1412
2.6.9.1.7;Test und Vergleich;1414
2.6.9.1.8;Klassenzusammenstellung;1415
2.6.9.1.9;Klassendiagramm;1416
2.7;27 Verteilen von Anwendungen;1418
2.7.1;27.1 ClickOnce-Deployment;1419
2.7.1.1;27.1.1 Übersicht/Einschränkungen;1419
2.7.1.2;27.1.2 Die Vorgehensweise;1420
2.7.1.3;27.1.3 Ort der Veröffentlichung;1420
2.7.1.4;27.1.4 Anwendungsdateien;1421
2.7.1.5;27.1.5 Erforderliche Komponenten;1421
2.7.1.6;27.1.6 Aktualisierungen;1422
2.7.1.7;27.1.7 Veröffentlichungsoptionen;1423
2.7.1.8;27.1.8 Veröffentlichen;1424
2.7.1.9;27.1.9 Verzeichnisstruktur;1424
2.7.1.10;27.1.10 Der Webpublishing-Assistent;1426
2.7.1.11;27.1.11 Neue Versionen erstellen;1427
2.7.2;27.2 InstallShield;1427
2.7.2.1;27.2.1 Installation;1427
2.7.2.2;27.2.2 Aktivieren;1428
2.7.2.3;27.2.3 Ein neues Setup-Projekt;1428
2.7.2.3.1;Anwendungseinstellungen;1429
2.7.2.3.2;Installationsbedingungen;1430
2.7.2.3.3;Optionales Setup;1431
2.7.2.3.4;Anwendungsdateien;1431
2.7.2.3.5;Startmenü und Verknüpfungen;1432
2.7.2.3.6;Registrierungseinträge;1432
2.7.2.3.7;Setup-Dialoge/Erscheinungsbild;1433
2.7.2.3.8;Installationsdateien;1435
2.7.2.4;27.2.4 Finaler Test;1436
2.8;28 Weitere Techniken;1438
2.8.1;28.1 Zugriff auf die Zwischenablage;1438
2.8.1.1;28.1.1 Das Clipboard-Objekt;1438
2.8.1.1.1;Kopieren;1439
2.8.1.1.2;Einfügen;1439
2.8.1.2;28.1.2 Zwischenablage-Funktionen für Textboxen;1440
2.8.2;28.2 Arbeiten mit der Registry;1440
2.8.2.1;28.2.1 Allgemeines;1441
2.8.2.2;28.2.2 Registry-Unterstützung in .NET;1443
2.8.3;28.3 .NET-Reflection;1444
2.8.3.1;28.3.1 Übersicht;1444
2.8.3.2;28.3.2 Assembly laden;1444
2.8.3.3;28.3.3 Mittels GetType und Type Informationen sammeln;1445
2.8.3.4;28.3.4 Dynamisches Laden von Assemblies;1447
2.8.3.4.1;Beispiel;1447
2.8.4;28.4 Das SerialPort-Control;1450
2.8.4.1;28.4.1 Übersicht;1450
2.8.4.1.1;Wichtige Eigenschaften;1450
2.8.4.1.2;Wichtige Methoden;1451
2.8.4.1.3;Wichtige Ereignisse;1451
2.8.4.2;28.4.2 Einführungsbeispiele;1451
2.8.4.2.1;SerialPortTalker;1451
2.8.4.2.2;SerialPortListener;1452
2.8.4.2.3;Test;1453
2.8.4.3;28.4.3 Thread-Probleme bei Windows Forms-Anwendungen;1454
2.8.4.4;28.4.4 Ein einfaches Terminalprogramm;1457
2.8.4.4.1;Bedienoberfläche;1458
2.8.4.4.2;Quellcode;1458
2.8.4.4.3;Test;1461
2.8.4.4.4;Bemerkungen zur Verarbeitung von Messdaten;1461
2.8.5;28.5 Praxisbeispiele;1462
2.8.5.1;28.5.1 Zugriff auf die Registry;1462
2.8.5.1.1;Oberfläche;1462
2.8.5.1.2;Quelltext;1462
2.8.5.1.3;Test;1464
2.8.5.2;28.5.2 Dateiverknüpfungen erzeugen;1464
2.8.5.3;28.5.3 Betrachter für Manifestressourcen;1466
2.8.5.3.1;Oberfläche;1466
2.8.5.3.2;Quellcode Form1;1466
2.8.5.3.3;Test;1468
2.8.5.4;28.5.4 Ressourcen mit Reflection auslesen;1469
2.9;29 Konsolenanwendungen;1472
2.9.1;29.1 Grundaufbau/Konzepte;1472
2.9.1.1;29.1.1 Unser Hauptprogramm – Program.cs;1473
2.9.1.1.1;static void Main();1474
2.9.1.2;29.1.2 Rückgabe eines Fehlerstatus;1474
2.9.1.3;29.1.3 Parameterübergabe;1475
2.9.1.4;29.1.4 Zugriff auf die Umgebungsvariablen;1476
2.9.2;29.2 Die Kommandozentrale: System.Console;1477
2.9.2.1;29.2.1 Eigenschaften;1478
2.9.2.2;29.2.2 Methoden/Ereignisse;1478
2.9.2.3;29.2.3 Textausgaben;1479
2.9.2.4;29.2.4 Farbangaben;1480
2.9.2.5;29.2.5 Tastaturabfragen;1481
2.9.2.5.1;Modifiers-Eigenschaft und ConsoleModifiers-Enumeration;1482
2.9.2.6;29.2.6 Arbeiten mit Streamdaten;1482
2.9.3;29.3 Praxisbeispiel;1484
2.9.3.1;29.3.1 Farbige Konsolenanwendung;1484
2.9.3.2;29.3.2 Weitere Hinweise und Beispiele;1486
2.10;30 Windows Forms-Anwendungen;1490
2.10.1;30.1 Grundaufbau/Konzepte;1490
2.10.1.1;30.1.1 Das Hauptprogramm – Program.cs;1491
2.10.1.1.1;static void Main();1492
2.10.1.1.2;Application.EnableVisualStyles;1493
2.10.1.1.3;Application.SetCompatibleTextRenderingDefault(false);1493
2.10.1.1.4;Application.Run(new Form1());1493
2.10.1.2;30.1.2 Die Oberflächendefinition – Form1.Designer.cs;1495
2.10.1.3;30.1.3 Die Spielwiese des Programmierers – Form1.cs;1496
2.10.1.4;30.1.4 Die Datei AssemblyInfo.cs;1497
2.10.1.5;30.1.5 Resources.resx/Resources.Designer.cs;1498
2.10.1.6;30.1.6 Settings.settings/Settings.Designer.cs;1499
2.10.1.7;30.1.7 Settings.cs;1500
2.10.2;30.2 Ein Blick auf die Application-Klasse;1501
2.10.2.1;30.2.1 Eigenschaften;1501
2.10.2.2;30.2.2 Methoden;1502
2.10.2.3;30.2.3 Ereignisse;1504
2.10.3;30.3 Allgemeine Eigenschaften von Komponenten;1504
2.10.3.1;30.3.1 Font;1505
2.10.3.2;30.3.2 Handle;1507
2.10.3.3;30.3.3 Tag;1508
2.10.3.4;30.3.4 Modifiers;1508
2.10.4;30.4 Allgemeine Ereignisse von Komponenten;1509
2.10.4.1;30.4.1 Die Eventhandler-Argumente;1509
2.10.4.2;30.4.2 Sender;1509
2.10.4.3;30.4.3 Der Parameter e;1511
2.10.4.4;30.4.4 Mausereignisse;1511
2.10.4.4.1;Tastaturereignisse;1512
2.10.4.5;30.4.5 KeyPreview;1513
2.10.4.6;30.4.6 Weitere Ereignisse;1514
2.10.4.7;30.4.7 Validätsprüfungen;1514
2.10.4.8;30.4.8 SendKeys;1515
2.10.5;30.5 Allgemeine Methoden von Komponenten;1516
2.11;31 Windows Forms-Formulare;1518
2.11.1;31.1 Übersicht;1518
2.11.1.1;31.1.1 Wichtige Eigenschaften des Form-Objekts;1519
2.11.1.1.1;Controls-Auflistung;1520
2.11.1.2;31.1.2 Wichtige Ereignisse des Form-Objekts;1521
2.11.1.3;31.1.3 Wichtige Methoden des Form-Objekts;1522
2.11.2;31.2 Praktische Aufgabenstellungen;1523
2.11.2.1;31.2.1 Fenster anzeigen;1523
2.11.2.1.1;Nichtmodale Fenster;1524
2.11.2.1.2;Modale Fenster (Dialoge);1524
2.11.2.2;31.2.2 Splash Screens beim Anwendungsstart anzeigen;1526
2.11.2.3;31.2.3 Eine Sicherheitsabfrage vor dem Schließen anzeigen;1529
2.11.2.4;31.2.4 Ein Formular durchsichtig machen;1529
2.11.2.5;31.2.5 Die Tabulatorreihenfolge festlegen;1530
2.11.2.6;31.2.6 Ausrichten von Komponenten im Formular;1531
2.11.2.6.1;Dock;1531
2.11.2.6.2;Anchor;1532
2.11.2.7;31.2.7 Spezielle Panels für flexible Layouts;1533
2.11.2.7.1;SplitContainer;1534
2.11.2.7.2;FlowLayoutPanel;1534
2.11.2.7.3;TableLayoutPanel;1534
2.11.2.8;31.2.8 Menüs erzeugen;1535
2.11.2.8.1;MenuStrip;1535
2.11.2.8.2;ContextMenuStrip;1537
2.11.2.8.3;Weitere Eigenschaften von Menüeinträgen;1538
2.11.3;31.3 MDI-Anwendungen;1539
2.11.3.1;31.3.1 "Falsche" MDI-Fenster bzw. Verwenden von Parent;1539
2.11.3.2;31.3.2 Die echten MDI-Fenster;1540
2.11.3.3;31.3.3 Die Kindfenster;1541
2.11.3.4;31.3.4 Automatisches Anordnen der Kindfenster;1542
2.11.3.5;31.3.5 Zugriff auf die geöffneten MDI-Kindfenster;1543
2.11.3.6;31.3.6 Zugriff auf das aktive MDI-Kindfenster;1544
2.11.3.7;31.3.7 Mischen von Kindfenstermenü/MDIContainer-Menü;1544
2.11.3.7.1;AllowMerge;1544
2.11.3.7.2;MergeAction und MergeIndex;1545
2.11.4;31.4 Praxisbeispiele;1545
2.11.4.1;31.4.1 Informationsaustausch zwischen Formularen;1545
2.11.4.1.1;Überblick;1545
2.11.4.1.2;Bedienoberfläche Form1 (Hauptformular);1546
2.11.4.1.3;Bedienoberfläche Form2 ... Form5 (untergeordnete Formulare);1546
2.11.4.1.4;Allgemeiner Code für Form1;1547
2.11.4.1.5;Variante 1: Übergabe der Formular-Referenz im Konstruktor;1548
2.11.4.1.6;Variante 2: Übergabe der Formular-Referenz als Eigenschaft;1549
2.11.4.1.7;Variante 3: Übergabe der Formular-Referenz als globale Variable;1550
2.11.4.1.8;Variante 4: Übergabe der Formular-Referenz als Ownership;1551
2.11.4.1.9;Bemerkungen;1552
2.11.4.2;31.4.2 Ereigniskette beim Laden/Entladen eines Formulars;1552
2.11.4.2.1;Bedienoberfläche (Form1 und Form2);1553
2.11.4.2.2;Änderung des Startformulars;1553
2.11.4.2.3;Quellcode von Form1;1554
2.11.4.2.4;Quellcode von Form2;1556
2.11.4.2.5;Test;1556
2.11.4.2.6;Bemerkungen;1557
2.12;32 Windows Forms-Komponenten;1558
2.12.1;32.1 Allgemeine Hinweise;1558
2.12.1.1;32.1.1 Hinzufügen von Komponenten;1558
2.12.1.2;32.1.2 Komponenten zur Laufzeit per Code erzeugen;1559
2.12.2;32.2 Allgemeine Steuerelemente;1561
2.12.2.1;32.2.1 Label;1561
2.12.2.2;32.2.2 LinkLabel;1562
2.12.2.2.1;Wichtige Eigenschaften;1562
2.12.2.2.2;Hyperlink einfügen;1562
2.12.2.3;32.2.3 Button;1563
2.12.2.4;32.2.4 TextBox;1564
2.12.2.4.1;Mehrzeilige Textboxen;1564
2.12.2.4.2;Markieren von Text;1565
2.12.2.4.3;PasswordChar;1566
2.12.2.4.4;Automatisches Vervollständigen;1566
2.12.2.5;32.2.5 MaskedTextBox;1567
2.12.2.6;32.2.6 CheckBox;1568
2.12.2.7;32.2.7 RadioButton;1570
2.12.2.8;32.2.8 ListBox;1570
2.12.2.9;32.2.9 CheckedListBox;1572
2.12.2.10;32.2.10 ComboBox;1572
2.12.2.11;32.2.11 PictureBox;1573
2.12.2.12;32.2.12 DateTimePicker;1574
2.12.2.13;32.2.13 MonthCalendar;1574
2.12.2.14;32.2.14 HScrollBar, VScrollBar;1575
2.12.2.15;32.2.15 TrackBar;1576
2.12.2.16;32.2.16 NumericUpDown;1576
2.12.2.17;32.2.17 DomainUpDown;1577
2.12.2.18;32.2.18 ProgressBar;1577
2.12.2.19;32.2.19 RichTextBox;1578
2.12.2.20;32.2.20 ListView;1579
2.12.2.20.1;ListViewItem;1579
2.12.2.20.2;ImageList;1580
2.12.2.20.3;Übersichten zur ListView;1580
2.12.2.21;32.2.21 TreeView;1585
2.12.2.21.1;Knoten zur Laufzeit erzeugen;1586
2.12.2.21.2;Auswerten des aktiven Knotens;1587
2.12.2.21.3;Wichtige Eigenschaften von TreeView;1588
2.12.2.21.4;Wichtige Methoden von TreeView;1589
2.12.2.21.5;Wichtige Ereignisse von TreeView;1589
2.12.2.21.6;Wichtige Eigenschaften von TreeNode;1589
2.12.2.21.7;Wichtige Methoden von TreeNode;1590
2.12.2.22;32.2.22 WebBrowser;1590
2.12.3;32.3 Container;1591
2.12.3.1;32.3.1 FlowLayout/TableLayout/SplitContainer;1591
2.12.3.2;32.3.2 Panel;1591
2.12.3.2.1;Oberflächen gestalten;1591
2.12.3.3;32.3.3 GroupBox;1592
2.12.3.4;32.3.4 TabControl;1593
2.12.3.4.1;Wichtige Eigenschaften;1594
2.12.3.4.2;Wichtige Ereignisse;1594
2.12.3.5;32.3.5 ImageList;1595
2.12.4;32.4 Menüs & Symbolleisten;1596
2.12.4.1;32.4.1 MenuStrip und ContextMenuStrip;1596
2.12.4.2;32.4.2 ToolStrip;1596
2.12.4.3;32.4.3 StatusStrip;1596
2.12.4.4;32.4.4 ToolStripContainer;1597
2.12.5;32.5 Daten;1597
2.12.5.1;32.5.1 DataSet;1597
2.12.5.2;32.5.2 DataGridView/DataGrid;1598
2.12.5.3;32.5.3 BindingNavigator/BindingSource;1598
2.12.5.4;32.5.4 Chart;1598
2.12.6;32.6 Komponenten;1600
2.12.6.1;32.6.1 ErrorProvider;1600
2.12.6.2;32.6.2 HelpProvider;1600
2.12.6.3;32.6.3 ToolTip;1600
2.12.6.4;32.6.4 BackgroundWorker;1600
2.12.6.5;32.6.5 Timer;1600
2.12.6.6;32.6.6 SerialPort;1601
2.12.7;32.7 Drucken;1601
2.12.7.1;32.7.1 PrintPreviewControl;1601
2.12.7.2;32.7.2 PrintDocument;1601
2.12.8;32.8 Dialoge;1601
2.12.8.1;32.8.1 OpenFileDialog/SaveFileDialog/FolderBrowserDialog;1601
2.12.8.2;32.8.2 FontDialog/ColorDialog;1602
2.12.9;32.9 WPF-Unterstützung mit dem ElementHost;1602
2.12.10;32.10 Praxisbeispiele;1602
2.12.10.1;32.10.1 Mit der CheckBox arbeiten;1602
2.12.10.1.1;Oberfläche;1602
2.12.10.1.2;Quellcode;1603
2.12.10.1.3;Test;1603
2.12.10.2;32.10.2 Steuerelemente per Code selbst erzeugen;1604
2.12.10.2.1;Oberfläche;1604
2.12.10.2.2;Quellcode;1604
2.12.10.2.3;Test;1606
2.12.10.2.4;Bemerkungen;1606
2.12.10.3;32.10.3 Controls-Auflistung im TreeView anzeigen;1606
2.12.10.3.1;Oberfläche;1607
2.12.10.3.2;Quellcode;1608
2.12.10.3.3;Test;1609
2.12.10.4;32.10.4 WPF-Komponenten mit dem ElementHost anzeigen;1610
2.12.10.4.1;Oberfläche (WPF-Control);1611
2.12.10.4.2;Oberfläche (Windows Forms);1613
2.13;33 Grundlagen Grafikausgabe;1614
2.13.1;33.1 Übersicht und erste Schritte;1614
2.13.1.1;33.1.1 GDI+ – Ein erster Einblick für Umsteiger;1615
2.13.1.1.1;Ein zentrales Grafikausgabe-Objekt;1615
2.13.1.1.2;Die Grafikausgabe ist zustandslos;1615
2.13.1.1.3;Prinzipieller Ablauf;1615
2.13.1.1.4;Wichtige Features;1616
2.13.1.2;33.1.2 Namespaces für die Grafikausgabe;1616
2.13.1.2.1;System.Drawing;1616
2.13.1.2.2;System.Drawing.Drawing2D;1617
2.13.1.2.3;System.Drawing.Imaging;1617
2.13.1.2.4;System.Drawing.Printing;1617
2.13.1.2.5;System.Drawing.Design;1618
2.13.1.2.6;System.Drawing.Text;1618
2.13.2;33.2 Darstellen von Grafiken;1618
2.13.2.1;33.2.1 Die PictureBox-Komponente;1618
2.13.2.2;33.2.2 Das Image-Objekt;1619
2.13.2.3;33.2.3 Laden von Grafiken zur Laufzeit;1620
2.13.2.4;33.2.4 Sichern von Grafiken;1620
2.13.2.4.1;Spezielle Einstellungen;1621
2.13.2.5;33.2.5 Grafikeigenschaften ermitteln;1621
2.13.2.5.1;Breite und Höhe der Grafik;1621
2.13.2.5.2;Auflösung;1621
2.13.2.5.3;Grafiktyp;1622
2.13.2.5.4;Interner Bitmap-Aufbau;1622
2.13.2.6;33.2.6 Erzeugen von Vorschaugrafiken (Thumbnails);1622
2.13.2.7;33.2.7 Die Methode RotateFlip;1623
2.13.2.8;33.2.8 Skalieren von Grafiken;1624
2.13.3;33.3 Das .NET-Koordinatensystem;1625
2.13.3.1;33.3.1 Globale Koordinaten;1626
2.13.3.2;33.3.2 Seitenkoordinaten (globale Transformation);1627
2.13.3.2.1;Translation (Verschiebung);1627
2.13.3.2.2;Skalierung (Vergrößerung/Verkleinerung);1627
2.13.3.2.3;Rotation;1628
2.13.3.3;33.3.3 Gerätekoordinaten (Seitentransformation);1629
2.13.4;33.4 Grundlegende Zeichenfunktionen von GDI+;1630
2.13.4.1;33.4.1 Das zentrale Graphics-Objekt;1630
2.13.4.1.1;Wie erzeuge ich ein Graphics-Objekt?;1631
2.13.4.1.2;Die Invalidate-Methode;1632
2.13.4.1.3;Die Eigenschaft ResizeRedraw;1632
2.13.4.2;33.4.2 Punkte zeichnen/abfragen;1633
2.13.4.3;33.4.3 Linien;1634
2.13.4.4;33.4.4 Kantenglättung mit Antialiasing;1635
2.13.4.5;33.4.5 PolyLine;1636
2.13.4.6;33.4.6 Rechtecke;1636
2.13.4.6.1;DrawRectangle;1636
2.13.4.6.2;FillRectangle;1637
2.13.4.6.3;DrawRectangles/FillRectangles;1637
2.13.4.7;33.4.7 Polygone;1638
2.13.4.8;33.4.8 Splines;1639
2.13.4.9;33.4.9 Bézierkurven;1640
2.13.4.10;33.4.10 Kreise und Ellipsen;1641
2.13.4.11;33.4.11 Tortenstück (Segment);1641
2.13.4.11.1;Kuchendiagramme;1642
2.13.4.12;33.4.12 Bogenstück;1643
2.13.4.13;33.4.13 Wo sind die Rechtecke mit den runden Ecken?;1644
2.13.4.14;33.4.14 Textausgabe;1645
2.13.4.14.1;Texteigenschaften;1646
2.13.4.14.2;Ausgabe von mehrzeiligem Text;1646
2.13.4.14.3;Textattribute;1647
2.13.4.14.4;Ausgabequalität;1647
2.13.4.14.5;Und wo bleibt eine Methode zum Drehen von Text?;1648
2.13.4.15;33.4.15 Ausgabe von Grafiken;1649
2.13.4.15.1;Skalieren;1650
2.13.5;33.5 Unser Werkzeugkasten;1650
2.13.5.1;33.5.1 Einfache Objekte;1650
2.13.5.1.1;Point, FPoint;1650
2.13.5.1.2;Size, FSize;1651
2.13.5.1.3;Rectangle, FRectangle;1651
2.13.5.2;33.5.2 Vordefinierte Objekte;1652
2.13.5.2.1;Vordefinierte Pinsel;1652
2.13.5.2.2;Vordefinierte Stifte;1652
2.13.5.2.3;Vordefinierte Farben;1653
2.13.5.2.4;Vordefinierte Icons;1653
2.13.5.3;33.5.3 Farben/Transparenz;1654
2.13.5.3.1;ARGB-Farben;1654
2.13.5.3.2;Was ist mit dem höchstwertigen Byte?;1654
2.13.5.4;33.5.4 Stifte (Pen);1655
2.13.5.4.1;Einfarbige Stifte;1656
2.13.5.4.2;Stifte mit Füllung;1657
2.13.5.5;33.5.5 Pinsel (Brush);1658
2.13.5.6;33.5.6 SolidBrush;1659
2.13.5.7;33.5.7 HatchBrush;1659
2.13.5.8;33.5.8 TextureBrush;1660
2.13.5.9;33.5.9 LinearGradientBrush;1661
2.13.5.10;33.5.10 PathGradientBrush;1662
2.13.5.11;33.5.11 Fonts;1663
2.13.5.12;33.5.12 Path-Objekt;1664
2.13.5.12.1;Füllen;1665
2.13.5.12.2;Fillmode;1666
2.13.5.13;33.5.13 Clipping/Region;1667
2.13.5.13.1;Regions;1668
2.13.5.13.2;Clipping;1670
2.13.6;33.6 Standarddialoge;1671
2.13.6.1;33.6.1 Schriftauswahl;1671
2.13.6.2;33.6.2 Farbauswahl;1672
2.13.7;33.7 Praxisbeispiele;1674
2.13.7.1;33.7.1 Ein Graphics-Objekt erzeugen;1674
2.13.7.1.1;Variante 1: Verwendung des Paint-Events;1674
2.13.7.1.2;Test;1674
2.13.7.1.3;Variante 2: Überschreiben der OnPaint-Methode;1675
2.13.7.1.4;Test;1675
2.13.7.1.5;Variante 3: Graphics-Objekt mit CreateGraphics erzeugen;1675
2.13.7.1.6;Test;1676
2.13.7.1.7;Variante 4: Verwendung des Graphics-Objekts einer PictureBox;1676
2.13.7.2;33.7.2 Zeichenoperationen mit der Maus realisieren;1676
2.13.7.2.1;Oberfläche;1676
2.13.7.2.2;Quelltext;1677
2.13.7.2.3;Test;1679
2.14;34 Druckausgabe;1680
2.14.1;34.1 Einstieg und Übersicht;1680
2.14.1.1;34.1.1 Nichts geht über ein Beispiel;1680
2.14.1.2;34.1.2 Programmiermodell;1682
2.14.1.3;34.1.3 Kurzübersicht der Objekte;1683
2.14.2;34.2 Auswerten der Druckereinstellungen;1683
2.14.2.1;34.2.1 Die vorhandenen Drucker;1683
2.14.2.2;34.2.2 Der Standarddrucker;1684
2.14.2.3;34.2.3 Verfügbare Papierformate/Seitenabmessungen;1685
2.14.2.4;34.2.4 Der eigentliche Druckbereich;1686
2.14.2.5;34.2.5 Die Seitenausrichtung ermitteln;1687
2.14.2.6;34.2.6 Ermitteln der Farbfähigkeit;1687
2.14.2.7;34.2.7 Die Druckauflösung abfragen;1687
2.14.2.8;34.2.8 Ist beidseitiger Druck möglich?;1688
2.14.2.9;34.2.9 Einen "Informationsgerätekontext" erzeugen;1688
2.14.2.10;34.2.10 Abfragen von Werten während des Drucks;1689
2.14.3;34.3 Festlegen von Druckereinstellungen;1690
2.14.3.1;34.3.1 Einen Drucker auswählen;1690
2.14.3.2;34.3.2 Drucken in Millimetern;1690
2.14.3.3;34.3.3 Festlegen der Seitenränder;1691
2.14.3.4;34.3.4 Druckjobname;1692
2.14.3.5;34.3.5 Anzahl der Kopien;1693
2.14.3.6;34.3.6 Beidseitiger Druck;1693
2.14.3.7;34.3.7 Seitenzahlen festlegen;1694
2.14.3.8;34.3.8 Druckqualität verändern;1697
2.14.3.9;34.3.9 Ausgabemöglichkeiten des Chart-Controls nutzen;1698
2.14.4;34.4 Die Druckdialoge verwenden;1698
2.14.4.1;34.4.1 PrintDialog;1699
2.14.4.2;34.4.2 PageSetupDialog;1700
2.14.4.2.1;Probleme mit den Rändern;1701
2.14.4.3;34.4.3 PrintPreviewDialog;1702
2.14.4.4;34.4.4 Ein eigenes Druckvorschau-Fenster realisieren;1703
2.14.5;34.5 Drucken mit OLE-Automation;1704
2.14.5.1;34.5.1 Kurzeinstieg in die OLE-Automation;1704
2.14.5.1.1;Programmieren der OLE-Automation;1705
2.14.5.2;34.5.2 Drucken mit Microsoft Word;1706
2.14.6;34.6 Praxisbeispiele;1708
2.14.6.1;34.6.1 Den Drucker umfassend konfigurieren;1708
2.14.6.1.1;Oberfläche (Hauptformular Form1);1708
2.14.6.1.2;Oberfläche (Druckvorschau Form2);1709
2.14.6.1.3;Quelltext (Form1);1710
2.14.6.1.4;Quelltext (Form2);1715
2.14.6.1.5;Test;1716
2.14.6.2;34.6.2 Diagramme mit dem Chart-Control drucken;1718
2.14.6.2.1;Oberfläche;1718
2.14.6.2.2;Quelltext;1718
2.14.6.2.3;Test;1719
2.14.6.3;34.6.3 Druckausgabe mit Word;1720
2.14.6.3.1;Oberfläche;1720
2.14.6.3.2;Quelltext;1721
2.14.6.3.3;Test;1723
2.14.6.3.4;Anmerkung ab .NET 4.0;1724
2.15;35 Windows Forms-Datenbindung;1726
2.15.1;35.1 Prinzipielle Möglichkeiten;1726
2.15.2;35.2 Manuelle Bindung an einfache Datenfelder;1727
2.15.2.1;35.2.1 BindingSource erzeugen;1727
2.15.2.2;35.2.2 Binding-Objekt;1728
2.15.2.3;35.2.3 DataBindings-Collection;1728
2.15.2.3.1;Bemerkungen;1728
2.15.3;35.3 Manuelle Bindung an Listen und Tabellen;1728
2.15.3.1;35.3.1 DataGridView;1729
2.15.3.2;35.3.2 Datenbindung von ComboBox und ListBox;1729
2.15.4;35.4 Entwurfszeit-Bindung an typisierte DataSets;1729
2.15.5;35.5 Drag & Drop-Datenbindung;1731
2.15.6;35.6 Navigations- und Bearbeitungsfunktionen;1731
2.15.6.1;35.6.1 Navigieren zwischen den Datensätzen;1731
2.15.6.2;35.6.2 Hinzufügen und Löschen;1731
2.15.6.3;35.6.3 Aktualisieren und Abbrechen;1732
2.15.6.4;35.6.4 Verwendung des BindingNavigators;1732
2.15.7;35.7 Die Anzeigedaten formatieren;1733
2.15.8;35.8 Praxisbeispiele;1733
2.15.8.1;35.8.1 Einrichten und Verwenden einer Datenquelle;1733
2.15.8.1.1;Assistent zum Konfigurieren von Datenquellen;1733
2.15.8.1.2;Verwenden der Datenquelle;1735
2.15.8.1.3;Test;1736
2.15.8.1.4;Abfragemethoden hinzufügen;1736
2.15.8.2;35.8.2 Eine Auswahlabfrage im DataGridView anzeigen;1737
2.15.8.2.1;Oberfläche;1738
2.15.8.2.2;Quellcode;1738
2.15.8.2.3;Test;1739
2.15.8.3;35.8.3 Master-Detailbeziehungen im DataGrid anzeigen;1740
2.15.8.3.1;Oberfläche;1740
2.15.8.3.2;Quellcode;1740
2.15.8.3.3;Test;1741
2.15.8.4;35.8.4 Datenbindung Chart-Control;1741
2.15.8.4.1;Oberfläche;1742
2.15.8.4.2;Quellcode;1744
2.15.8.4.3;Test;1744
2.16;36 Erweiterte Grafikausgabe;1746
2.16.1;36.1 Transformieren mit der Matrix-Klasse;1746
2.16.1.1;36.1.1 Übersicht;1746
2.16.1.2;36.1.2 Translation;1747
2.16.1.3;36.1.3 Skalierung;1747
2.16.1.4;36.1.4 Rotation;1748
2.16.1.5;36.1.5 Scherung;1748
2.16.1.6;36.1.6 Zuweisen der Matrix;1749
2.16.2;36.2 Low-Level-Grafikmanipulationen;1749
2.16.2.1;36.2.1 Worauf zeigt Scan0?;1750
2.16.2.2;36.2.2 Anzahl der Spalten bestimmen;1751
2.16.2.3;36.2.3 Anzahl der Zeilen bestimmen;1752
2.16.2.4;36.2.4 Zugriff im Detail (erster Versuch);1752
2.16.2.5;36.2.5 Zugriff im Detail (zweiter Versuch);1754
2.16.2.5.1;Weiter optimieren;1755
2.16.2.6;36.2.6 Invertieren;1756
2.16.2.7;36.2.7 In Graustufen umwandeln;1757
2.16.2.8;36.2.8 Heller/Dunkler;1758
2.16.2.9;36.2.9 Kontrast;1760
2.16.2.10;36.2.10 Gamma-Wert;1761
2.16.2.11;36.2.11 Histogramm spreizen;1761
2.16.2.12;36.2.12 Ein universeller Grafikfilter;1764
2.16.2.12.1;Beispiel: Eine universelle Filter-Klasse entwickeln;1764
2.16.2.12.2;Die Klasse GrafikFilter im Einsatz;1767
2.16.3;36.3 Fortgeschrittene Techniken;1768
2.16.3.1;36.3.1 Flackerfrei dank Double Buffering;1768
2.16.3.1.1;Eine Puffer-Bitmap erzeugen;1768
2.16.3.1.2;Und was ist mit der PictureBox?;1769
2.16.3.2;36.3.2 Animationen;1770
2.16.3.2.1;Vorbereiten des Ausgabeobjekts;1770
2.16.3.2.2;Styles bei Controls setzen;1771
2.16.3.2.3;Die eigentliche Grafikausgabe;1771
2.16.3.2.4;Bemerkungen;1773
2.16.3.3;36.3.3 Animated GIFs;1773
2.16.3.3.1;Wie lernen die Bilder das Laufen?;1774
2.16.3.4;36.3.4 Auf einzelne GIF-Frames zugreifen;1775
2.16.3.4.1;Wiedergabe einzelner Frames;1776
2.16.3.4.2;Erzeugen eines Bitmap-Strips;1776
2.16.3.5;36.3.5 Transparenz realisieren;1777
2.16.3.6;36.3.6 Eine Grafik maskieren;1778
2.16.3.7;36.3.7 JPEG-Qualität beim Sichern bestimmen;1780
2.16.4;36.4 Grundlagen der 3D-Vektorgrafik;1781
2.16.4.1;36.4.1 Datentypen für die Verwaltung;1781
2.16.4.2;36.4.2 Eine universelle 3D-Grafik-Klasse;1782
2.16.4.3;36.4.3 Grundlegende Betrachtungen;1783
2.16.4.3.1;Drehwinkel;1784
2.16.4.3.2;Darstellungsmöglichkeiten;1784
2.16.4.4;36.4.4 Translation;1786
2.16.4.5;36.4.5 Streckung/Skalierung;1787
2.16.4.6;36.4.6 Rotation;1788
2.16.4.7;36.4.7 Die eigentlichen Zeichenroutinen;1790
2.16.4.7.1;Ausgabe einer Linie;1790
2.16.4.7.2;Ausgabe eines Koordinatensystems;1790
2.16.5;36.5 Und doch wieder GDI-Funktionen ...;1792
2.16.5.1;36.5.1 Am Anfang war das Handle ...;1792
2.16.5.2;36.5.2 Gerätekontext (Device Context Types);1795
2.16.5.2.1;Formular-DC über Graphics-Objekt erzeugen;1795
2.16.5.2.2;Formular-DC mit GetDC erzeugen;1796
2.16.5.3;36.5.3 Koordinatensysteme und Abbildungsmodi;1797
2.16.5.4;36.5.4 Zeichenwerkzeuge/Objekte;1801
2.16.5.4.1;Erzeugen und Parametrieren der Objekte;1802
2.16.5.5;36.5.5 Bitmaps;1803
2.16.5.5.1;Bitmaps kopieren;1805
2.16.5.5.2;Bitmaps skalieren;1806
2.16.6;36.6 Praxisbeispiele;1807
2.16.6.1;36.6.1 Die Transformationsmatrix verstehen;1807
2.16.6.1.1;Oberfläche;1807
2.16.6.1.2;Quelltext;1807
2.16.6.1.3;Test;1809
2.16.6.2;36.6.2 Eine 3D-Grafikausgabe in Aktion;1810
2.16.6.2.1;Oberfläche;1810
2.16.6.2.2;Quelltext;1810
2.16.6.2.3;Test/Bemerkungen;1812
2.16.6.3;36.6.3 Einen Fenster-Screenshot erzeugen;1813
2.16.6.3.1;Oberfläche;1813
2.16.6.3.2;Quelltext;1813
2.16.6.3.3;Test;1814
2.16.6.3.4;Bemerkung;1815
2.17;37 Ressourcen/Lokalisierung;1816
2.17.1;37.1 Manifestressourcen;1816
2.17.1.1;37.1.1 Erstellen von Manifestressourcen;1816
2.17.1.2;37.1.2 Zugriff auf Manifestressourcen;1818
2.17.1.2.1;Namensgebung eingebetteter Ressourcen;1818
2.17.1.2.2;Auflisten aller eingebetteten Ressourcen;1818
2.17.1.2.3;Die Inhalte eingebetteter Ressourcen auslesen;1819
2.17.2;37.2 Typisierte Ressourcen;1820
2.17.2.1;37.2.1 Erzeugen von .resources-Dateien;1820
2.17.2.2;37.2.2 Hinzufügen der .resources-Datei zum Projekt;1820
2.17.2.3;37.2.3 Zugriff auf die Inhalte von .resources-Dateien;1821
2.17.2.3.1;Bemerkungen zum Zugriff auf .resources-Dateien;1821
2.17.2.4;37.2.4 ResourceManager einer .resources-Datei erzeugen;1821
2.17.2.4.1;Bemerkungen;1822
2.17.2.5;37.2.5 Was sind .resx-Dateien?;1822
2.17.3;37.3 Streng typisierte Ressourcen;1822
2.17.3.1;37.3.1 Erzeugen streng typisierter Ressourcen;1823
2.17.3.2;37.3.2 Verwenden streng typisierter Ressourcen;1823
2.17.3.3;37.3.3 Streng typisierte Ressourcen per Reflection auslesen;1824
2.17.4;37.4 Anwendungen lokalisieren;1826
2.17.4.1;37.4.1 Localizable und Language;1826
2.17.4.2;37.4.2 Beispiel "Landesfahnen";1826
2.17.4.3;37.4.3 Einstellen der aktuellen Kultur zur Laufzeit;1829
2.17.4.3.1;Bemerkungen;1830
2.18;38 Komponentenentwicklung;1832
2.18.1;38.1 Überblick;1832
2.18.2;38.2 Benutzersteuerelement;1833
2.18.2.1;38.2.1 Entwickeln einer Auswahl-ListBox;1833
2.18.2.1.1;Oberflächendesign;1834
2.18.2.1.2;Implementieren der Programmlogik;1834
2.18.2.2;38.2.2 Komponente verwenden;1835
2.18.3;38.3 Benutzerdefiniertes Steuerelement;1836
2.18.3.1;38.3.1 Entwickeln eines BlinkLabels;1836
2.18.3.1.1;Oberflächendesign;1837
2.18.3.1.2;Festlegen des Typs des Vorfahren;1837
2.18.3.1.3;Implementieren der Programmlogik;1838
2.18.3.2;38.3.2 Verwenden der Komponente;1839
2.18.4;38.4 Komponentenklasse;1839
2.18.5;38.5 Eigenschaften;1840
2.18.5.1;38.5.1 Einfache Eigenschaften;1840
2.18.5.2;38.5.2 Schreib-/Lesezugriff (Get/Set);1840
2.18.5.3;38.5.3 Nur Lese-Eigenschaft (ReadOnly);1841
2.18.5.4;38.5.4 Nur-Schreibzugriff (WriteOnly);1842
2.18.5.5;38.5.5 Hinzufügen von Beschreibungen;1842
2.18.5.6;38.5.6 Ausblenden im Eigenschaftenfenster;1842
2.18.5.7;38.5.7 Einfügen in Kategorien;1843
2.18.5.8;38.5.8 Default-Wert einstellen;1843
2.18.5.9;38.5.9 Standard-Eigenschaft (Indexer);1844
2.18.5.10;38.5.10 Wertebereichsbeschränkung und Fehlerprüfung;1844
2.18.5.11;38.5.11 Eigenschaften von Aufzählungstypen;1846
2.18.5.12;38.5.12 Standard Objekt-Eigenschaften;1847
2.18.5.13;38.5.13 Eigene Objekt-Eigenschaften;1847
2.18.6;38.6 Methoden;1849
2.18.6.1;38.6.1 Konstruktor;1850
2.18.6.2;38.6.2 Class-Konstruktor;1851
2.18.6.3;38.6.3 Destruktor;1852
2.18.6.4;38.6.4 Aufruf des Basisklassen-Konstruktors;1852
2.18.6.5;38.6.5 Aufruf von Basisklassen-Methoden;1853
2.18.7;38.7 Ereignisse (Events);1853
2.18.7.1;38.7.1 Ereignis mit Standardargument definieren;1854
2.18.7.2;38.7.2 Ereignis mit eigenen Argumenten;1855
2.18.7.3;38.7.3 Ein Default-Ereignis festlegen;1856
2.18.7.4;38.7.4 Mit Ereignissen auf Windows-Messages reagieren;1856
2.18.8;38.8 Weitere Themen;1858
2.18.8.1;38.8.1 Wohin mit der Komponente?;1858
2.18.8.2;38.8.2 Assembly-Informationen festlegen;1859
2.18.8.3;38.8.3 Assemblies signieren;1862
2.18.8.3.1;Erstellen eines AssemblyKey-File;1862
2.18.8.4;38.8.4 Komponenten-Ressourcen einbetten;1862
2.18.8.5;38.8.5 Der Komponente ein Icon zuordnen;1863
2.18.8.5.1;Icon erstellen;1863
2.18.8.6;38.8.6 Den Designmodus erkennen;1864
2.18.8.7;38.8.7 Komponenten lizenzieren;1864
2.18.8.7.1;Verwendung der LicFileLicenseProvider-Klasse;1865
2.18.8.7.2;Ableiten der LicFileLicenseProvider-Klasse;1866
2.18.8.7.3;Bemerkung;1868
2.18.9;38.9 Praxisbeispiele;1868
2.18.9.1;38.9.1 AnimGif – Anzeige von Animationen;1868
2.18.9.1.1;Oberfläche/Ressourcen;1868
2.18.9.1.2;Quelltext;1869
2.18.9.1.3;Test;1871
2.18.9.2;38.9.2 Eine FontComboBox entwickeln;1871
2.18.9.2.1;Quelltext;1871
2.18.9.2.2;Test;1873
2.18.9.3;38.9.3 Das PropertyGrid verwenden;1873
2.18.9.3.1;Oberfläche;1873
2.18.9.3.2;Quelltext;1873
2.18.9.3.3;Test;1875
2.19;39 Einführung in ASP.NET;1878
2.19.1;39.1 ASP.NET für Ein- und Umsteiger;1878
2.19.1.1;39.1.1 ASP – Ein kurzer Blick zurück;1878
2.19.1.2;39.1.2 Was ist bei ASP.NET anders?;1879
2.19.1.3;39.1.3 Was gibt es noch in ASP.NET?;1881
2.19.1.4;39.1.4 Vorteile von ASP.NET gegenüber ASP;1882
2.19.1.5;39.1.5 Voraussetzungen für den Einsatz von ASP.NET;1883
2.19.1.6;39.1.6 Und was hat das alles mit C# zu tun?;1883
2.19.1.6.1;Grundsätzlicher Projektaufbau;1884
2.19.2;39.2 Unsere erste Web-Anwendung;1886
2.19.2.1;39.2.1 Visueller Entwurf der Bedienoberfläche;1886
2.19.2.2;39.2.2 Zuweisen der Objekteigenschaften;1889
2.19.2.3;39.2.3 Verknüpfen der Objekte mit Ereignissen;1890
2.19.2.4;39.2.4 Programm kompilieren und testen;1891
2.19.3;39.3 Die ASP.NET-Projektdateien;1892
2.19.3.1;39.3.1 Die ASP.NET-Projekttypen;1893
2.19.3.1.1;ASP.NET-Website;1894
2.19.3.1.2;ASP.NET-Web-Anwendungen;1894
2.19.3.2;39.3.2 ASPX-Datei(en);1895
2.19.3.3;39.3.3 Die aspx.cs-Datei(en);1897
2.19.3.4;39.3.4 Die Datei Global.asax;1898
2.19.3.5;39.3.5 Das Startformular;1899
2.19.3.6;39.3.6 Die Datei Web.config;1899
2.19.3.7;39.3.7 Masterpages (master-Dateien);1902
2.19.3.8;39.3.8 Sitemap (Web.sitemap);1902
2.19.3.9;39.3.9 Benutzersteuerelemente (ascx-Dateien);1903
2.19.3.10;39.3.10 Die Web-Projekt-Verzeichnisse;1903
2.19.4;39.4 Lernen am Beispiel;1904
2.19.4.1;39.4.1 Erstellen des Projekts;1904
2.19.4.2;39.4.2 Oberflächengestaltung;1905
2.19.4.2.1;Formular-Titel setzen;1906
2.19.4.3;39.4.3 Ereignisprogrammierung;1906
2.19.4.4;39.4.4 Ein Fehler, was nun?;1908
2.19.4.4.1;Einfache Fehlerbehandlung;1909
2.19.4.5;39.4.5 Ereignisse von Textboxen;1909
2.19.4.6;39.4.6 Ein gemeinsamer Ereignis-Handler;1910
2.19.4.7;39.4.7 Eingabefokus setzen;1910
2.19.4.8;39.4.8 Ausgaben in einer Tabelle;1911
2.19.4.9;39.4.9 Scrollen der Anzeige;1913
2.19.4.10;39.4.10 Zusammenspiel mehrerer Formulare;1914
2.19.4.10.1;Globale Variablen?;1914
2.19.4.10.2;Das Page_Load-Ereignis;1914
2.19.4.11;39.4.11 Umleiten bei Direktaufruf;1915
2.19.4.12;39.4.12 Ärger mit den Cookies;1916
2.19.4.13;39.4.13 Export auf den IIS;1918
2.19.5;39.5 Tipps & Tricks;1919
2.19.5.1;39.5.1 Nachinstallieren IIS 7 bzw. 7.5 (Windows 7);1919
2.19.5.1.1;Nachinstallieren;1919
2.19.5.1.2;ASP.NET registrieren;1920
2.19.5.2;39.5.2 Nachinstallieren IIS8 (Windows 8);1920
2.20;40 Übersicht ASP.NET-Controls;1922
2.20.1;40.1 Einfache Steuerelemente im Überblick;1922
2.20.1.1;40.1.1 Label;1922
2.20.1.1.1;AccessKey/AssociatedControlID;1923
2.20.1.1.2;Datenbindung;1923
2.20.1.2;40.1.2 TextBox;1924
2.20.1.3;40.1.3 Button, ImageButton, LinkButton;1925
2.20.1.3.1;Click-Ereignis;1925
2.20.1.3.2;OnClientClick-Eigenschaft;1925
2.20.1.3.3;PostbackUrl-Eigenschaft;1926
2.20.1.4;40.1.4 CheckBox, RadioButton;1926
2.20.1.5;40.1.5 CheckBoxList, BulletList, RadioButtonList;1927
2.20.1.5.1;Datenbindung;1927
2.20.1.5.2;BulletList;1928
2.20.1.6;40.1.6 Table;1928
2.20.1.7;40.1.7 Hyperlink;1930
2.20.1.8;40.1.8 Image, ImageMap;1930
2.20.1.9;40.1.9 Calendar;1932
2.20.1.10;40.1.10 Panel;1933
2.20.1.11;40.1.11 HiddenField;1933
2.20.1.12;40.1.12 Substitution;1934
2.20.1.13;40.1.13 XML;1935
2.20.1.13.1;Die XML-Daten;1935
2.20.1.13.2;Die Transformationsdateien;1936
2.20.1.13.3;Verwendung und Test;1937
2.20.1.14;40.1.14 FileUpload;1937
2.20.1.15;40.1.15 AdRotator;1938
2.20.2;40.2 Steuerelemente für die Seitennavigation;1939
2.20.2.1;40.2.1 Mehr Übersicht mit Web.Sitemap;1939
2.20.2.2;40.2.2 Menu;1941
2.20.2.2.1;Datenbindung an eine SiteMap;1942
2.20.2.2.2;Menü ohne Datenbindung;1943
2.20.2.3;40.2.3 TreeView;1944
2.20.2.3.1;TreeView ohne Datenbindung;1945
2.20.2.4;40.2.4 SiteMapPath;1947
2.20.2.5;40.2.5 MultiView, View;1948
2.20.2.6;40.2.6 Wizard;1949
2.20.3;40.3 Webseitenlayout/-design;1951
2.20.3.1;40.3.1 Masterpages;1951
2.20.3.1.1;Masterpage;1952
2.20.3.1.2;Content Seiten;1953
2.20.3.2;40.3.2 Themes/Skins;1954
2.20.3.2.1;Zuweisen des aktiven Theme;1955
2.20.3.2.2;Skin-Datei;1955
2.20.3.2.3;StyleSheet;1956
2.20.3.2.4;Grafiken;1956
2.20.3.3;40.3.3 Webparts;1957
2.20.4;40.4 Die Validator-Controls;1958
2.20.4.1;40.4.1 Übersicht;1958
2.20.4.2;40.4.2 Wo findet die Fehlerprüfung statt?;1959
2.20.4.3;40.4.3 Verwendung;1959
2.20.4.4;40.4.4 RequiredFieldValidator;1960
2.20.4.5;40.4.5 CompareValidator;1961
2.20.4.6;40.4.6 RangeValidator;1963
2.20.4.7;40.4.7 RegularExpressionValidator;1963
2.20.4.8;40.4.8 CustomValidator;1964
2.20.4.8.1;Clientseitige Validierung;1965
2.20.4.8.2;Serverseitige Validierung;1965
2.20.4.9;40.4.9 ValidationSummary;1967
2.20.4.10;40.4.10 Weitere Möglichkeiten;1968
2.20.4.10.1;Validierung zeitweise verhindern;1968
2.20.4.10.2;ValidationGroup bilden;1968
2.20.4.10.3;Eingabefokus setzen;1968
2.20.5;40.5 Praxisbeispiele;1968
2.20.5.1;40.5.1 Themes und Skins verstehen;1968
2.20.5.1.1;Oberfläche;1969
2.20.5.1.2;Projekt;1969
2.20.5.1.3;Skin bearbeiten;1970
2.20.5.1.4;Style Sheet bearbeiten;1970
2.20.5.1.5;Quelltext;1971
2.20.5.1.6;Test;1972
2.20.5.2;40.5.2 Masterpages verwenden;1973
2.20.5.2.1;Oberfläche (Masterpage);1973
2.20.5.2.2;Oberfläche (Contentpage);1974
2.20.5.2.3;Quelltext;1974
2.20.5.2.4;Test;1975
2.20.5.3;40.5.3 Webparts verwenden;1976
2.20.5.3.1;Vorbereiten der Portalseite;1976
2.20.5.3.2;User Control programmieren;1976
2.20.5.3.3;Inhalte für die Webzones definieren;1977
2.20.5.3.4;Programmieren des Werkzeugkastens;1978
2.21;41 Datenbindung unter ASP.NET;1982
2.21.1;41.1 Einstiegsbeispiel;1982
2.21.1.1;41.1.1 Erstellen der ASP.NET-Website;1982
2.21.1.1.1;Datenbank hinzufügen;1983
2.21.1.1.2;GridView hinzufügen;1984
2.21.1.1.3;GridView an Datenquelle anbinden;1984
2.21.1.1.4;Test;1986
2.21.2;41.2 Einführung;1987
2.21.2.1;41.2.1 Konzept;1987
2.21.2.2;41.2.2 Übersicht über die DataSource-Steuerelemente;1988
2.21.3;41.3 SQLDataSource;1989
2.21.3.1;41.3.1 Datenauswahl mit Parametern;1991
2.21.3.2;41.3.2 Parameter für INSERT, UPDATE und DELETE;1992
2.21.3.3;41.3.3 Methoden;1994
2.21.3.4;41.3.4 Caching;1995
2.21.3.5;41.3.5 Aktualisieren/Refresh;1996
2.21.4;41.4 AccessDataSource;1996
2.21.5;41.5 ObjectDataSource;1996
2.21.5.1;41.5.1 Verbindung zwischen Objekt und DataSource;1996
2.21.5.2;41.5.2 Ein Beispiel sorgt für Klarheit;1998
2.21.5.3;41.5.3 Geschäftsobjekte in einer Session verwalten;2002
2.21.6;41.6 SitemapDataSource;2004
2.21.7;41.7 LinqDataSource;2005
2.21.7.1;41.7.1 Bindung von einfachen Collections;2005
2.21.7.2;41.7.2 Bindung eines LINQ to SQL-DataContext;2006
2.21.8;41.8 EntityDataSource;2008
2.21.8.1;41.8.1 Entity Data Model erstellen;2008
2.21.8.2;41.8.2 EntityDataSource anbinden;2011
2.21.8.3;41.8.3 Datenmenge filtern;2014
2.21.9;41.9 XmlDataSource;2014
2.21.10;41.10 QueryExtender;2016
2.21.10.1;41.10.1 Grundlagen;2016
2.21.10.2;41.10.2 Suchen;2017
2.21.10.3;41.10.3 Sortieren;2019
2.21.11;41.11 GridView;2020
2.21.11.1;41.11.1 Auswahlfunktion (Zeilenauswahl);2020
2.21.11.2;41.11.2 Auswahl mit mehrspaltigem Index;2021
2.21.11.3;41.11.3 Hyperlink-Spalte für Detailansicht;2021
2.21.11.4;41.11.4 Spalten erzeugen;2022
2.21.11.5;41.11.5 Paging realisieren;2023
2.21.11.6;41.11.6 Edit, Update, Delete;2025
2.21.11.7;41.11.7 Keine Daten, was tun?;2025
2.21.12;41.12 DetailsView;2025
2.21.13;41.13 FormView;2027
2.21.13.1;Datenbindung im Detail;2029
2.21.14;41.14 DataList;2030
2.21.14.1;41.14.1 Bearbeitungsfunktionen implementieren;2031
2.21.14.2;41.14.2 Layout verändern;2032
2.21.15;41.15 Repeater;2033
2.21.16;41.16 ListView;2034
2.21.17;41.17 Typisierte Datenbindung;2034
2.21.18;41.18 Model Binding;2035
2.21.19;41.19 Chart;2037
2.22;42 ASP.NET-Objekte/-Techniken;2040
2.22.1;42.1 Wichtige ASP.NET-Objekte;2040
2.22.1.1;42.1.1 HTTPApplication;2040
2.22.1.2;42.1.2 Application;2043
2.22.1.3;42.1.3 Session;2044
2.22.1.3.1;Session-Variablen;2044
2.22.1.3.2;Beenden einer Session;2045
2.22.1.3.3;Ereignisse;2045
2.22.1.4;42.1.4 Page;2046
2.22.1.4.1;Eigenschaften;2046
2.22.1.4.2;Methoden;2047
2.22.1.4.3;Ereignisse;2048
2.22.1.5;42.1.5 Request;2049
2.22.1.5.1;Informationen über den Browser ermitteln;2049
2.22.1.5.2;QueryString-Parameter auslesen;2051
2.22.1.6;42.1.6 Response;2052
2.22.1.6.1;Eigenschaften;2052
2.22.1.6.2;Methoden;2052
2.22.1.6.3;Textausgabe;2053
2.22.1.6.4;Bilder/Dateien zum Client senden;2053
2.22.1.6.5;Dynamisch erzeugte Grafiken senden;2054
2.22.1.6.6;Neue Seiten aufrufen;2055
2.22.1.6.7;Wir geben zur Protokoll ...;2056
2.22.1.7;42.1.7 Server;2056
2.22.1.7.1;MapPath;2056
2.22.1.7.2;MachineName;2057
2.22.1.7.3;Transfer;2057
2.22.1.7.4;Execute;2057
2.22.1.8;42.1.8 Cookies verwenden;2057
2.22.1.8.1;User;2060
2.22.2;42.2 Fehlerbehandlung unter ASP.NET;2060
2.22.2.1;42.2.1 Fehler beim Entwurf;2060
2.22.2.2;42.2.2 Laufzeitfehler;2060
2.22.2.3;42.2.3 Eine eigene Fehlerseite;2062
2.22.2.4;42.2.4 Fehlerbehandlung im Web Form;2063
2.22.2.5;42.2.5 Fehlerbehandlung in der Anwendung;2064
2.22.2.6;42.2.6 Alternative Fehlerseite einblenden;2065
2.22.2.7;42.2.7 Lokale Fehlerbehandlung;2066
2.22.2.8;42.2.8 Seite nicht gefunden – was nun?;2067
2.22.3;42.3 E-Mail-Versand in ASP.NET;2067
2.22.3.1;42.3.1 Übersicht;2068
2.22.3.2;42.3.2 Mail-Server bestimmen;2068
2.22.3.3;42.3.3 Einfache Text-E-Mails versenden;2070
2.22.3.3.1;Variante 1;2070
2.22.3.3.2;Variante 2;2070
2.22.3.4;42.3.4 E-Mails mit Dateianhang;2071
2.22.4;42.4 Sicherheit von Webanwendungen;2072
2.22.4.1;42.4.1 Authentication;2072
2.22.4.1.1;Anonyme Anmeldung;2072
2.22.4.1.2;Forms Authentication;2073
2.22.4.1.3;Windows Authentication;2073
2.22.4.2;42.4.2 Forms Authentication realisieren;2073
2.22.4.2.1;Login-Dialog;2074
2.22.4.2.2;Die Änderungen in der Web.config;2075
2.22.4.2.3;Test;2076
2.22.4.2.4;Weitere Möglichkeiten der Authentifizierung;2077
2.22.4.3;42.4.3 Impersonation;2077
2.22.4.4;42.4.4 Authorization;2078
2.22.4.4.1;File Authorization;2078
2.22.4.4.2;URL Authorization;2078
2.22.4.5;42.4.5 Administrieren der Website;2080
2.22.4.5.1;Voraussetzung;2080
2.22.4.5.2;ASP.NET-Konfigurationsoberfläche;2081
2.22.4.5.3;Auswahl des Authentifizierungstyps;2082
2.22.4.5.4;Neuen Nutzer erstellen;2082
2.22.4.5.5;Rechte einschränken;2083
2.22.4.6;42.4.6 Steuerelemente für das Login-Handling;2084
2.22.4.6.1;Login;2084
2.22.4.6.2;LoginStatus;2085
2.22.4.6.3;LoginName;2085
2.22.4.6.4;LoginView;2085
2.22.4.6.5;PasswortRecovery;2086
2.22.4.6.6;CreateUserWizard;2087
2.22.4.6.7;ChangePasswort;2088
2.22.4.7;42.4.7 Programmieren der Sicherheitseinstellungen;2088
2.22.5;42.5 AJAX in ASP.NET-Anwendungen;2090
2.22.5.1;42.5.1 Was ist AJAX und was kann es?;2090
2.22.5.2;42.5.2 Die AJAX-Controls;2091
2.22.5.2.1;ScriptManager;2092
2.22.5.2.2;UpdatePanel;2092
2.22.5.2.3;UpdateProgress;2094
2.22.5.2.4;Timer;2094
2.22.5.3;42.5.3 AJAX-Control-Toolkit;2095
2.22.6;42.6 User Controls/Webbenutzersteuerelemente;2096
2.22.6.1;User Controls;2096
2.22.6.2;Custom Controls;2096
2.22.6.3;42.6.1 Ein simples Einstiegsbeispiel;2097
2.22.6.3.1;Entwurf;2097
2.22.6.3.2;Quellcode;2098
2.22.6.3.3;Einbindung;2099
2.22.6.3.4;Test;2099
2.22.6.3.5;Eigene Eigenschaften definieren;2099
2.22.6.3.6;Fazit;2100
2.22.6.4;42.6.2 Dynamische Grafiken im User Control anzeigen;2100
2.22.6.4.1;Dynamisches Senden der Grafik;2101
2.22.6.4.2;Entwurf des Controls;2101
2.22.6.4.3;Verwendung und Test;2103
2.22.6.5;42.6.3 Grafikausgaben per User Control realisieren;2105
2.22.6.5.1;Das User Control;2105
2.22.6.5.2;Einbindung/Programmierung;2106
2.22.6.5.3;Test;2107
2.23;43 Silverlight-Entwicklung;2110
2.23.1;43.1 Einführung;2110
2.23.1.1;43.1.1 Zielplattformen;2111
2.23.1.2;43.1.2 Silverlight-Applikationstypen;2111
2.23.1.2.1;Silverlight-Anwendung;2112
2.23.1.2.2;Silverlight-Navigationsanwendung;2112
2.23.1.2.3;Silverlight Out-of-Browser-Anwendung;2113
2.23.1.3;43.1.3 Wichtige Unterschiede zu den WPF-Anwendungen;2113
2.23.1.3.1;Einschränkungen durch das Silverlight-Konzept;2113
2.23.1.3.2;Unterschiede durch unterschiedliche Codebasis;2114
2.23.1.4;43.1.4 Vor- und Nachteile von Silverlight-Anwendungen;2115
2.23.1.4.1;WPF-ClickOnce-Anwendungen;2115
2.23.1.4.2;ASP.NET/AJAX;2115
2.23.1.4.3;FLASH;2116
2.23.1.4.4;Fazit;2116
2.23.1.5.1;Updates/Deinstallation;2118
2.23.2;43.2 Die Silverlight-Anwendung im Detail;2118
2.23.2.1;43.2.1 Ein kleines Beispielprojekt;2119
2.23.2.2;43.2.2 Das Application Package und das Test-Web;2121
2.23.2.2.1;.xap-Package;2121
2.23.2.2.2;Silverlight.js;2121
2.23.2.2.3;...TestPage.aspx & ...TestPage.html;2122
2.23.3;43.3 Die Projektdateien im Überblick;2124
2.23.3.1;43.3.1 Projektverwaltung mit App.xaml & App.xaml.cs;2125
2.23.3.1.1;Startup;2126
2.23.3.1.2;Exit;2127
2.23.3.1.3;UnhandledException;2127
2.23.3.1.4;Weitere Eigenschaften und Methoden der Application-Klasse;2127
2.23.3.2;43.3.2 MainPage.xaml & MainPage.xaml.cs;2127
2.23.3.3;43.3.3 AssemblyInfo.cs;2128
2.23.4;43.4 Fenster und Seiten in Silverlight;2128
2.23.4.1;43.4.1 Das Standardfenster;2129
2.23.4.2;43.4.2 Untergeordnete Silverlight-Fenster;2130
2.23.4.3;43.4.3 UserControls für die Anzeige von Detaildaten;2132
2.23.4.3.1;Ein-/Ausblenden von UserControls;2132
2.23.4.3.2;Hinzufügen/Entfernen von UserControls;2132
2.23.4.4;43.4.4 Echte Windows;2133
2.23.4.5;43.4.5 Navigieren in Silverlight-Anwendungen;2134
2.23.4.5.1;Projekt erzeugen;2134
2.23.4.5.2;Die Page-Klasse;2135
2.23.4.5.3;Der Navigations-Frame;2137
2.23.5;43.5 Datenbanken/Datenbindung;2139
2.23.5.1;43.5.1 ASP.NET-Webdienste/WCF-Dienste;2140
2.23.5.1.1;Einfügen der SQL Server-Datenbank;2140
2.23.5.1.2;Erstellen des EDM-Datenmodells;2141
2.23.5.1.3;Erstellen des ASP.NET Webdienstes;2142
2.23.5.1.4;Alternative: Erstellen eines WCF Dienstes;2144
2.23.5.1.5;Einbinden der Dienste in das Silverlight-Projekt;2145
2.23.5.1.6;Konfigurieren der Silverlight-Oberfläche;2146
2.23.5.1.7;Abrufen der Daten;2147
2.23.5.1.8;Zusammenfassung;2148
2.23.5.2;43.5.2 WCF Data Services;2149
2.23.5.2.1;Grundlagen;2149
2.23.5.2.2;Einfügen der SQL Server-Datenbank;2152
2.23.5.2.3;Erstellen des Entity Data Models;2152
2.23.5.2.4;Erstellen des WCF Data Service;2153
2.23.5.2.5;Einbinden des WCF Data Service in das Silverlight-Projekt;2155
2.23.5.2.6;Konfigurieren der Silverlight-Oberfläche;2155
2.23.5.2.7;Abrufen der Daten;2156
2.23.5.2.8;Bearbeiten der Daten;2157
2.23.5.2.9;Arbeiten mit LINQ und Erweiterungsmethoden;2158
2.23.6;43.6 Isolierter Speicher;2160
2.23.6.1;43.6.1 Grundkonzept;2160
2.23.6.2;43.6.2 Das virtuelle Dateisystem verwalten;2161
2.23.6.2.1;Wieviel Platz ist verfügbar?;2161
2.23.6.2.2;Ich will mehr!;2162
2.23.6.2.3;Unterverzeichnisse erzeugen;2162
2.23.6.2.4;Anzeige von Dateien und Verzeichnissen;2162
2.23.6.2.5;Dateien/Verzeichnisse löschen;2163
2.23.6.3;43.6.3 Arbeiten mit Dateien;2164
2.23.6.3.1;Schreiben;2164
2.23.6.3.2;Lesen von Dateien;2164
2.23.7;43.7 Fulltrust-Anwendungen;2165
2.23.8;43.8 Praxisbeispiele;2168
2.23.8.1;43.8.1 Eine Out-of-Browser-Applikation realisieren;2168
2.23.8.1.1;Vorgehensweise;2168
2.23.8.1.2;Installation;2170
2.23.8.1.3;Bemerkungen;2171
2.23.8.2;43.8.2 Out-of-Browser-Anwendung aktualisieren;2172
2.23.8.2.1;Quellcode;2172
2.23.8.3;43.8.3 Testen auf aktive Internetverbindung;2173
2.23.8.3.1;Quellcode;2173
2.23.8.4;43.8.4 Auf Out-of-Browser-Anwendung testen;2174
2.23.8.4.1;Quellcode;2174
2.23.8.5;43.8.5 Den Browser bestimmen;2174
2.23.8.5.1;Quellcode;2174
2.23.8.5.2;Test;2175
2.23.8.6;43.8.6 Parameter an das Plug-in übergeben;2175
2.23.8.6.1;Oberfläche;2175
2.23.8.6.2;Quellcode (MainPage.xaml.cs);2175
2.23.8.6.3;Quellcode (App.xaml.cs);2176
2.23.8.6.4;Quellcode der umgebenden HTML-Seite;2176
2.23.8.6.5;Test;2177
2.23.8.7;43.8.7 Auf den QueryString zugreifen;2177
2.23.8.7.1;Oberfläche;2177
2.23.8.7.2;Quellcode;2177
2.23.8.7.3;Test;2178
2.23.8.8;43.8.8 Timer in Silverlight nutzen;2178
2.23.8.8.1;Oberfläche;2178
2.23.8.8.2;Quellcode;2178
2.23.8.8.3;Test;2179
2.23.8.9;43.8.9 Dateien lokal speichern;2179
2.23.8.9.1;Oberfläche;2179
2.23.8.9.2;Quellcode;2180
2.23.8.9.3;Bemerkung;2180
2.23.8.10;43.8.10 Drag & Drop realisieren;2181
2.23.8.10.1;Oberfläche;2181
2.23.8.10.2;Quelltext;2181
2.23.8.10.3;Test;2182
2.23.8.11;43.8.11 Auf die Zwischenablage zugreifen;2182
2.23.8.11.1;Oberfläche;2182
2.23.8.11.2;Quelltext;2183
2.23.8.11.3;Test;2183
2.23.8.12;43.8.12 Weitere Fenster öffnen;2184
2.23.8.12.1;Oberfläche (MainPage);2184
2.23.8.12.2;Quellcode (MainPage.xaml.cs);2185
2.23.8.12.3;Oberfläche (SilverlightControl1);2186
2.23.8.12.4;Quellcode (SilverlightControl1.xaml.cs);2186
2.23.8.12.5;Test;2186
2.23.8.12.6;Bemerkungen;2186
2.24;Index;2188




