Visual Basic 2012 - Grundlagen und Profiwissen | 4 |
Vorwort | 54 |
Zum Buchinhalt | 54 |
Zu den Neuigkeiten in Visual Studio 2012 | 55 |
Weitere Bücher von uns | 56 |
Zu den Codebeispielen | 56 |
Nobody is perfect | 57 |
1 Einstieg in Visual Studio 2012 | 60 |
1.1 Die Installation von Visual Studio 2012 | 60 |
1.1.1 Überblick über die Produktpalette | 60 |
Visual Studio 2012 Express | 60 |
Visual Studio 2012 Professional | 61 |
Visual Studio 2012 Premium | 62 |
Visual Studio 2012 Ultimate | 62 |
1.1.2 Anforderungen an Hard- und Software | 62 |
1.2 Unser allererstes VB-Programm | 63 |
1.2.1 Vorbereitungen | 63 |
Compilerpfad eintragen | 63 |
1.2.2 Programm schreiben | 65 |
1.2.3 Programm kompilieren und testen | 66 |
1.2.4 Einige Erläuterungen zum Quellcode | 66 |
Befehlszeilen | 66 |
Imports-Anweisung | 66 |
Module-Anweisung | 67 |
WriteLine- und ReadLine-Methoden | 67 |
Assemblierung | 67 |
1.2.5 Konsolenanwendungen sind langweilig | 67 |
1.3 Die Windows-Philosophie | 68 |
1.3.1 Mensch-Rechner-Dialog | 68 |
1.3.2 Objekt- und ereignisorientierte Programmierung | 68 |
Objekte (Objects) | 69 |
Eigenschaften (Properties) | 69 |
Methoden (Methods) | 69 |
Ereignisse (Events) | 69 |
1.3.3 Windows-Programmierung unter Visual Studio 2012 | 70 |
1.4 Die Entwicklungsumgebung Visual Studio 2012 | 71 |
1.4.1 Der Startdialog | 71 |
1.4.2 Die wichtigsten Fenster | 72 |
Der Projektmappen-Explorer | 73 |
Der Designer | 74 |
Der Werkzeugkasten | 74 |
Das Eigenschaften-Fenster | 74 |
Das Codefenster | 74 |
1.5 Microsofts .NET-Technologie | 75 |
1.5.1 Zur Geschichte von .NET | 75 |
Vom alten VB zu VB.NET | 75 |
Wie funktioniert eine .NET-Sprache? | 76 |
1.5.2 .NET-Features und Begriffe | 77 |
.NET-Framework | 77 |
Die Common Language Specification (CLS) | 78 |
Das Common Type System (CTS) | 79 |
Die Common Language Runtime (CLR) | 79 |
Namespaces ersetzen Registry | 80 |
Assemblierungen | 81 |
Zugriff auf COM-Komponenten | 81 |
Metadaten und Reflexion | 81 |
Attribute | 82 |
Serialisierung | 83 |
Multithreading | 83 |
Objektorientierte Programmierung pur | 84 |
1.6 Wichtige Neuigkeiten in Visual Studio 2012 | 84 |
1.6.1 Die neue Visual Studio 2012-Entwicklungsumgebung | 84 |
Neues Outfit der Toolbar | 84 |
Veränderter Projektmappen-Explorer | 85 |
Registerkartenverwaltung der geöffneten Dateien | 86 |
Neuer Verweis Manager-Dialog | 86 |
ByVal kann weggelassen werden | 86 |
Suchen überall | 87 |
Projekt-Kompatibilität | 87 |
Neue Projekttypen | 87 |
Multi-Monitor -Unterstützung | 87 |
Zusätzliche Tools und Features | 87 |
1.6.2 Neuheiten im .NET Framework 4.5 | 88 |
WinRT-Anwendungen | 88 |
Portable Klassenbibliotheken | 88 |
Parallele Computervorgänge | 88 |
Internet | 89 |
WPF | 89 |
WCF | 89 |
1.6.3 VB 2012 – Sprache und Compiler | 89 |
Asynchrone Methoden | 89 |
Caller Information | 90 |
Iteratoren | 90 |
1.7 Praxisbeispiele | 90 |
1.7.1 Windows-Anwendung für Einsteiger | 90 |
1. Etappe: Visueller Entwurf der Bedienoberfläche | 90 |
2. Etappe: Zuweisen der Objekteigenschaften | 91 |
3. Etappe: Verknüpfen der Objekte mit Ereignissen | 92 |
4. Etappe: Programm kompilieren und testen | 93 |
Bemerkungen | 93 |
1.7.2 Windows-Anwendung für fortgeschrittene Einsteiger | 94 |
1. Etappe: Visueller Entwurf der Bedienoberfläche | 94 |
2. Etappe: Zuweisen der Objekteigenschaften | 95 |
3. Etappe: Verknüpfen der Objekte mit Ereignissen | 96 |
4. Etappe: Programm kompilieren und testen | 98 |
IntelliSense – die hilfreiche Fee | 99 |
Fehlersuche | 100 |
2 Einführung in Visual Basic | 102 |
2.1 Grundbegriffe | 102 |
2.1.1 Anweisungen | 102 |
2.1.2 Bezeichner | 103 |
Namensgebung und Schlüsselwörter | 103 |
Leerzeichen etc. | 104 |
Groß-/Kleinschreibung | 104 |
2.1.3 Kommentare | 104 |
2.1.4 Zeilenumbruch | 105 |
Lange Zeilen teilen | 105 |
Implizite Zeilenfortsetzung | 105 |
Mehrere Anweisungen pro Zeile | 106 |
2.2 Datentypen, Variablen und Konstanten | 107 |
2.2.1 Fundamentale Typen | 107 |
2.2.2 Wertetypen versus Verweistypen | 108 |
Wertetypen | 108 |
Verweistypen | 108 |
2.2.3 Benennung von Variablen | 108 |
2.2.4 Deklaration von Variablen | 109 |
Dim-Anweisung | 109 |
Mehrfachdeklaration | 109 |
Anfangswerte | 110 |
Option Explicit | 110 |
Option Strict | 111 |
2.2.5 Typinferenz | 112 |
2.2.6 Konstanten deklarieren | 112 |
2.2.7 Gültigkeitsbereiche von Deklarationen | 113 |
2.2.8 Lokale Variablen mit Dim | 113 |
2.2.9 Lokale Variablen mit Static | 114 |
2.2.10 Private globale Variablen | 114 |
2.2.11 Public Variablen | 115 |
2.3 Wichtige Datentypen im Überblick | 115 |
2.3.1 Byte, Short, Integer, Long | 115 |
2.3.2 Single, Double und Decimal | 116 |
2.3.3 Char und String | 116 |
2.3.4 Date | 117 |
2.3.5 Boolean | 118 |
2.3.6 Object | 118 |
2.4 Konvertieren von Datentypen | 119 |
2.4.1 Implizite und explizite Konvertierung | 119 |
2.4.2 Welcher Datentyp passt zu welchem? | 120 |
2.4.3 Konvertierungsfunktionen | 121 |
2.4.4 CType-Funktion | 122 |
2.4.5 Konvertieren von Strings | 122 |
ToString-Methode | 122 |
String in Zahl verwandeln | 122 |
EVA-Prinzip | 123 |
2.4.6 Die Convert-Klasse | 124 |
2.4.7 Die Parse-Methode | 124 |
2.4.8 Boxing und Unboxing | 125 |
Boxing | 125 |
Unboxing | 125 |
2.4.9 TryCast-Operator | 126 |
2.4.10 Nullable Types | 126 |
2.5 Operatoren | 127 |
2.5.1 Arithmetische Operatoren | 127 |
2.5.2 Zuweisungsoperatoren | 128 |
2.5.3 Logische Operatoren | 129 |
2.5.4 Vergleichsoperatoren | 130 |
2.5.5 Rangfolge der Operatoren | 130 |
2.6 Kontrollstrukturen | 131 |
2.6.1 Verzweigungsbefehle | 131 |
2.6.2 Schleifenanweisungen | 134 |
For-Next-Schleifen | 134 |
Do-Loop-Schleifen | 135 |
2.7 Benutzerdefinierte Datentypen | 135 |
2.7.1 Enumerationen | 135 |
2.7.2 Strukturen | 136 |
Deklaration | 137 |
Datenzugriff | 137 |
With-Anweisung | 138 |
Bemerkungen | 138 |
2.8 Nutzerdefinierte Funktionen/Prozeduren | 139 |
2.8.1 Deklaration und Syntax | 139 |
Function | 139 |
Sub | 140 |
2.8.2 Parameterübergabe allgemein | 141 |
Signatur der Parameterliste | 141 |
Benannte Parameter | 141 |
2.8.3 Übergabe mit ByVal und ByRef | 142 |
ByVal | 142 |
ByRef | 142 |
2.8.4 Optionale Parameter | 143 |
2.8.5 Überladene Funktionen/Prozeduren | 143 |
2.9 Praxisbeispiele | 144 |
2.9.1 Vom PAP zum Konsolen-Programm | 144 |
Programmablaufplan | 145 |
Programmierung | 145 |
Kompilieren | 146 |
Test | 146 |
2.9.2 Vom Konsolen- zum Windows-Programm | 146 |
Oberfläche | 147 |
Quelltext | 147 |
Test | 148 |
Bemerkungen | 148 |
2.9.3 Schleifenanweisungen kennen lernen | 148 |
Oberfläche | 148 |
Quellcode | 148 |
Test | 150 |
2.9.4 Methoden überladen | 151 |
Oberfläche | 151 |
Quellcode | 151 |
Test | 153 |
2.9.5 Eine Iterationsschleife verstehen | 153 |
Programmablaufplan | 154 |
Oberfläche | 154 |
Quellcode | 154 |
Test | 155 |
Ergänzung | 156 |
3 OOP-Konzepte | 158 |
3.1 Strukturierter versus objektorientierter Entwurf | 158 |
3.1.1 Was bedeutet strukturierte Programmierung? | 158 |
3.1.2 Was heißt objektorientierte Programmierung? | 159 |
3.2 Grundbegriffe der OOP | 160 |
3.2.1 Objekt, Klasse, Instanz | 160 |
3.2.2 Kapselung und Wiederverwendbarkeit | 161 |
3.2.3 Vererbung und Polymorphie | 161 |
3.2.4 Sichtbarkeit von Klassen und ihren Mitgliedern | 162 |
Klassen | 162 |
Klassenmitglieder | 162 |
3.2.5 Allgemeiner Aufbau einer Klasse | 163 |
3.3 Ein Objekt erzeugen | 164 |
3.3.1 Referenzieren und Instanziieren | 165 |
3.3.2 Klassische Initialisierung | 166 |
3.3.3 Objekt-Initialisierer | 166 |
3.3.4 Arbeiten mit dem Objekt | 166 |
3.3.5 Zerstören des Objekts | 167 |
3.4 OOP-Einführungsbeispiel | 167 |
3.4.1 Vorbereitungen | 167 |
3.4.2 Klasse definieren | 168 |
Bemerkungen | 169 |
3.4.3 Objekt erzeugen und initialisieren | 169 |
3.4.4 Objekt verwenden | 169 |
3.4.5 IntelliSense – die hilfreiche Fee | 169 |
3.4.6 Objekt testen | 170 |
3.4.7 Warum unsere Klasse noch nicht optimal ist | 171 |
3.5 Eigenschaften | 171 |
3.5.1 Eigenschaften kapseln | 171 |
Deklarieren von Eigenschaften | 172 |
Zugriff | 173 |
Bemerkung | 173 |
3.5.2 Eigenschaften mit Zugriffsmethoden kapseln | 174 |
3.5.3 Lese-/Schreibschutz für Eigenschaften | 175 |
3.5.4 Statische Eigenschaften | 176 |
3.5.5 Selbst implementierende Eigenschaften | 177 |
3.6 Methoden | 178 |
3.6.1 Öffentliche und private Methoden | 178 |
3.6.2 Überladene Methoden | 179 |
3.6.3 Statische Methoden | 179 |
3.7 Ereignisse | 181 |
3.7.1 Ereignise deklarieren | 181 |
3.7.2 Ereignis auslösen | 181 |
3.7.3 Ereignis auswerten | 182 |
3.7.4 Benutzerdefinierte Ereignisse (Custom Events) | 183 |
Deklaration | 184 |
Anwendung | 185 |
3.8 Arbeiten mit Konstruktor und Destruktor | 187 |
3.8.1 Der Konstruktor erzeugt das Objekt | 187 |
Deklaration | 187 |
Aufruf | 188 |
3.8.2 Bequemer geht’s mit einem Objekt-Initialisierer | 189 |
3.8.3 Destruktor und Garbage Collector räumen auf | 189 |
3.8.4 Mit Using den Lebenszyklus des Objekts kapseln | 192 |
3.9 Vererbung und Polymorphie | 192 |
3.9.1 Vererbungsbeziehungen im Klassendiagramm | 193 |
3.9.2 Überschreiben von Methoden (Method-Overriding) | 194 |
3.9.3 Klassen implementieren | 194 |
Basisklasse CKunde | 194 |
Subklassen | 195 |
Subklasse CPrivatKunde | 197 |
Subklasse CFirmenKunde | 198 |
Testoberfläche | 199 |
3.9.4 Objekte implementieren | 199 |
Praxistest | 200 |
3.9.5 Ausblenden von Mitgliedern durch Vererbung | 201 |
3.9.6 Allgemeine Hinweise und Regeln zur Vererbung | 202 |
3.9.7 Polymorphe Methoden | 203 |
Praxistest | 205 |
3.10 Besondere Klassen und Features | 205 |
3.10.1 Abstrakte Klassen | 205 |
3.10.2 Abstrakte Methoden | 206 |
3.10.3 Versiegelte Klassen | 207 |
3.10.4 Partielle Klassen | 207 |
3.10.5 Die Basisklasse System.Object | 209 |
3.10.6 Property-Accessors | 210 |
3.11 Schnittstellen (Interfaces) | 210 |
3.11.1 Definition einer Schnittstelle | 211 |
3.11.2 Implementieren einer Schnittstelle | 211 |
3.11.3 Abfragen, ob eine Schnittstelle vorhanden ist | 212 |
3.11.4 Mehrere Schnittstellen implementieren | 213 |
3.11.5 Schnittstellenprogrammierung ist ein weites Feld | 213 |
3.12 Praxisbeispiele | 213 |
3.12.1 Eigenschaften sinnvoll kapseln | 213 |
Oberfläche | 214 |
Quellcode CKreis | 214 |
Quellcode Form1 | 215 |
Test | 216 |
Objektinitialisierer | 216 |
3.12.2 Eine statische Klasse anwenden | 217 |
Oberfläche | 217 |
Quellcode CKugel | 217 |
Quellcode Form1 | 217 |
Test | 218 |
3.12.3 Vom fetten zum dünnen Client | 218 |
Oberfläche | 219 |
Quellcode (Fat Client) | 219 |
Test | 222 |
Bemerkungen zum fetten Client | 222 |
Abmagerungskur für den fetten Client | 223 |
Quellcode für CRegister | 224 |
Quellcode für CRechenmodul | 225 |
Quellcode für Form1 | 227 |
Test | 228 |
Bemerkungen | 228 |
3.12.4 Schnittstellenvererbung verstehen | 228 |
Klassendiagramme | 229 |
Oberfläche Form1 | 229 |
Quellcode CPerson | 229 |
Quellcode CKunde | 230 |
Quellcode Form1 | 230 |
Test | 231 |
Quellcode IPerson | 231 |
Quellcode CKunde | 232 |
3.12.5 Aggregation und Vererbung gegenüberstellen | 232 |
Bedienoberfläche | 233 |
Variante 1: Klassen CPerson und CPersonen mit Aggregation | 234 |
Test | 237 |
Variante 2: Klasse CPersonen mit Vererbung | 238 |
Test | 238 |
3.12.6 Eine Klasse zur Matrizenrechnung entwickeln | 239 |
Quellcode der Klasse CMatrix | 239 |
Oberfläche | 241 |
Quellcode von Form1 | 242 |
Test | 244 |
Bemerkung | 244 |
4 Arrays, Strings, Funktionen | 246 |
4.1 Datenfelder (Arrays) | 246 |
4.1.1 Ein Array deklarieren | 246 |
4.1.2 Zugriff auf Array-Elemente | 247 |
4.1.3 Oberen Index ermitteln | 247 |
4.1.4 Explizite Arraygrenzen | 247 |
4.1.5 Arrays erzeugen und initialisieren | 247 |
4.1.6 Zugriff mittels Schleife | 248 |
For Each-Schleife | 248 |
4.1.7 Mehrdimensionale Arrays | 249 |
Mehrdimensional initialisieren | 249 |
4.1.8 Dynamische Arrays | 250 |
ReDim-Anweisung | 250 |
Preserve-Option | 250 |
4.1.9 Zuweisen von Arrays | 251 |
4.1.10 Arrays aus Strukturvariablen | 252 |
4.1.11 Löschen von Arrays | 253 |
4.1.12 Eigenschaften und Methoden von Arrays | 253 |
Wichtige Instanzeneigenschaften und -methoden | 254 |
Array-Dimensionen bestimmen | 254 |
Arrays kopieren | 254 |
Wichtige (statische) Methoden der Array-Klasse | 255 |
Suchen in Arrays | 255 |
4.1.13 Übergabe von Arrays | 256 |
4.2 Zeichenkettenverarbeitung | 257 |
4.2.1 Strings zuweisen | 257 |
4.2.2 Eigenschaften und Methoden eines Strings | 257 |
Wichtige Instanzeneigenschaften und -methoden | 258 |
Einige Beispiele für Instanzeneigenschaften | 258 |
Einige Beispiele für Instanzenmethoden | 259 |
4.2.3 Kopieren eines Strings in ein Char-Array | 260 |
4.2.4 Wichtige (statische) Methoden der String-Klasse | 260 |
Stringvergleich | 261 |
Strings zerlegen und wieder zusammenbauen | 261 |
4.2.5 Die StringBuilder-Klasse | 262 |
Erzeugen | 263 |
Eigenschaften | 264 |
Methoden | 264 |
4.3 Reguläre Ausdrücke | 265 |
4.3.1 Wozu werden reguläre Ausdrücke verwendet? | 265 |
4.3.2 Eine kleine Einführung | 266 |
4.3.3 Wichtige Methoden der Klasse Regex | 266 |
Die Match-Methode | 267 |
Eigenschaften des Match-Objekts | 267 |
Die NextMatch-Methode | 267 |
Die Matches-Methode | 268 |
Der Alternator | 268 |
4.3.4 Kompilierte reguläre Ausdrücke | 268 |
4.3.5 RegexOptions-Enumeration | 269 |
4.3.6 Metazeichen (Escape-Zeichen) | 270 |
4.3.7 Zeichenmengen (Character Sets) | 271 |
4.3.8 Quantifizierer | 272 |
4.3.9 Zero-Width Assertions | 273 |
String- und Zeilengrenzen (^ und $) | 274 |
Wortgrenzen (b) | 274 |
Positiver Lookahead (?=expr) | 275 |
Negativer Lookahead (?!expr) | 276 |
Positiver (?<=expr) und negativer (? | 276 |
4.3.10 Gruppen | 277 |
4.3.11 Text ersetzen | 277 |
4.3.12 Text splitten | 278 |
Trennzeichen im Ergebnis | 278 |
4.4 Datums- und Zeitberechnungen | 279 |
4.4.1 Grundlegendes | 279 |
4.4.2 Wichtige Eigenschaften von DateTime-Variablen | 280 |
4.4.3 Wichtige Methoden von DateTime-Variablen | 281 |
4.4.4 Wichtige Mitglieder der DateTime-Struktur | 282 |
4.4.5 Konvertieren von Datumstrings in DateTime-Werte | 283 |
4.4.6 Die TimeSpan-Struktur | 283 |
4.5 Vordefinierten Funktionen | 285 |
4.5.1 Mathematik | 285 |
Zahlen runden | 285 |
Winkel umrechnen | 286 |
Wurzel- und Potenzoperationen | 286 |
Logarithmus und Exponentialfunktionen | 286 |
4.5.2 Datums- und Zeitfunktionen | 287 |
Wichtige Instanzeneigenschaften und -methoden | 287 |
Wichtige Klasseneigenschaften und -methoden | 289 |
4.6 Zahlen formatieren | 290 |
4.6.1 Die ToString-Methode | 290 |
Zahlenformatierungen | 291 |
Datumsformatierungen | 291 |
4.6.2 Die Format-Methode | 292 |
4.7 Praxisbeispiele | 293 |
4.7.1 Zeichenketten verarbeiten | 293 |
Oberfläche | 293 |
Quellcode | 294 |
Test | 295 |
Bemerkungen | 296 |
4.7.2 Zeichenketten mittels StringBuilder addieren | 296 |
Oberfläche | 296 |
Quellcode Klasse CTest | 297 |
Quellcode Form1 | 298 |
Test | 299 |
Bemerkungen | 300 |
4.7.3 Reguläre Ausdrücke testen | 300 |
Oberfläche | 300 |
Quellcode | 301 |
Test | 301 |
Bemerkungen | 301 |
4.7.4 Methodenaufrufe mit Array-Parametern | 301 |
Oberfläche | 302 |
Quellcode | 302 |
Test | 304 |
Bemerkungen | 304 |
5 Weitere Sprachfeatures | 306 |
5.1 Namespaces (Namensräume) | 306 |
5.1.1 Ein kleiner Überblick | 306 |
5.1.2 Die Imports-Anweisung | 308 |
5.1.3 Namespace-Alias | 308 |
5.1.4 Namespaces in Projekteigenschaften | 309 |
5.1.5 Namespace Alias Qualifizierer | 309 |
5.1.6 Eigene Namespaces einrichten | 310 |
5.2 Überladen von Operatoren | 311 |
5.2.1 Syntaxregeln | 311 |
5.2.2 Praktische Anwendung | 312 |
Klasse CArray | 312 |
Klasse Form1 | 312 |
5.2.3 Konvertierungsoperatoren überladen | 313 |
5.3 Auflistungen (Collections) | 314 |
5.3.1 Beziehungen zwischen den Schnittstellen | 314 |
5.3.2 IEnumerable | 314 |
5.3.3 ICollection | 315 |
5.3.4 IList | 316 |
5.3.5 Iteratoren | 316 |
5.3.6 Die ArrayList-Collection | 317 |
Weitere Eigenschaften und Methoden | 317 |
5.3.7 Die Hashtable | 318 |
5.4 Generische Datentypen | 319 |
5.4.1 Wie es früher einmal war | 319 |
Miserable Typsicherheit bei den alten Collections | 320 |
Eine eigene generische Collection-Klasse bedeutet viel Arbeit | 320 |
Warum uns auch ein Array nicht weiterhilft | 321 |
5.4.2 Typsicherheit durch Generics | 321 |
Einen einfachen generischen Typ deklarieren | 321 |
Generischen Typ verwenden | 322 |
5.4.3 List-Collection ersetzt ArrayList | 322 |
5.4.4 Über die Vorzüge generischer Collections | 323 |
5.4.5 Typbeschränkungen durch Constraints | 324 |
5.4.6 Collection-Initialisierer | 325 |
5.4.7 Generische Methoden | 325 |
5.5 Delegates | 326 |
5.5.1 Delegates sind Methodenzeiger | 326 |
5.5.2 Delegate-Typ definieren | 327 |
5.5.3 Delegate-Objekt erzeugen | 328 |
Mit dem Delegate-Objekt arbeiten | 328 |
5.5.4 Delegates vereinfacht instanziieren | 328 |
5.5.5 Relaxed Delegates | 329 |
5.5.6 Anonyme Methoden | 329 |
5.5.7 Lambda-Ausdrücke | 330 |
5.5.8 Lambda-Ausdrücke in der Task Parallel Library | 331 |
Bemerkungen | 332 |
5.6 Dynamische Programmierung | 333 |
5.6.1 Wozu dynamische Programmierung? | 333 |
5.6.2 Das Prinzip der dynamischen Programmierung | 334 |
Die Klasse DynamicObject | 334 |
Die Klasse ExpandoObject | 335 |
Late Binding | 337 |
5.6.3 Kovarianz und Kontravarianz | 337 |
5.7 Weitere Datentypen | 338 |
5.7.1 BigInteger | 338 |
5.7.2 Complex | 340 |
5.7.3 Tuple(Of T) | 341 |
5.7.4 SortedSet(Of T) | 342 |
5.8 Praxisbeispiele | 343 |
5.8.1 ArrayList versus generische List | 343 |
Oberfläche | 343 |
Quellcode (mit ArrayList) | 344 |
Quellcode (mit generischer List) | 345 |
Test | 345 |
Bemerkungen | 346 |
5.8.2 Delegates und Lambda Expressions | 346 |
Oberfläche | 347 |
Quellcode | 347 |
Test | 349 |
5.8.3 Mit dynamischem Objekt eine Datei durchsuchen | 349 |
Oberfläche | 349 |
Quellcode CDynFile | 349 |
Textdatei hinzufügen | 351 |
Quellcode Form1 | 352 |
Test | 352 |
Bemerkungen | 353 |
6 Einführung in LINQ | 354 |
6.1 LINQ-Grundlagen | 354 |
6.1.1 Die LINQ-Architektur | 354 |
6.1.2 LINQ-Implementierungen | 355 |
6.1.3 Anonyme Typen | 355 |
6.1.4 Erweiterungsmethoden | 357 |
6.2 Abfragen mit LINQ to Objects | 358 |
6.2.1 Grundlegendes zur LINQ-Syntax | 358 |
6.2.2 Zwei alternative Schreibweisen von LINQ-Abfragen | 359 |
6.2.3 Übersicht der wichtigsten Abfrage-Operatoren | 361 |
Der Let-Zuweisungsoperator | 362 |
6.3 LINQ-Abfragen im Detail | 362 |
6.3.1 Die Projektionsoperatoren Select und SelectMany | 363 |
Select | 363 |
SelectMany | 364 |
6.3.2 Der Restriktionsoperator Where | 365 |
6.3.3 Die Sortierungsoperatoren OrderBy und ThenBy | 365 |
OrderBy/OrderByDescending | 365 |
ThenBy/ThenByDescending | 366 |
Reverse | 367 |
6.3.4 Der Gruppierungsoperator GroupBy | 367 |
6.3.5 Verknüpfen mit Join | 368 |
6.3.6 Aggregat-Operatoren | 369 |
Count | 369 |
Sum | 370 |
6.3.7 Verzögertes Ausführen von LINQ-Abfragen | 371 |
6.3.8 Konvertierungsmethoden | 372 |
6.3.9 Abfragen mit PLINQ | 372 |
Probleme mit der Sortierfolge | 374 |
6.4 Praxisbeispiele | 375 |
6.4.1 Die Syntax von LINQ-Abfragen verstehen | 375 |
Oberfläche | 376 |
Quellcode | 376 |
Test | 377 |
Bemerkungen | 378 |
6.4.2 Aggregat-Abfragen mit LINQ | 378 |
Oberfläche | 378 |
Quellcode | 378 |
Test | 380 |
Bemerkungen | 380 |
7 Zugriff auf das Dateisystem | 384 |
7.1 Grundlagen | 384 |
7.1.1 Klassen für Verzeichnis- und Dateioperationen | 385 |
Übersicht | 385 |
7.1.2 Statische versus Instanzen-Klasse | 385 |
7.2 Übersichten | 386 |
7.2.1 Methoden der Directory-Klasse | 386 |
7.2.2 Methoden eines DirectoryInfo-Objekts | 387 |
7.2.3 Eigenschaften eines DirectoryInfo-Objekts | 387 |
7.2.4 Methoden der File-Klasse | 387 |
7.2.5 Methoden eines FileInfo-Objekts | 388 |
7.2.6 Eigenschaften eines FileInfo-Objekts | 389 |
7.3 Operationen auf Verzeichnisebene | 389 |
7.3.1 Existenz eines Verzeichnisses/einer Datei feststellen | 389 |
7.3.2 Verzeichnisse erzeugen und löschen | 390 |
Mit Directory-Klasse | 390 |
Mit DirectoryInfo-Klasse | 390 |
7.3.3 Verzeichnisse verschieben und umbenennen | 391 |
7.3.4 Aktuelles Verzeichnis bestimmen | 391 |
7.3.5 Unterverzeichnisse ermitteln | 391 |
7.3.6 Alle Laufwerke ermitteln | 392 |
7.3.7 Dateien kopieren und verschieben | 393 |
7.3.8 Dateien umbenennen | 394 |
7.3.9 Dateiattribute feststellen | 394 |
Die FileAttribute-Enumeration | 395 |
7.3.10 Verzeichnis einer Datei ermitteln | 396 |
7.3.11 Alle im Verzeichnis enthaltene Dateien ermitteln | 396 |
7.3.12 Dateien und Unterverzeichnisse ermitteln | 396 |
7.4 Zugriffsberechtigungen | 397 |
7.4.1 ACL und ACE | 397 |
7.4.2 SetAccessControl-Methode | 398 |
7.4.3 Zugriffsrechte anzeigen | 398 |
7.5 Weitere wichtige Klassen | 399 |
7.5.1 Die Path-Klasse | 399 |
7.5.2 Die Klasse FileSystemWatcher | 400 |
7.6 Datei- und Verzeichnisdialoge | 402 |
7.6.1 OpenFileDialog und SaveFileDialog | 402 |
Anzeige und Auswertung | 402 |
Wichtige Eigenschaften | 403 |
Dateifilter | 403 |
7.6.2 FolderBrowserDialog | 403 |
Die SpecialFolder-Enumeration | 404 |
7.7 Praxisbeispiele | 405 |
7.7.1 Infos über Verzeichnisse und Dateien gewinnen | 405 |
Oberfläche | 405 |
Quelltext | 405 |
Test | 407 |
7.7.2 Die Verzeichnisstruktur in eine TreeView einlesen | 408 |
Oberfläche | 408 |
Quellcode | 408 |
Test | 409 |
7.7.3 Mit LINQ und RegEx Verzeichnisbäume durchsuchen | 410 |
Oberfläche | 410 |
Quellcode | 411 |
Test | 413 |
Bemerkungen | 414 |
8 Dateien lesen und schreiben | 416 |
8.1 Grundprinzip der Datenpersistenz | 416 |
8.1.1 Dateien und Streams | 416 |
8.1.2 Die wichtigsten Klassen | 417 |
8.1.3 Erzeugen eines Streams | 418 |
8.2 Dateiparameter | 418 |
8.2.1 FileAccess | 418 |
8.2.2 FileMode | 418 |
8.2.3 FileShare | 419 |
8.3 Textdateien | 419 |
8.3.1 Eine Textdatei beschreiben bzw. neu anlegen | 419 |
WriteAllLines/AppendAllText | 420 |
8.3.2 Eine Textdatei lesen | 421 |
ReadAllLines/ReadLines | 421 |
8.4 Binärdateien | 423 |
8.4.1 Lese-/Schreibzugriff | 423 |
8.4.2 Die Methoden ReadAllBytes und WriteAllBytes | 423 |
8.4.3 BinaryReader/BinaryWriter erzeugen | 424 |
8.5 Sequenzielle Dateien | 424 |
8.5.1 Lesen und Schreiben von strukturierten Daten | 424 |
8.5.2 Serialisieren von Objekten | 425 |
8.6 Dateien verschlüsseln und komprimieren | 426 |
8.6.1 Das Methodenpärchen Encrypt-/Decrypt | 427 |
8.6.2 Verschlüsseln unter Windows Vista/Windows 7/8 | 427 |
8.6.3 Verschlüsseln mit der CryptoStream-Klasse | 428 |
8.6.4 Dateien komprimieren | 429 |
8.7 Memory Mapped Files | 430 |
8.7.1 Grundprinzip | 430 |
8.7.2 Erzeugen eines MMF | 431 |
CreateFromFile-Methode | 431 |
CreateNew-Methode | 431 |
8.7.3 Erstellen eines Map View | 431 |
8.8 Praxisbeispiele | 432 |
8.8.1 Auf eine Textdatei zugreifen | 432 |
Oberfläche | 433 |
Quellcode | 433 |
Test | 435 |
8.8.2 Einen Objektbaum speichern | 436 |
Klassendiagramm | 436 |
Klasse CBestellung | 437 |
Klasse CPerson | 438 |
Klasse CKunde | 438 |
Klasse CFirma | 438 |
Klasse CPersistent | 439 |
Form1 | 440 |
Test | 441 |
Anzeige mit DataGridView | 442 |
8.8.3 Ein Memory Mapped File (MMF) verwenden | 442 |
Oberfläche | 443 |
Quellcode | 443 |
Test | 444 |
Bemerkungen | 444 |
9 Asynchrone Programmierung | 446 |
9.1 Übersicht | 447 |
9.1.1 Multitasking versus Multithreading | 447 |
9.1.2 Deadlocks | 448 |
9.1.3 Racing | 448 |
9.2 Programmieren mit Threads | 450 |
9.2.1 Einführungsbeispiel | 450 |
9.2.2 Wichtige Thread-Methoden | 451 |
9.2.3 Wichtige Thread-Eigenschaften | 453 |
9.2.4 Einsatz der ThreadPool-Klasse | 454 |
9.3 Sperrmechanismen | 456 |
9.3.1 Threading ohne SyncLock | 456 |
9.3.2 Threading mit SyncLock | 458 |
Ein anschauliches Beispiel | 459 |
9.3.3 Die Monitor-Klasse | 460 |
Wait und Pulse/PulseAll | 461 |
TryEnter | 463 |
9.3.4 Mutex | 463 |
9.3.5 Methoden für die parallele Ausführung sperren | 465 |
9.3.6 Semaphore | 465 |
9.4 Interaktion mit der Programmoberfläche | 467 |
9.4.1 Die Werkzeuge | 467 |
9.4.2 Einzelne Steuerelemente mit Invoke aktualisieren | 467 |
9.4.3 Mehrere Steuerelemente aktualisieren | 469 |
9.4.4 Ist ein Invoke-Aufruf nötig? | 469 |
9.4.5 Und was ist mit WPF? | 470 |
9.5 Timer-Threads | 471 |
9.6 Die BackgroundWorker-Komponente | 472 |
9.7 Asynchrone Programmier-Entwurfsmuster | 475 |
9.7.1 Kurzübersicht | 475 |
Begin...-Methode | 475 |
End...-Methode | 475 |
Die Rückrufmethode | 476 |
9.7.2 Polling | 476 |
9.7.3 Callback verwenden | 477 |
9.7.4 Callback mit Parameterübergabe verwenden | 478 |
9.7.5 Callback mit Zugriff auf die Programm-Oberfläche | 479 |
9.8 Asynchroner Aufruf beliebiger Methoden | 480 |
9.8.1 Die Beispielklasse | 480 |
9.8.2 Asynchroner Aufruf ohne Callback | 482 |
9.8.3 Asynchroner Aufruf mit Callback und Anzeigefunktion | 482 |
9.8.4 Aufruf mit Rückgabewerten (per Eigenschaft) | 483 |
9.8.5 Aufruf mit Rückgabewerten (per EndInvoke) | 484 |
9.9 Es geht auch einfacher – Async und Await | 485 |
9.9.1 Der Weg von synchron zu asynchron | 485 |
9.9.2 Achtung: Fehlerquellen! | 487 |
9.9.3 Eigene asynchrone Methoden entwickeln | 489 |
9.10 Praxisbeispiele | 491 |
9.10.1 Spieltrieb & Multithreading erleben | 491 |
Aufgabenstellung | 492 |
Oberfläche | 492 |
Quelltext LKW | 493 |
Quelltext Schiff | 496 |
Quelltext Controller | 498 |
Quelltext MyGlobal | 500 |
Quelltext Form1 | 500 |
Test | 502 |
Bemerkungen | 503 |
9.10.2 Prozess- und Thread-Informationen gewinnen | 503 |
Oberfläche | 503 |
Quellcode | 503 |
Test | 507 |
9.10.3 Ein externes Programm starten | 508 |
Oberfläche | 508 |
Quelltext | 508 |
Test | 509 |
Ergänzungen | 509 |
Bemerkung | 510 |
10 Die Task Parallel Library | 512 |
10.1 Überblick | 512 |
10.1.1 Parallel-Programmierung | 512 |
10.1.2 Möglichkeiten der TPL | 515 |
10.1.3 Der CLR-Threadpool | 515 |
10.2 Parallele Verarbeitung mit Parallel.Invoke | 516 |
10.2.1 Aufrufvarianten | 517 |
10.2.2 Einschränkungen | 518 |
10.3 Verwendung von Parallel.For | 518 |
10.3.1 Abbrechen der Verarbeitung | 520 |
10.3.2 Auswerten des Verarbeitungsstatus | 521 |
10.3.3 Und was ist mit anderen Iterator-Schrittweiten? | 521 |
10.4 Collections mit Parallel.ForEach verarbeiten | 522 |
10.5 Die Task-Klasse | 523 |
10.5.1 Einen Task erzeugen | 523 |
10.5.2 Task starten | 524 |
10.5.3 Datenübergabe an den Task | 525 |
10.5.4 Wie warte ich auf das Taskende? | 526 |
10.5.5 Tasks mit Rückgabewerten | 528 |
10.5.6 Die Verarbeitung abbrechen | 531 |
Abbruch per Return | 531 |
Abbruch per CancellationToken | 532 |
10.5.7 Fehlerbehandlung | 535 |
10.5.8 Weitere Eigenschaften | 535 |
Task-Id | 535 |
Status | 536 |
IsCanceled, IsCompleted, IsFaulted | 536 |
TaskCreationOptions | 536 |
10.6 Zugriff auf das Userinterface | 537 |
10.6.1 Task-Ende und Zugriff auf die Oberfläche | 537 |
10.6.2 Zugriff auf das UI aus dem Task heraus | 538 |
10.7 Weitere Datenstrukturen im Überblick | 540 |
10.7.1 Threadsichere Collections | 540 |
10.7.2 Primitive für die Threadsynchronisation | 541 |
10.8 Parallel LINQ (PLINQ) | 541 |
10.9 Die Parallel Diagnostic Tools | 542 |
10.9.1 Fenster für parallele Aufgaben | 542 |
10.9.2 Fenster für parallele Stacks | 543 |
10.9.3 IntelliTrace | 544 |
10.10 Praxisbeispiel: Spieltrieb – Version 2 | 544 |
10.10.1 Aufgabenstellung | 544 |
10.10.2 Global-Klasse | 545 |
10.10.3 Controller | 546 |
10.10.4 LKWs | 547 |
10.10.5 Schiff-Klasse | 549 |
10.10.6 Oberfläche | 551 |
11 Fehlersuche und Behandlung | 554 |
11.1 Der Debugger | 554 |
11.1.1 Allgemeine Beschreibung | 554 |
11.1.2 Die wichtigsten Fenster | 555 |
Befehlsfenster | 555 |
Direktfenster | 556 |
Lokal-Fenster | 556 |
Überwachungsfenster | 557 |
Autofenster | 557 |
Ausgabefenster | 557 |
11.1.3 Debugging-Optionen | 558 |
Einzelschritt-Modus | 559 |
Prozedurschritt-Modus | 559 |
Breakpoints | 559 |
11.1.4 Praktisches Debugging am Beispiel | 560 |
Haltepunkte setzen | 560 |
Abbruchbedingung setzen | 561 |
Trefferanzahl verwenden | 562 |
Einzelschritt-Modus | 562 |
Prozedurschritt | 563 |
Ausführen bis Rücksprung | 563 |
Auswerten von Ausdrücken | 563 |
11.2 Arbeiten mit Debug und Trace | 564 |
11.2.1 Wichtige Methoden von Debug und Trace | 564 |
Write, WriteLine, WriteIf und WriteLineIf | 564 |
IndentLevel, Indent, IndentSize und UnIndent | 566 |
Assert | 566 |
Fail | 567 |
11.2.2 Besonderheiten der Trace-Klasse | 567 |
11.2.3 TraceListener-Objekte | 568 |
TextWriterTraceListener | 568 |
App.config zur Definition verwenden | 569 |
EventLogTraceListener | 570 |
11.3 Caller Information | 571 |
11.3.1 Attribute | 571 |
11.3.2 Anwendung | 571 |
11.4 Fehlerbehandlung | 572 |
11.4.1 Anweisungen zur Fehlerbehandlung | 572 |
11.4.2 Try-Catch | 572 |
Ausnahmen über Fehlerklassen auswerten | 573 |
Spezifische Fehlerklassen auswerten | 574 |
Fehler erneut auslösen | 575 |
11.4.3 Try-Finally | 577 |
11.4.4 Das Standardverhalten bei Ausnahmen festlegen | 579 |
11.4.5 Die Exception-Klasse | 580 |
11.4.6 Fehler/Ausnahmen auslösen | 580 |
11.4.7 Eigene Fehlerklassen | 581 |
11.4.8 Exceptionhandling zur Entwurfszeit | 583 |
11.4.9 Code Contracts | 583 |
12 Einführung in WPF | 588 |
Und was ist mit Silverlight? | 589 |
12.1 Neues aus der Gerüchteküche | 589 |
12.1.1 Silverlight | 589 |
12.1.2 WPF | 589 |
12.2 Einführung | 590 |
12.2.1 Was kann eine WPF-Anwendung? | 590 |
12.2.2 Die eXtensible Application Markup Language | 592 |
Eine erste XAML-Anwendung | 593 |
Probleme mit dem Stammelement | 594 |
Ein kleines Experiment | 595 |
Soll ich das alles von Hand eintippen? | 596 |
12.2.3 Verbinden von XAML und Basic-Code | 596 |
Application.xaml | 596 |
Application.xaml.vb | 597 |
MainWindow.xaml | 598 |
MainWindow.xaml.vb | 599 |
Ein erster Ereignis-Handler | 599 |
Und wo ist mein Button-Objekt? | 600 |
Brauche ich unbedingt eine Trennung von Code und XAML? | 601 |
Kann ich Oberflächen auch per Code erzeugen? | 601 |
12.2.4 Zielplattformen | 602 |
12.2.5 Applikationstypen | 602 |
WPF-Anwendung | 602 |
WPF-Browseranwendungen | 603 |
12.2.6 Vorteile und Nachteile von WPF-Anwendungen | 603 |
12.2.7 Weitere Dateien im Überblick | 604 |
Was sind .BAML-Dateien und was passiert damit? | 604 |
Worum handelt es sich bei den .G.VB-Dateien? | 605 |
12.3 Alles beginnt mit dem Layout | 607 |
12.3.1 Allgemeines zum Layout | 607 |
12.3.2 Positionieren von Steuerelementen | 609 |
Was sind das überhaupt für Maßangaben? | 609 |
Top/Left/Width/Height | 610 |
MinWidth/MaxWidth/MinHeight/MaxHeight | 610 |
Margin/Padding | 611 |
HorizontalAlignment/VerticalAlignment | 612 |
12.3.3 Canvas | 612 |
12.3.4 StackPanel | 613 |
12.3.5 DockPanel | 615 |
12.3.6 WrapPanel | 617 |
12.3.7 UniformGrid | 617 |
12.3.8 Grid | 619 |
Definition des Grundlayouts | 619 |
Zuordnen von Kind-Elementen | 621 |
Verwendung des GridSplitters | 623 |
12.3.9 ViewBox | 623 |
12.3.10 TextBlock | 624 |
Textformatierungen | 626 |
Besonderheit von Leerzeichen/Zeilenumbrüchen | 626 |
Textausrichtung | 627 |
12.4 Das WPF-Programm | 627 |
12.4.1 Die Application-Klasse | 628 |
12.4.2 Das Startobjekt festlegen | 628 |
12.4.3 Kommandozeilenparameter verarbeiten | 630 |
12.4.4 Die Anwendung beenden | 630 |
12.4.5 Auswerten von Anwendungsereignissen | 631 |
12.5 Die Window-Klasse | 632 |
12.5.1 Position und Größe festlegen | 632 |
12.5.2 Rahmen und Beschriftung | 632 |
12.5.3 Das Fenster-Icon ändern | 633 |
12.5.4 Anzeige weiterer Fenster | 633 |
12.5.5 Transparenz | 633 |
12.5.6 Abstand zum Inhalt festlegen | 634 |
12.5.7 Fenster ohne Fokus anzeigen | 635 |
12.5.8 Ereignisfolge bei Fenstern | 635 |
12.5.9 Ein paar Worte zur Schriftdarstellung | 636 |
TextOptions.TextFormattingMode | 636 |
TextOptions.TextRenderingMode | 637 |
12.5.10 Ein paar Worte zur Controldarstellung | 638 |
12.5.11 Wird mein Fenster komplett mit WPF gerendert? | 640 |
13 Übersicht WPF-Controls | 642 |
13.1 Allgemeingültige Eigenschaften | 642 |
13.2 Label | 644 |
13.3 Button, RepeatButton, ToggleButton | 644 |
13.3.1 Schaltflächen für modale Dialoge | 645 |
13.3.2 Schaltflächen mit Grafik | 646 |
13.4 TextBox, PasswortBox | 647 |
13.4.1 TextBox | 647 |
13.4.2 PasswordBox | 649 |
13.5 CheckBox | 650 |
13.6 RadioButton | 651 |
13.7 ListBox, ComboBox | 653 |
13.7.1 ListBox | 653 |
13.7.2 ComboBox | 656 |
13.7.3 Den Content formatieren | 657 |
13.8 Image | 659 |
13.8.1 Grafik per XAML zuweisen | 659 |
13.8.2 Grafik zur Laufzeit zuweisen | 659 |
13.8.3 Bild aus Datei laden | 660 |
13.8.4 Die Grafikskalierung beeinflussen | 661 |
13.9 MediaElement | 662 |
13.10 Slider, ScrollBar | 665 |
13.10.1 Slider | 665 |
13.10.2 ScrollBar | 666 |
13.11 ScrollViewer | 667 |
13.12 Menu, ContextMenu | 668 |
13.12.1 Menu | 668 |
13.12.2 Tastenkürzel | 669 |
13.12.3 Grafiken | 670 |
13.12.4 Weitere Möglichkeiten | 671 |
13.12.5 ContextMenu | 672 |
13.13 ToolBar | 673 |
Der ToolBarTray | 674 |
13.14 StatusBar, ProgressBar | 676 |
13.14.1 StatusBar | 676 |
13.14.2 ProgressBar | 678 |
13.15 Border, GroupBox, BulletDecorator | 679 |
13.15.1 Border | 679 |
13.15.2 GroupBox | 680 |
13.15.3 BulletDecorator | 681 |
13.16 RichTextBox | 683 |
13.16.1 Verwendung und Anzeige von vordefiniertem Text | 683 |
13.16.2 Neues Dokument zur Laufzeit erzeugen | 685 |
13.16.3 Sichern von Dokumenten | 685 |
13.16.4 Laden von Dokumenten | 687 |
13.16.5 Texte per Code einfügen/modifizieren | 688 |
13.16.6 Texte formatieren | 689 |
13.16.7 EditingCommands | 691 |
13.16.8 Grafiken/Objekte einfügen | 691 |
13.16.9 Rechtschreibkontrolle | 693 |
13.17 FlowDocumentPageViewer & Co. | 693 |
13.17.1 FlowDocumentPageViewer | 693 |
13.17.2 FlowDocumentReader | 694 |
13.17.3 FlowDocumentScrollViewer | 694 |
13.18 FlowDocument | 694 |
13.18.1 FlowDocument per XAML beschreiben | 695 |
13.18.2 FlowDocument per Code erstellen | 697 |
13.19 DocumentViewer | 698 |
13.20 Expander, TabControl | 699 |
13.20.1 Expander | 699 |
13.20.2 TabControl | 701 |
13.21 Popup | 702 |
13.22 TreeView | 704 |
13.23 ListView | 707 |
13.24 DataGrid | 708 |
13.25 Calendar/DatePicker | 708 |
DisplayMode | 709 |
DisplayDate, SelectedDate und SelectedDates | 709 |
Auswahlmodi | 709 |
Sperrtage | 711 |
Calendar skalieren | 712 |
13.26 InkCanvas | 712 |
13.26.1 Stift-Parameter definieren | 713 |
13.26.2 Die Zeichenmodi | 714 |
13.26.3 Inhalte laden und sichern | 714 |
13.26.4 Konvertieren in eine Bitmap | 715 |
13.26.5 Weitere Eigenschaften | 716 |
13.27 Ellipse, Rectangle, Line und Co. | 716 |
13.27.1 Ellipse | 716 |
13.27.2 Rectangle | 717 |
13.27.3 Line | 717 |
13.28 Browser | 718 |
13.29 Ribbon | 720 |
13.29.1 Allgemeine Grundlagen | 720 |
13.29.2 Download/Installation | 722 |
13.29.3 Erste Schritte | 722 |
13.29.4 Registerkarten und Gruppen | 723 |
13.29.5 Kontextabhängige Registerkarten | 724 |
13.29.6 Einfache Beschriftungen | 725 |
13.29.7 Schaltflächen | 726 |
Schaltflächen zusammenfassen | 727 |
13.29.8 Auswahllisten | 727 |
13.29.9 Optionsauswahl | 730 |
13.29.10 Texteingaben | 730 |
13.29.11 Screentips | 731 |
13.29.12 Symbolleiste für den Schnellzugriff | 732 |
13.29.13 Das RibbonWindow | 732 |
13.29.14 Menüs | 733 |
13.29.15 Anwendungsmenü | 735 |
13.29.16 Alternativen | 738 |
13.30 Chart | 738 |
13.31 WindowsFormsHost | 739 |
14 Wichtige WPF-Techniken | 742 |
14.1 Eigenschaften | 742 |
14.1.1 Abhängige Eigenschaften (Dependency Properties) | 742 |
14.1.2 Angehängte Eigenschaften (Attached Properties) | 743 |
14.2 Einsatz von Ressourcen | 744 |
14.2.1 Was sind eigentlich Ressourcen? | 744 |
14.2.2 Wo können Ressourcen gespeichert werden? | 744 |
14.2.3 Wie definiere ich eine Ressource? | 746 |
14.2.4 Statische und dynamische Ressourcen | 747 |
14.2.5 Wie werden Ressourcen adressiert? | 748 |
14.2.6 System-Ressourcen einbinden | 749 |
14.3 Das WPF-Ereignis-Modell | 749 |
14.3.1 Einführung | 749 |
14.3.2 Routed Events | 750 |
14.3.3 Direkte Events | 752 |
14.4 Verwendung von Commands | 752 |
14.4.1 Einführung in Commands | 753 |
14.4.2 Verwendung vordefinierter Commands | 753 |
14.4.3 Das Ziel des Commands | 755 |
14.4.4 Vordefinierte Commands | 756 |
14.4.5 Commands an Ereignismethoden binden | 756 |
14.4.6 Wie kann ich ein Command per Code auslösen? | 758 |
14.4.7 Command-Ausführung verhindern | 758 |
14.5 Das WPF-Style-System | 758 |
14.5.1 Übersicht | 758 |
14.5.2 Benannte Styles | 759 |
14.5.3 Typ-Styles | 761 |
14.5.4 Styles anpassen und vererben | 762 |
Styles anpassen (überschreiben) | 762 |
Style ersetzen | 762 |
Styles vererben | 763 |
Styleänderung per Code | 764 |
14.6 Verwenden von Triggern | 764 |
14.6.1 Eigenschaften-Trigger (Property triggers) | 764 |
14.6.2 Ereignis-Trigger | 766 |
14.6.3 Daten-Trigger | 767 |
14.7 Einsatz von Templates | 768 |
14.7.1 Template abrufen und verändern | 772 |
14.8 Transformationen, Animationen, StoryBoards | 775 |
14.8.1 Transformationen | 775 |
Drehen mit RotateTransform | 776 |
Skalieren mit ScaleTransform | 777 |
Verformen mit SkewTransform | 777 |
Verschieben mit TranslateTransform | 778 |
Und alles zusammen mit TransformGroup | 778 |
14.8.2 Animationen mit dem StoryBoard realisieren | 780 |
Animation per VB-Code realisieren | 781 |
Animation per Code steuern | 781 |
Mehrere Animationen zusammenfassen | 784 |
14.9 Praxisbeispiel | 784 |
14.9.1 Arbeiten mit Microsoft Expression Blend | 784 |
Eine Animation realisieren | 785 |
Der XAML-Code | 786 |
Test | 787 |
Bemerkung | 787 |
15 WPF-Datenbindung | 790 |
15.1 Grundprinzip | 790 |
15.1.1 Bindungsarten | 791 |
15.1.2 Wann wird eigentlich die Quelle aktualisiert? | 792 |
15.1.3 Geht es auch etwas langsamer? | 793 |
15.1.4 Bindung zur Laufzeit realisieren | 794 |
15.2 Binden an Objekte | 796 |
15.2.1 Objekte im Code instanziieren | 796 |
15.2.2 Verwenden der Instanz im VB-Quellcode | 797 |
15.2.3 Anforderungen an die Quell-Klasse | 798 |
15.2.4 Instanziieren von Objekten per VB-Code | 800 |
15.3 Binden von Collections | 801 |
15.3.1 Anforderung an die Collection | 801 |
15.3.2 Einfache Anzeige | 802 |
15.3.3 Navigation zwischen den Objekten | 803 |
15.3.4 Einfache Anzeige in einer ListBox | 804 |
Verwendung von DisplayMemberPath | 805 |
15.3.5 DataTemplates zur Anzeigeformatierung | 806 |
15.3.6 Mehr zu List- und ComboBox | 807 |
SelectedIndex | 807 |
SelectedItem/SelectedItems | 807 |
SelectedValuePath und SelectedValue | 808 |
15.3.7 Verwenden der ListView | 809 |
Einfache Bindung | 809 |
Sortieren der Einträge | 810 |
15.4 Noch einmal zurück zu den Details | 811 |
15.4.1 Navigieren in den Daten | 811 |
15.4.2 Sortieren | 812 |
15.4.3 Filtern | 813 |
15.4.4 Live Shaping | 814 |
15.5 Anzeige von Datenbankinhalten | 815 |
15.5.1 Datenmodell per LINQ to SQL-Designer erzeugen | 815 |
15.5.2 Die Programm-Oberfläche | 816 |
15.5.3 Der Zugriff auf die Daten | 818 |
15.6 Drag & Drop-Datenbindung | 819 |
15.6.1 Vorgehensweise | 819 |
15.6.2 Weitere Möglichkeiten | 822 |
15.7 Formatieren von Werten | 823 |
15.7.1 IValueConverter | 824 |
15.7.2 BindingBase.StringFormat-Eigenschaft | 826 |
15.8 Das DataGrid als Universalwerkzeug | 827 |
15.8.1 Grundlagen der Anzeige | 828 |
UI-Virtualisierung | 829 |
Spalten selbst definieren | 829 |
Zusatzinformationen in den Zeilen anzeigen | 831 |
15.8.2 Vom Betrachten zum Editieren | 832 |
15.9 Praxisbeispiele | 832 |
15.9.1 Collections in Hintergrundthreads füllen | 832 |
Oberfläche | 833 |
Das Problem | 833 |
Lösung (bis .NET 4.0) | 834 |
Test | 835 |
Lösung (ab .NET 4.5) | 835 |
Test | 836 |
15.9.2 Drag & Drop-Bindung bei 1:n-Beziehungen | 836 |
Oberfläche | 836 |
Quellcode (XAML) | 837 |
Quellcode (VB) | 838 |
Test | 839 |
16 Druckausgabe mit WPF | 840 |
16.1 Grundlagen | 840 |
16.1.1 XPS-Dokumente | 840 |
16.1.2 System.Printing | 841 |
16.1.3 System.Windows.Xps | 842 |
16.2 Einfache Druckausgaben mit dem PrintDialog | 842 |
16.3 Mehrseitige Druckvorschau-Funktion | 845 |
16.3.1 Fix-Dokumente | 845 |
Einsatzbeispiel | 845 |
Die Klasse FixedPrintManager | 849 |
16.3.2 Flow-Dokumente | 851 |
Einführungsbeispiel | 851 |
Die Klasse FlowPrintManager | 853 |
16.4 Druckerinfos, -auswahl, -konfiguration | 854 |
16.4.1 Die installierten Drucker bestimmen | 855 |
16.4.2 Den Standarddrucker bestimmen | 856 |
16.4.3 Mehr über einzelne Drucker erfahren | 856 |
16.4.4 Spezifische Druckeinstellungen vornehmen | 858 |
16.4.5 Direkte Druckausgabe | 860 |
17 Erste Schritte in WinRT | 864 |
17.1 Grundkonzepte und Begriffe | 864 |
17.1.1 Windows Runtime (WinRT) | 864 |
17.1.2 Windows Store Apps | 865 |
17.1.3 Fast and Fluid | 866 |
17.1.4 Process Sandboxing und Contracts | 867 |
17.1.5 .NET WinRT-Profil | 869 |
17.1.6 Language Projection | 869 |
17.1.7 Vollbildmodus | 871 |
17.1.8 Windows Store | 871 |
17.1.9 Zielplattformen | 872 |
17.2 Entwurfsumgebung | 873 |
17.2.1 Betriebssystem | 873 |
17.2.2 Windows-Simulator | 874 |
17.2.3 Remote-Debugging | 876 |
17.3 Ein (kleines) Einstiegsbeispiel | 877 |
17.3.1 Aufgabenstellung | 877 |
17.3.2 Quellcode | 877 |
17.3.3 Oberflächenentwurf | 880 |
17.3.4 Installation und Test | 882 |
17.3.5 Verbesserungen | 883 |
Persistenz | 883 |
Touchscreen | 885 |
17.3.6 Fazit | 886 |
17.4 Weitere Details zu WinRT | 888 |
17.4.1 Wo ist WinRT einzuordnen? | 888 |
17.4.2 Die WinRT-API | 889 |
Benutzerschnittstelle | 890 |
Daten & Kommunikation | 890 |
Geräte und Medien | 891 |
Anwendungsdienste | 891 |
17.4.3 Wichtige WinRT-Namespaces | 891 |
17.4.4 Der Unterbau | 892 |
Die Schnittstellen | 892 |
Language Projection | 893 |
Assemblies für WinRT | 894 |
17.5 Gedanken zum Thema "WinRT & Tablets" | 895 |
17.5.1 Windows 8-Oberfläche versus Desktop | 895 |
17.5.2 Tablets und Touchscreens | 895 |
17.6 Praxisbeispiel | 897 |
17.6.1 WinRT in Desktop-Applikationen nutzen | 897 |
Oberfläche | 897 |
Quellcode | 898 |
Test | 899 |
Bemerkungen | 899 |
18 WinRT-Oberflächen entwerfen | 900 |
18.1 Grundkonzepte | 900 |
18.1.1 XAML (oder HTML 5) für die Oberfläche | 901 |
18.1.2 Die Page, der Frame und das Window | 902 |
18.1.3 Das Befehlsdesign | 903 |
App-Leisten | 904 |
Settingsbereich | 905 |
18.1.4 Die Navigationsdesigns | 905 |
18.1.5 Achtung: Fingereingabe! | 906 |
18.1.6 Verwendung von Schriftarten | 907 |
18.2 Projekttypen und Seitentemplates | 907 |
18.2.1 Leere App | 907 |
18.2.2 Geteilte App (Split App) | 909 |
18.2.3 Raster-App (Grid App) | 911 |
18.2.4 Leere Seite (Blank Page) | 912 |
18.2.5 Standardseite (Basic Page) | 913 |
18.2.6 Ein eigenes Grundlayout erstellen | 915 |
18.3 Seitenauswahl und -navigation | 916 |
18.3.1 Die Startseite festlegen | 916 |
18.3.2 Navigation und Parameterübergabe | 916 |
18.3.3 Den Seitenstatus erhalten | 917 |
18.4 Die vier App-Ansichten | 918 |
18.4.1 Vollbild quer und hochkant | 918 |
18.4.2 Angedockt und Füllmodus | 918 |
18.4.3 Reagieren auf die Änderung | 919 |
SizeChanged auswerten | 919 |
VisualStateManager | 920 |
18.4.4 Angedockten Modus aktiv beenden | 922 |
18.5 Skalieren von Apps | 923 |
18.6 Praxisbeispiele | 925 |
18.6.1 Seitennavigation und Parameterübergabe | 925 |
Oberfläche BasicPage1 | 925 |
Quellcode BasicPage1 | 926 |
Oberfläche BasicPage2 | 926 |
Quellcode BasicPage2 | 926 |
Test | 926 |
Bemerkung | 927 |
18.6.2 Auf Ansichtsänderungen reagieren | 927 |
Oberfläche & Quellcode BasicPage1 | 927 |
Oberfläche & Quellcode BlankPage1 | 927 |
Oberfläche der beiden Frame-Seiten | 929 |
Oberfläche & Quellcode BasicPage2 | 929 |
Test | 930 |
18.7 Tipps & Tricks | 930 |
18.7.1 Symbole für WinRT-Oberflächen finden | 930 |
18.7.2 Wie werde ich das Grufti-Layout schnell los? | 931 |
19 Die wichtigsten Controls | 934 |
19.1 Einfache WinRT-Controls | 934 |
19.1.1 TextBlock, RichTextBlock | 934 |
19.1.2 Button, HyperlinkButton, RepeatButton | 937 |
19.1.3 CheckBox, RadioButton, ToggleButton, ToggleSwitch | 939 |
19.1.4 TextBox, PasswordBox, RichEditBox | 940 |
19.1.5 Image | 944 |
19.1.6 ScrollBar, Slider, ProgressBar, ProgressRing | 945 |
19.1.7 Border, Ellipse, Rectangle | 947 |
19.2 Layout-Controls | 948 |
19.2.1 Canvas | 948 |
19.2.2 StackPanel | 949 |
19.2.3 ScrollViewer | 949 |
19.2.4 Grid | 950 |
19.2.5 VariableSizedWrapGrid | 951 |
19.3 Listendarstellungen | 952 |
19.3.1 ComboBox, ListBox | 952 |
19.3.2 ListView | 956 |
19.3.3 GridView | 958 |
19.3.4 FlipView | 960 |
19.4 Sonstige Controls | 962 |
19.4.1 CaptureElement | 962 |
19.4.2 MediaElement | 963 |
19.4.5 ToolTip | 966 |
19.5 Praxisbeispiele | 968 |
19.5.1 Einen StringFormat-Konverter implementieren | 968 |
Quellcode Klasse StringFormatConverter | 968 |
Verwendung des Konverters | 969 |
Test | 970 |
19.5.2 Besonderheiten der TextBox kennen lernen | 970 |
Virtuelle Tastatur | 970 |
Tasteneingaben validieren/filtern | 972 |
19.5.3 Daten in der GridView gruppieren | 973 |
Oberfläche | 974 |
Quelltext | 975 |
Test | 976 |
Bemerkung | 976 |
19.5.4 Das SemanticZoom-Control verwenden | 978 |
Oberflächen | 979 |
Quellcode | 981 |
Test | 982 |
19.5.5 Die CollectionViewSource verwenden | 983 |
Oberfläche | 983 |
Quelltext | 984 |
Test | 985 |
19.5.6 Zusammenspiel ListBox/AppBar | 986 |
Oberfläche | 986 |
Quelltext | 987 |
Test | 989 |
19.5.7 Musikwiedergabe im Hintergrund realisieren | 989 |
Oberfläche | 990 |
Quelltext | 991 |
Test | 993 |
Bemerkung | 993 |
20 Apps im Detail | 994 |
20.1 Ein Windows Store App-Projekt im Detail | 994 |
20.1.1 Contracts und Extensions | 995 |
20.1.2 AssemblyInfo.vb | 996 |
20.1.3 Verweise | 997 |
20.1.4 App.xaml und App.xaml.vb | 998 |
20.1.5 Package.appxmanifest | 999 |
Anwendungsbenutzeroberfläche | 999 |
Funktionen | 1000 |
Deklarationen | 1002 |
Verpacken | 1003 |
20.1.6 Application1_TemporaryKey.pfx | 1003 |
20.1.7 MainPage.xaml & MainPage.xaml.vb | 1003 |
20.1.8 Datentyp-Konverter/Hilfsklassen | 1003 |
BooleanToVisibilityConverter.vb | 1004 |
BooleanNegationConverter.vb | 1005 |
RichTextColumns.vb | 1005 |
SuspensionManager.vb | 1005 |
LayoutAwarePage.vb | 1006 |
20.1.9 StandardStyles.xaml | 1006 |
20.1.10 Assets/Symbole | 1007 |
20.1.11 Nach dem Kompilieren | 1008 |
20.2 Der Lebenszyklus einer WinRT-App | 1008 |
20.2.1 Möglichkeiten der Aktivierung von Apps | 1010 |
20.2.2 Der Splash Screen | 1012 |
20.2.3 Suspending | 1012 |
20.2.4 Resuming | 1013 |
20.2.5 Beenden von Apps | 1014 |
20.2.6 Die Ausnahmen von der Regel | 1015 |
20.2.7 Debuggen | 1015 |
Verwendung einer Protokolldatei | 1015 |
Debuggen mit DebugView | 1017 |
Steuern der Programmzustände über Visual Studio | 1018 |
Debuggen von Contract-aktivierten Apps | 1018 |
20.3 Daten speichern und laden | 1019 |
20.3.1 Grundsätzliche Überlegungen | 1019 |
20.3.2 Worauf und wie kann ich zugreifen? | 1019 |
20.3.3 Das AppData-Verzeichnis | 1020 |
LocalFolder | 1020 |
RoamingFolder | 1021 |
TemporaryFolder | 1021 |
20.3.4 Das Anwendungs-Installationsverzeichnis | 1022 |
20.3.5 Das Downloads-Verzeichnis | 1023 |
20.3.6 Sonstige Verzeichnisse | 1024 |
20.3.7 Anwendungsdaten lokal sichern und laden | 1025 |
20.3.8 Daten in der Cloud ablegen/laden (Roaming) | 1027 |
20.3.9 Aufräumen | 1029 |
20.3.10 Sensible Informationen speichern | 1029 |
20.4 Praxisbeispiele | 1031 |
20.4.1 Unterstützung für den Search-Contract bieten | 1031 |
Oberfläche | 1032 |
Quelltext (App.xaml.vb) | 1033 |
Quelltext (SearchPage.xaml.vb) | 1036 |
Quelltext (DetailPage.xaml.vb) | 1036 |
Test | 1037 |
Erweiterungen | 1037 |
20.4.2 Die Auto-Play-Funktion unterstützen | 1038 |
Anpassen Package.appxmanifest | 1038 |
Quelltext | 1040 |
Oberfläche | 1041 |
Test | 1041 |
20.4.3 Einen zusätzlichen Splash Screen einsetzen | 1042 |
Oberfläche (ErsatzSplashscreen.xaml) | 1042 |
Quellcode (App.xaml.vb) | 1043 |
Quellcode (ErsatzSplashScreen.xaml.vb) | 1043 |
Test | 1044 |
20.4.4 Eine Dateiverknüpfung erstellen | 1044 |
Oberfläche | 1044 |
Quelltext (App.xaml.vb) | 1045 |
Quelltext (BasicPage.xaml.vb) | 1046 |
Test | 1046 |
Ergänzungen | 1047 |
21 WinRT-Techniken | 1050 |
21.1 Arbeiten mit Dateien/Verzeichnissen | 1050 |
21.1.1 Verzeichnisinformationen auflisten | 1050 |
21.1.2 Unterverzeichnisse auflisten | 1053 |
21.1.3 Verzeichnisse erstellen/löschen | 1055 |
21.1.4 Dateien auflisten | 1056 |
21.1.5 Dateien erstellen/schreiben/lesen | 1058 |
Datei erstellen | 1058 |
Schreibzugriff mit FileIO | 1059 |
Schreibzugriff mit StreamWriter | 1060 |
Lesezugriff mit FileIO | 1061 |
Lesezugriff mit StreamReader | 1061 |
21.1.6 Dateien kopieren/umbenennen/löschen | 1062 |
21.1.7 Verwenden der Dateipicker | 1064 |
FileOpenPicker | 1064 |
FileSavePicker | 1067 |
FolderPicker | 1068 |
21.1.8 StorageFile-/StorageFolder-Objekte speichern | 1070 |
21.1.9 Verwenden der Most Recently Used-Liste | 1072 |
21.2 Datenaustausch zwischen Apps/Programmen | 1073 |
21.2.1 Zwischenablage | 1073 |
Texte kopieren und einfügen | 1074 |
Bilder kopieren und einfügen | 1076 |
Dateien kopieren/verschieben und abrufen | 1077 |
Zwischenablage überwachen | 1079 |
21.2.2 Teilen von Inhalten | 1080 |
Funktion "Teilen" programmgesteuert aufrufen | 1083 |
Sie möchten temporär keine Daten teilen | 1083 |
21.2.3 Eine App als Freigabeziel verwenden | 1084 |
21.2.4 Zugriff auf die Kontaktliste | 1084 |
21.3 Spezielle Oberflächenelemente | 1086 |
21.3.1 MessageDialog | 1086 |
Dialog mit Auswahl | 1087 |
Alternativen beim Auswerten der Tasten | 1088 |
Ergänzungen | 1089 |
21.3.2 Popup-Benachrichtigungen | 1089 |
Wann sollten Sie Popup-Benachrichtigungen einsetzen? | 1090 |
Was können Sie alles parametrieren? | 1092 |
Und wie funktioniert das alles? | 1092 |
Unser ToastNotification-"Bäckerei" | 1093 |
Prüfen auf Funktionsfähigkeit | 1096 |
21.3.3 PopUp/Flyouts | 1097 |
21.3.4 Das PopupMenu einsetzen | 1101 |
21.3.5 Eine AppBar verwenden | 1103 |
21.4 Datenbanken und Windows Store Apps | 1108 |
21.4.1 Der Retter in der Not: SQLite! | 1108 |
21.4.2 Verwendung/Kurzüberblick | 1108 |
Was eigentlich ist SQLite? | 1108 |
Vorteile | 1109 |
Nachteile | 1109 |
21.4.3 Installation | 1110 |
21.4.4 Wie kommen wir zu einer neuen Datenbank? | 1112 |
21.4.5 Wie werden die Daten manipuliert? | 1116 |
21.5 Vertrieb der App | 1118 |
21.5.1 Verpacken der App | 1118 |
21.5.2 Windows App Certification Kit | 1120 |
21.5.3 App-Installation per Skript | 1122 |
21.6 Ein Blick auf die App-Schwachstellen | 1123 |
21.6.1 Quellcodes im Installationsverzeichnis | 1123 |
21.6.2 Zugriff auf den App-Datenordner | 1125 |
21.7 Praxisbeispiele | 1125 |
21.7.1 Ein Verzeichnis auf Änderungen überwachen | 1125 |
Oberfläche | 1126 |
Quellcode | 1126 |
Test | 1127 |
21.7.2 Eine App als Freigabeziel verwenden | 1128 |
Oberfläche | 1128 |
Registrieren der App als Freigabeziel | 1129 |
Quellcode (App.xaml.vb) | 1130 |
Quellcode (InsertPage.xaml.vb) | 1130 |
Test | 1132 |
21.7.3 ToastNotifications einfach erzeugen | 1133 |
Quellcode | 1133 |
Test | 1137 |
Index | 1148 |
Ergänzungsband | 1170 |
Zweites Vorwort | 1194 |
22 XML in Theorie und Praxis | 1198 |
22.1 XML – etwas Theorie | 1198 |
22.1.1 Übersicht | 1198 |
22.1.2 Der XML-Grundaufbau | 1201 |
22.1.3 Wohlgeformte Dokumente | 1202 |
22.1.4 Processing Instructions (PI) | 1205 |
22.1.5 Elemente und Attribute | 1205 |
22.1.6 Verwendbare Zeichensätze | 1207 |
22.2 XSD-Schemas | 1209 |
22.2.1 XSD-Schemas und ADO.NET | 1209 |
22.2.2 XML-Schemas in Visual Studio analysieren | 1211 |
Der XML-Schema-Explorer | 1212 |
Ausgangsansicht des XML-Schema-Designer | 1212 |
Inhaltsmodellansicht | 1213 |
XML-Editor | 1214 |
22.2.3 XML-Datei mit XSD-Schema erzeugen | 1214 |
22.2.4 XSD-Schema aus einer XML-Datei erzeugen | 1215 |
22.3 XML-Integration in Visual Basic | 1216 |
22.3.1 XML-Literale | 1216 |
22.3.2 Einfaches Navigieren durch späte Bindung | 1219 |
22.3.3 Die LINQ to XML-API | 1221 |
22.3.4 Neue XML-Dokumente erzeugen | 1222 |
22.3.5 Laden und Sichern von XML-Dokumenten | 1224 |
22.3.6 Navigieren in XML-Daten | 1226 |
22.3.7 Auswählen und Filtern | 1228 |
22.3.8 Manipulieren der XML-Daten | 1228 |
Editieren der Daten | 1229 |
Hinzufügen von Daten | 1229 |
Löschen | 1230 |
22.3.9 XML-Dokumente transformieren | 1230 |
22.4 Verwendung des DOM unter .NET | 1233 |
22.4.1 Übersicht | 1233 |
22.4.2 DOM-Integration in Visual Basic | 1234 |
22.4.3 Laden von Dokumenten | 1234 |
22.4.4 Erzeugen von XML-Dokumenten | 1235 |
22.4.5 Auslesen von XML-Dateien | 1237 |
22.4.6 Direktzugriff auf einzelne Elemente | 1238 |
22.4.7 Einfügen von Informationen | 1239 |
22.4.8 Suchen in den Baumzweigen | 1241 |
22.5 Weitere Möglichkeiten der XML-Verarbeitung | 1245 |
22.5.1 Die relationale Sicht mit XmlDataDocument | 1245 |
Laden von XML-Daten | 1245 |
Verwendung des DataSets | 1246 |
22.5.2 XML-Daten aus Objektstrukturen erzeugen | 1248 |
22.5.3 Schnelles Suchen in XML-Daten mit XPathNavigator | 1251 |
22.5.4 Schnelles Auslesen von XML-Daten mit XmlReader | 1254 |
22.5.5 Erzeugen von XML-Daten mit XmlWriter | 1256 |
22.5.6 XML transformieren mit XSLT | 1258 |
22.6 Praxisbeispiele | 1260 |
22.6.1 Mit dem DOM in XML-Dokumenten navigieren | 1260 |
Oberfläche | 1260 |
Quelltext | 1261 |
Test | 1262 |
Bemerkungen | 1263 |
22.6.2 XML-Daten in eine TreeView einlesen | 1263 |
Oberfläche | 1263 |
Quelltext | 1264 |
Test | 1265 |
Ergänzung | 1266 |
23 Einführung in ADO.NET | 1268 |
23.1 Eine kleine Übersicht | 1268 |
23.1.1 Die ADO.NET-Klassenhierarchie | 1268 |
23.1.2 Die Klassen der Datenprovider | 1269 |
.NET-Datenprovider | 1270 |
Weitere Datenprovider | 1270 |
Anzeige der installierten Datenprovider | 1271 |
23.1.3 Das Zusammenspiel der ADO.NET-Klassen | 1272 |
23.2 Das Connection-Objekt | 1273 |
23.2.1 Allgemeiner Aufbau | 1273 |
23.2.2 OleDbConnection | 1273 |
Parameter für OleDb-Zugriff | 1273 |
OleDb-Provider für Access Datenbank | 1274 |
23.2.3 Schließen einer Verbindung | 1275 |
23.2.4 Eigenschaften des Connection-Objekts | 1275 |
ConnectionString-Eigenschaft | 1275 |
Database- und DataSource-Eigenschaft | 1276 |
Provider-Eigenschaft | 1276 |
ServerVersion-Eigenschaft | 1276 |
ConnectionTimeout-Eigenschaft | 1277 |
State-Eigenschaft | 1277 |
23.2.5 Methoden des Connection-Objekts | 1277 |
Open- und Close-Methode | 1277 |
ChangeDatabase-Methode | 1278 |
CreateCommand-Methode | 1278 |
23.2.6 Der ConnectionStringBuilder | 1278 |
23.3 Das Command-Objekt | 1279 |
23.3.1 Erzeugen und Anwenden eines Command-Objekts | 1279 |
23.3.2 Erzeugen mittels CreateCommand-Methode | 1280 |
23.3.3 Eigenschaften des Command-Objekts | 1280 |
Connection- und CommandText-Eigenschaft | 1280 |
CommandTimeout-Eigenschaft | 1280 |
CommandType-Eigenschaft | 1281 |
23.3.4 Methoden des Command-Objekts | 1282 |
ExecuteNonQuery-Methode | 1282 |
ExecuteReader-Methode | 1282 |
ExecuteScalar-Methode | 1283 |
23.3.5 Freigabe von Connection- und Command-Objekten | 1283 |
23.4 Parameter-Objekte | 1285 |
23.4.1 Erzeugen und Anwenden eines Parameter-Objekts | 1285 |
23.4.2 Eigenschaften des Parameter-Objekts | 1285 |
ParameterName- und Value-Eigenschaft | 1285 |
DbType, OleDbType und SqlDbType-Eigenschaft | 1286 |
Direction-Eigenschaft | 1286 |
23.5 Das CommandBuilder-Objekt | 1286 |
23.5.1 Erzeugen | 1286 |
23.5.2 Anwenden | 1287 |
23.6 Das DataReader-Objekt | 1287 |
23.6.1 DataReader erzeugen | 1288 |
23.6.2 Daten lesen | 1288 |
23.6.3 Eigenschaften des DataReaders | 1289 |
Item-Eigenschaft | 1289 |
FieldCount-Eigenschaft | 1289 |
IsClosed-Eigenschaft | 1289 |
23.6.4 Methoden des DataReaders | 1289 |
Read-Methode | 1289 |
GetValue- und GetValues-Methode | 1289 |
GetOrdinal- und ähnliche Methoden | 1290 |
Bemerkungen | 1290 |
23.7 Das DataAdapter-Objekt | 1290 |
23.7.1 DataAdapter erzeugen | 1290 |
Konstruktor mit SELECT-String und Connection-Objekt | 1290 |
Konstruktor mit SelectCommand-Objekt | 1291 |
23.7.2 Command-Eigenschaften | 1291 |
23.7.3 Fill-Methode | 1292 |
Begrenzen der Datenmenge | 1292 |
23.7.4 Update-Methode | 1293 |
23.8 Praxisbeispiele | 1294 |
23.8.1 Wichtige ADO.NET-Objekte im Einsatz | 1294 |
Oberfläche | 1294 |
Quellcode | 1294 |
Test | 1295 |
Bemerkungen | 1296 |
23.8.2 Eine Aktionsabfrage ausführen | 1296 |
Oberfläche | 1296 |
Quellcode | 1296 |
Test | 1297 |
Bemerkungen | 1298 |
23.8.3 Eine Auswahlabfrage aufrufen | 1298 |
Oberfläche | 1299 |
Quellcode | 1299 |
Test | 1300 |
23.8.4 Die Datenbank aktualisieren | 1300 |
Oberfläche | 1301 |
Quellcode (Command-Objekte selbst programmiert) | 1301 |
Test | 1302 |
Bemerkungen | 1303 |
23.8.5 Den ConnectionString speichern | 1303 |
Oberfläche | 1303 |
Anwendungseinstellungen eintragen | 1303 |
Quellcode | 1304 |
Test | 1305 |
24 Das DataSet | 1306 |
24.1 Grundlegende Features des DataSets | 1306 |
24.1.1 Die Objekthierarchie | 1307 |
24.1.2 Die wichtigsten Klassen | 1307 |
24.1.3 Erzeugen eines DataSets | 1308 |
Copy-Methode | 1308 |
Clone-Methode | 1309 |
GetChanges-/HasChanges-Methode | 1309 |
24.2 Das DataTable-Objekt | 1310 |
24.2.1 DataTable erzeugen | 1310 |
24.2.2 Spalten hinzufügen | 1310 |
24.2.3 Zeilen zur DataTable hinzufügen | 1311 |
NewRow-Methode | 1311 |
ImportRow-Methode | 1311 |
24.2.4 Auf den Inhalt einer DataTable zugreifen | 1312 |
Columns- und Rows-Eigenschaften | 1312 |
TableName- und ColumnName-Eigenschaften | 1312 |
Find-Methode | 1313 |
Zeilen löschen | 1313 |
24.3 Die DataView | 1314 |
24.3.1 Erzeugen eines DataView | 1314 |
24.3.2 Sortieren und Filtern von Datensätzen | 1314 |
24.3.3 Suchen von Datensätzen | 1315 |
24.4 Typisierte DataSets | 1315 |
24.4.1 Ein typisiertes DataSet erzeugen | 1316 |
24.4.2 Das Konzept der Datenquellen | 1317 |
24.4.3 Typisierte DataSets und TableAdapter | 1318 |
Warum sollte man ein typisiertes DataSet einsetzen? | 1318 |
Der TableAdapter | 1319 |
24.5 Die Qual der Wahl | 1319 |
24.5.1 DataReader – der schnelle Lesezugriff | 1320 |
24.5.2 DataSet – die Datenbank im Hauptspeicher | 1320 |
Typisiertes versus untypisiertes DataSet | 1320 |
24.5.3 Objektrelationales Mapping – die Zukunft? | 1321 |
LINQ to SQL/LINQ to Entities | 1321 |
24.6 Praxisbeispiele | 1322 |
24.6.1 Im DataView sortieren und filtern | 1322 |
Oberfläche | 1322 |
Quellcode | 1323 |
Test | 1323 |
Bemerkungen | 1324 |
24.6.2 Suche nach Datensätzen | 1324 |
Oberfläche | 1324 |
Quellcode | 1324 |
Test | 1325 |
24.6.3 Ein DataSet in einen XML-String serialisieren | 1326 |
Konvertierungsmethoden | 1326 |
Testoberfläche Form1 | 1327 |
Quellcode Form1 | 1327 |
Erzeugen eines untypisierten DataSets als Testobjekt | 1328 |
Test | 1329 |
24.6.4 Untypisierte in typisierte DataSets konvertieren | 1330 |
Konvertierungscode | 1331 |
Normales DataSet erzeugen | 1331 |
Typisiertes DataSet erzeugen | 1332 |
Oberfläche | 1333 |
Test | 1334 |
Bemerkungen | 1335 |
24.6.5 Eine LINQ to SQL-Abfrage ausführen | 1335 |
Datenmodell per LINQ to SQL-Designer erzeugen | 1335 |
Datenquelle hinzufügen | 1336 |
Oberfläche | 1337 |
Test | 1338 |
Bemerkung | 1338 |
25 OOP-Spezial | 1340 |
25.1 Eine kleine Einführung in die UML | 1340 |
25.1.1 Use Case-Diagramm | 1340 |
25.1.2 Use Case-Dokumentation | 1342 |
USE CASE: Inbetriebnahme des Autos | 1342 |
USE CASE: Versuchter Diebstahl des Autos | 1343 |
25.1.3 Objekte identifizieren | 1343 |
25.1.4 Statisches Modell | 1344 |
25.1.5 Beziehungen zwischen den Klassen | 1345 |
25.1.6 Dynamisches Modell | 1345 |
Relevante Zustände identifizieren | 1345 |
Zustandsüberführungsdiagramm | 1346 |
25.1.7 Implementierung | 1346 |
Klasse CSchlüssel | 1347 |
Klasse CSchloss | 1347 |
Klasse CAuto | 1348 |
25.1.8 Test-Client | 1350 |
Test | 1352 |
Bemerkungen | 1352 |
25.2 Der Klassen-Designer | 1353 |
25.2.1 Ein neues Klassendiagramm erzeugen | 1353 |
25.2.2 Werkzeugkasten | 1355 |
25.2.3 Enumeration | 1356 |
25.2.4 Klasse | 1357 |
Klassendetails-Fenster | 1359 |
25.2.5 Struktur | 1359 |
25.2.6 Abstrakte Klasse | 1360 |
25.2.7 Schnittstelle | 1362 |
25.2.8 Delegate | 1364 |
25.2.9 Zuordnung | 1366 |
25.2.10 Vererbung | 1367 |
25.2.11 Diagramme anpassen | 1367 |
25.2.12 Wann sollten Sie den Klassen-Designer verwenden? | 1368 |
25.3 Praxisbeispiele | 1368 |
25.3.1 Implementierung einer Finite State Machine | 1368 |
Zustandsüberführungsmatrix | 1369 |
CAuto | 1372 |
Clientcode | 1374 |
Test | 1374 |
25.3.2 Modellierung des Bestellsystems einer Firma | 1374 |
Klassendiagramm | 1374 |
Klasse CBestellung | 1375 |
Klasse CPerson | 1377 |
Klasse CKunde | 1378 |
Klasse CFirma | 1381 |
Klasse Form1 | 1382 |
Klassendiagramm vervollständigen | 1384 |
Abschlusstest | 1385 |
Bemerkungen | 1386 |
26 Das Microsoft Event Pattern | 1388 |
26.1 Einführung in Design Pattern | 1388 |
26.2 Aufbau und Bedeutung des Observer Pattern | 1389 |
26.2.1 Subjekt und Observer | 1390 |
26.2.2 Sequenzdiagramme | 1391 |
26.2.3 Die Registration-Sequenz | 1391 |
26.2.4 Die Notification-Sequenz | 1392 |
26.2.5 Die Unregistration-Sequenz | 1392 |
26.2.6 Bedeutung der Sequenzen für das Geschäftsmodell | 1393 |
26.2.7 Die Rolle des Containers | 1393 |
26.3 Implementierung mit Interfaces und Callbacks | 1394 |
26.3.1 Übersicht und Klassendiagramm | 1394 |
26.3.2 Schnittstellen IObserver und IObservable | 1396 |
26.3.3 Die abstrakte Klasse Subject | 1396 |
26.3.4 Observer1 | 1397 |
26.3.5 Observer2 | 1398 |
26.3.6 Model | 1399 |
26.3.7 Form1 | 1400 |
26.3.8 Ein zweites Klassendiagramm | 1401 |
26.3.9 Testen | 1402 |
26.4 Implementierung mit Delegates und Events | 1403 |
26.4.1 Multicast-Events | 1404 |
26.4.2 IObserver, IObservable und Subject | 1404 |
26.4.3 Observer1 und Observer2 | 1405 |
26.4.4 Model | 1405 |
26.4.5 Form1 | 1405 |
26.4.6 Test und Vergleich | 1406 |
26.4.7 Klassendiagramm | 1407 |
26.5 Implementierung des Microsoft Event Pattern | 1408 |
26.5.1 Namensgebung für Ereignisse | 1408 |
26.5.2 Namensgebung und Signatur der Delegates | 1408 |
26.5.3 Hinzufügen einer das Ereignis auslösenden Methode | 1409 |
26.5.4 Neue Klasse NumberChangedEventArgs | 1409 |
26.5.5 Model | 1410 |
26.5.6 Observer1 | 1411 |
26.5.7 Form1 | 1411 |
26.6 Test und Vergleich | 1412 |
26.7 Klassendiagramm | 1412 |
26.8 Implementierung eines Event Pattern | 1413 |
26.9 Praxisbeispiel | 1414 |
26.9.1 Subjekt und Observer beobachten sich gegenseitig | 1414 |
Oberfläche | 1414 |
NumberChangedEventArgs und MaximumChangedEventArgs | 1415 |
Model | 1415 |
Observer1 | 1417 |
Observer2 | 1418 |
Form1 | 1419 |
Test und Vergleich | 1421 |
Klassendiagramm | 1421 |
Klassenzusammenstellung | 1422 |
27 Verteilen von Anwendungen | 1424 |
27.1 ClickOnce-Deployment | 1425 |
27.1.1 Übersicht/Einschränkungen | 1425 |
27.1.2 Die Vorgehensweise | 1426 |
27.1.3 Ort der Veröffentlichung | 1426 |
27.1.4 Anwendungsdateien | 1427 |
27.1.5 Erforderliche Komponenten | 1427 |
27.1.6 Aktualisierungen | 1428 |
27.1.7 Veröffentlichungsoptionen | 1429 |
27.1.8 Veröffentlichen | 1430 |
27.1.9 Verzeichnisstruktur | 1430 |
27.1.10 Der Webpublishing-Assistent | 1432 |
27.1.11 Neue Versionen erstellen | 1433 |
27.2 InstallShield | 1433 |
27.2.1 Installation | 1433 |
27.2.2 Aktivieren | 1434 |
27.2.3 Ein neues Setup-Projekt | 1434 |
Anwendungseinstellungen | 1435 |
Installationsbedingungen | 1436 |
Optionales Setup | 1437 |
Anwendungsdateien | 1437 |
Startmenü und Verknüpfungen | 1438 |
Registrierungseinträge | 1438 |
Setup-Dialoge/Erscheinungsbild | 1439 |
Installationsdateien | 1441 |
27.2.4 Finaler Test | 1442 |
28 Weitere Techniken | 1444 |
28.1 Zugriff auf die Zwischenablage | 1444 |
28.1.1 Das Clipboard-Objekt | 1444 |
Kopieren | 1445 |
Einfügen | 1445 |
28.1.2 Zwischenablage-Funktionen für Textboxen | 1446 |
28.2 Arbeiten mit der Registry | 1446 |
28.2.1 Allgemeines | 1447 |
28.2.2 Registry-Unterstützung in .NET | 1448 |
28.3 .NET-Reflection | 1450 |
28.3.1 Übersicht | 1450 |
28.3.2 Assembly laden | 1450 |
28.3.3 Mittels GetType und Type Informationen sammeln | 1451 |
28.3.4 Dynamisches Laden von Assemblies | 1453 |
Beispiel | 1453 |
28.4 Das SerialPort-Control | 1455 |
28.4.1 Übersicht | 1456 |
Wichtige Eigenschaften | 1456 |
Wichtige Methoden | 1456 |
Wichtige Ereignisse | 1457 |
28.4.2 Einführungsbeispiele | 1457 |
SerialPortTalker | 1457 |
SerialPortListener | 1458 |
Test | 1458 |
28.4.3 Thread-Probleme bei Windows Forms-Anwendungen | 1459 |
28.4.4 Ein einfaches Terminalprogramm | 1461 |
Bedienoberfläche | 1461 |
Quellcode | 1462 |
Test | 1465 |
Bemerkungen zur Verarbeitung von Messdaten | 1465 |
28.5 Praxisbeispiele | 1466 |
28.5.1 Zugriff auf die Registry | 1466 |
Oberfläche | 1466 |
Quelltext | 1466 |
Test | 1468 |
28.5.2 Dateiverknüpfungen erzeugen | 1468 |
29 Konsolenanwendungen | 1470 |
29.1 Grundaufbau/Konzepte | 1470 |
29.1.1 Unser Hauptprogramm – Module1.vb | 1471 |
Sub Main() | 1472 |
29.1.2 Rückgabe eines Fehlerstatus | 1472 |
29.1.3 Parameterübergabe | 1473 |
29.1.4 Zugriff auf die Umgebungsvariablen | 1475 |
29.2 Die Kommandozentrale: System.Console | 1476 |
29.2.1 Eigenschaften | 1476 |
29.2.2 Methoden/Ereignisse | 1476 |
29.2.3 Textausgaben | 1477 |
29.2.4 Farbangaben | 1478 |
29.2.5 Tastaturabfragen | 1479 |
Modifiers-Eigenschaft und ConsoleModifiers-Enumeration | 1480 |
29.2.6 Arbeiten mit Streamdaten | 1480 |
29.3 Praxisbeispiel: Farbige Konsolenanwendung | 1482 |
30 Windows Forms-Anwendungen | 1486 |
30.1 Grundaufbau/Konzepte | 1486 |
30.1.1 Wo ist das Hauptprogramm? | 1487 |
Visuelle XP-Stile aktivieren | 1489 |
Einzelinstanzanwendung erstellen | 1489 |
My.Settings beim Herunterfahren speichern | 1490 |
Authentifizierungsmodus | 1490 |
Modus für das Herunterfahren | 1490 |
Begrüßungsbildschirm | 1490 |
Anwendungsereignisse | 1490 |
Und was ist mit einer eigenen Sub Main? | 1491 |
30.1.2 Die Oberflächendefinition – Form1.Designer.vb | 1492 |
30.1.3 Die Spielwiese des Programmierers – Form1.vb | 1493 |
30.1.4 Die Datei AssemblyInfo.vb | 1494 |
30.1.5 Resources.resx/Resources.Designer.vb | 1495 |
30.1.6 Settings.settings/Settings.Designer.vb | 1496 |
30.2 Ein Blick auf die Application-Klasse | 1498 |
30.2.1 Eigenschaften | 1498 |
30.2.2 Methoden | 1499 |
30.2.3 Ereignisse | 1500 |
30.3 Allgemeine Eigenschaften von Komponenten | 1501 |
30.3.1 Font | 1502 |
30.3.2 Handle | 1503 |
30.3.3 Tag | 1504 |
30.3.4 Modifiers | 1504 |
30.4 Allgemeine Ereignisse von Komponenten | 1505 |
30.4.1 Die Eventhandler-Argumente | 1505 |
30.4.2 Sender | 1505 |
30.4.3 Der Parameter e | 1507 |
30.4.4 Mausereignisse | 1507 |
Tastaturereignisse | 1508 |
30.4.5 KeyPreview | 1509 |
30.4.6 Weitere Ereignisse | 1510 |
30.4.7 Validierung | 1511 |
30.4.8 SendKeys | 1511 |
30.5 Allgemeine Methoden von Komponenten | 1512 |
31 Windows Forms-Formulare | 1514 |
31.1 Übersicht | 1514 |
31.1.1 Wichtige Eigenschaften des Form-Objekts | 1515 |
Controls-Auflistung | 1516 |
31.1.2 Wichtige Ereignisse des Form-Objekts | 1517 |
31.1.3 Wichtige Methoden des Form-Objekts | 1518 |
31.2 Praktische Aufgabenstellungen | 1519 |
31.2.1 Fenster anzeigen | 1519 |
Nichtmodale Fenster | 1519 |
Modale Fenster (Dialoge) | 1520 |
31.2.2 Splash Screens beim Anwendungsstart anzeigen | 1522 |
31.2.3 Eine Sicherheitsabfrage vor dem Schließen anzeigen | 1524 |
31.2.4 Ein Formular durchsichtig machen | 1525 |
31.2.5 Die Tabulatorreihenfolge festlegen | 1525 |
31.2.6 Ausrichten und Platzieren von Komponenten | 1526 |
Dock | 1526 |
Anchor | 1528 |
31.2.7 Spezielle Panels für flexibles Layout | 1529 |
SplitContainer | 1529 |
FlowLayoutPanel | 1529 |
TableLayoutPanel | 1530 |
31.2.8 Menüs erzeugen | 1530 |
MenuStrip | 1531 |
ContextMenuStrip | 1532 |
Weitere Eigenschaften von Menüeinträgen | 1533 |
31.3 MDI-Anwendungen | 1534 |
31.3.1 "Falsche" MDI-Fenster bzw. Verwenden von Parent | 1534 |
31.3.2 Die echten MDI-Fenster | 1535 |
31.3.3 Die Kindfenster | 1536 |
31.3.4 Automatisches Anordnen der Kindfenster | 1537 |
31.3.5 Zugriff auf die geöffneten MDI-Kindfenster | 1539 |
31.3.6 Zugriff auf das aktive MDI-Kindfenster | 1539 |
31.3.7 Mischen von Kindfenstermenü/MDIContainer-Menü | 1539 |
AllowMerge | 1540 |
MergeAction und MergeIndex | 1540 |
31.4 Praxisbeispiele | 1540 |
31.4.1 Informationsaustausch zwischen Formularen | 1540 |
Überblick | 1540 |
Bedienoberfläche Form1 (Hauptformular) | 1541 |
Bedienoberfläche Form2, Form3, Form4, Form5, Form6 (untergeordnete Formulare) | 1541 |
Allgemeiner Code für Form1 | 1542 |
Variante 1: Übergabe der Formular-Referenz im Konstruktor | 1543 |
Variante 2: Übergabe der Formular-Referenz als Eigenschaft | 1544 |
Variante 3: Übergabe der Formular-Referenz als globale Variable | 1545 |
Variante 4: Übergabe der Formular-Referenz als Ownership | 1546 |
Variante 5: Verwendung der Standardinstanzen der Formulare | 1547 |
31.4.2 Ereigniskette beim Laden/Entladen eines Formulars | 1548 |
Bedienoberfläche (Form1 und Form2) | 1548 |
Anderes Startformular auswählen | 1549 |
Quellcode von Form1 | 1549 |
Quellcode von Form2 | 1551 |
Test | 1551 |
Bemerkungen | 1552 |
32 Komponenten-Übersicht | 1554 |
32.1 Allgemeine Hinweise | 1554 |
32.1.1 Hinzufügen von Komponenten | 1554 |
32.1.2 Komponenten zur Laufzeit per Code erzeugen | 1555 |
32.2 Allgemeine Steuerelemente | 1557 |
32.2.1 Label | 1557 |
32.2.2 LinkLabel | 1558 |
Wichtige Eigenschaften | 1558 |
Hyperlink einfügen | 1558 |
32.2.3 Button | 1559 |
32.2.4 TextBox | 1560 |
Mehrzeilige Textboxen | 1560 |
Markieren von Text | 1561 |
PasswordChar | 1562 |
Automatisches Vervollständigen | 1562 |
32.2.5 MaskedTextBox | 1563 |
32.2.6 CheckBox | 1564 |
32.2.7 RadioButton | 1566 |
32.2.8 ListBox | 1567 |
32.2.9 CheckedListBox | 1568 |
32.2.10 ComboBox | 1569 |
32.2.11 PictureBox | 1570 |
32.2.12 DateTimePicker | 1570 |
32.2.13 MonthCalendar | 1571 |
32.2.14 HScrollBar, VScrollBar | 1571 |
32.2.15 TrackBar | 1572 |
32.2.16 NumericUpDown | 1573 |
32.2.17 DomainUpDown | 1574 |
32.2.18 ProgressBar | 1574 |
32.2.19 RichTextBox | 1575 |
32.2.20 ListView | 1576 |
ListViewItem | 1576 |
ImageList | 1577 |
Übersichten zur ListView | 1577 |
32.2.21 TreeView | 1582 |
Knoten zur Laufzeit erzeugen | 1583 |
Auswerten des aktiven Knotens | 1584 |
Wichtige Eigenschaften von TreeView | 1585 |
Wichtige Methoden von TreeView | 1586 |
Wichtige Ereignisse von TreeView | 1586 |
Wichtige Eigenschaften von TreeNode | 1586 |
Wichtige Methoden von TreeNode | 1587 |
32.2.22 WebBrowser | 1587 |
32.3 Container | 1588 |
32.3.1 FlowLayout/TableLayout/SplitContainer | 1588 |
32.3.2 Panel | 1588 |
Oberflächen gestalten | 1588 |
32.3.3 GroupBox | 1589 |
32.3.4 TabControl | 1590 |
Wichtige Eigenschaften | 1591 |
Wichtige Ereignisse | 1591 |
32.3.5 ImageList | 1592 |
32.4 Menüs & Symbolleisten | 1593 |
32.4.1 MenuStrip und ContextMenuStrip | 1593 |
32.4.2 ToolStrip | 1593 |
32.4.3 StatusStrip | 1593 |
32.4.4 ToolStripContainer | 1594 |
32.5 Daten | 1594 |
32.5.1 DataSet | 1594 |
32.5.2 DataGridView/DataGrid | 1595 |
32.5.3 BindingNavigator/BindingSource | 1595 |
32.5.4 Chart | 1595 |
32.6 Komponenten | 1596 |
32.6.1 ErrorProvider | 1597 |
32.6.2 HelpProvider | 1597 |
32.6.3 ToolTip | 1597 |
32.6.4 Timer | 1597 |
32.6.5 BackgroundWorker | 1597 |
32.6.6 SerialPort | 1598 |
32.7 Drucken | 1598 |
32.7.1 PrintPreviewControl | 1598 |
32.7.2 PrintDocument | 1598 |
32.8 Dialoge | 1598 |
32.8.1 OpenFileDialog/SaveFileDialog/FolderBrowserDialog | 1598 |
32.8.2 FontDialog/ColorDialog | 1598 |
32.9 WPF-Unterstützung mit dem ElementHost | 1599 |
32.10 Praxisbeispiele | 1599 |
32.10.1 Mit der CheckBox arbeiten | 1599 |
Oberfläche | 1599 |
Quellcode | 1600 |
Test | 1600 |
32.10.2 Steuerelemente per Code selbst erzeugen | 1601 |
Oberfläche | 1601 |
Quellcode | 1601 |
Test | 1602 |
Bemerkungen | 1603 |
32.10.3 Controls-Auflistung im TreeView anzeigen | 1603 |
Oberfläche | 1603 |
Quellcode | 1605 |
Test | 1606 |
32.10.4 WPF-Komponenten mit dem ElementHost anzeigen | 1606 |
Oberfläche (WPF-Control) | 1607 |
Oberfläche (Windows Forms) | 1609 |
33 Grundlagen der Grafikausgabe | 1612 |
33.1 Übersicht und erste Schritte | 1612 |
33.1.1 GDI+ – Ein erster Blick für Umsteiger | 1613 |
Ein zentrales Grafikausgabe-Objekt | 1613 |
Die Grafikausgabe ist zustandslos | 1613 |
Prinzipieller Ablauf | 1613 |
Wichtige Features | 1614 |
33.1.2 Namespaces für die Grafikausgabe | 1614 |
System.Drawing | 1614 |
System.Drawing.Drawing2D | 1615 |
System.Drawing.Imaging | 1615 |
System.Drawing.Printing | 1615 |
System.Drawing.Design | 1616 |
System.Drawing.Text | 1616 |
33.2 Darstellen von Grafiken | 1616 |
33.2.1 Die PictureBox-Komponente | 1616 |
33.2.2 Das Image-Objekt | 1617 |
33.2.3 Laden von Grafiken zur Laufzeit | 1618 |
33.2.4 Sichern von Grafiken | 1618 |
Spezielle Einstellungen | 1619 |
33.2.5 Grafikeigenschaften ermitteln | 1619 |
Breite und Höhe der Grafik | 1619 |
Auflösung | 1619 |
Grafiktyp | 1619 |
Interner Bitmap-Aufbau | 1620 |
33.2.6 Erzeugen von Vorschaugrafiken (Thumbnails) | 1620 |
33.2.7 Die Methode RotateFlip | 1621 |
33.2.8 Skalieren von Grafiken | 1622 |
33.3 Das .NET-Koordinatensystem | 1623 |
33.3.1 Globale Koordinaten | 1624 |
33.3.2 Seitenkoordinaten (globale Transformation) | 1625 |
Translation (Verschiebung) | 1625 |
Skalierung (Vergrößerung/Verkleinerung) | 1625 |
Rotation | 1626 |
33.3.3 Gerätekoordinaten (Seitentransformation) | 1627 |
33.4 Grundlegende Zeichenfunktionen von GDI+ | 1628 |
33.4.1 Das zentrale Graphics-Objekt | 1628 |
Wie erzeuge ich ein Graphics-Objekt? | 1629 |
Die Invalidate-Methode | 1630 |
Die Eigenschaft ResizeRedraw | 1630 |
33.4.2 Punkte zeichnen/abfragen | 1631 |
33.4.3 Linien | 1632 |
33.4.4 Kantenglättung mit Antialiasing | 1633 |
33.4.5 PolyLine | 1634 |
33.4.6 Rechtecke | 1634 |
DrawRectangle | 1634 |
FillRectangle | 1635 |
DrawRectangles/FillRectangles | 1635 |
33.4.7 Polygone | 1636 |
33.4.8 Splines | 1636 |
33.4.9 Bézierkurven | 1638 |
33.4.10 Kreise und Ellipsen | 1639 |
33.4.11 Tortenstück (Segment) | 1639 |
Kuchendiagramme | 1640 |
33.4.12 Bogenstück | 1641 |
33.4.13 Wo sind die Rechtecke mit den "runden Ecken"? | 1641 |
33.4.14 Textausgabe | 1643 |
Texteigenschaften | 1643 |
Ausgabe von mehrzeiligem Text | 1644 |
Textattribute | 1644 |
Ausgabequalität | 1645 |
Und wo bleibt eine Methode zum Drehen von Text? | 1646 |
33.4.15 Ausgabe von Grafiken | 1647 |
Skalieren | 1647 |
33.5 Unser Werkzeugkasten | 1648 |
33.5.1 Einfache Objekte | 1648 |
Point, FPoint | 1648 |
Size, FSize | 1648 |
Rectangle, FRectangle | 1649 |
33.5.2 Vordefinierte Objekte | 1649 |
Vordefinierte Pinsel | 1649 |
Vordefinierte Stifte | 1650 |
Vordefinierte Farben | 1650 |
Vordefinierte Icons | 1650 |
33.5.3 Farben/Transparenz | 1651 |
ARGB-Farben | 1651 |
Was ist mit dem höchstwertigen Byte? | 1652 |
33.5.4 Stifte (Pen) | 1653 |
Einfarbige Stifte | 1653 |
Stifte mit Füllung | 1655 |
33.5.5 Pinsel (Brush) | 1656 |
33.5.6 SolidBrush | 1656 |
33.5.7 HatchBrush | 1656 |
33.5.8 TextureBrush | 1658 |
33.5.9 LinearGradientBrush | 1658 |
33.5.10 PathGradientBrush | 1660 |
33.5.11 Fonts | 1661 |
33.5.12 Path-Objekt | 1662 |
Füllen | 1663 |
Fillmode | 1664 |
33.5.13 Clipping/Region | 1665 |
Regions | 1666 |
Clipping | 1667 |
33.6 Standarddialoge | 1668 |
33.6.1 Schriftauswahl | 1668 |
33.6.2 Farbauswahl | 1669 |
33.7 Praxisbeispiele | 1671 |
33.7.1 Ein Graphics-Objekt erzeugen | 1671 |
Variante 1: Verwendung des Paint-Events | 1672 |
Test | 1672 |
Variante 2: Überschreiben der OnPaint-Methode | 1672 |
Test | 1673 |
Variante 3: Graphics-Objekt mit CreateGraphics erzeugen | 1673 |
Test | 1673 |
Variante 4: Verwendung des Graphics-Objekts einer PictureBox | 1674 |
33.7.2 Zeichenoperationen mit der Maus realisieren | 1674 |
Oberfläche | 1674 |
Quelltext | 1674 |
Test | 1677 |
34 Druckausgabe | 1678 |
34.1 Einstieg und Übersicht | 1678 |
34.1.1 Nichts geht über ein Beispiel | 1678 |
34.1.2 Programmiermodell | 1680 |
34.1.3 Kurzübersicht der Objekte | 1681 |
34.2 Auswerten der Druckereinstellungen | 1681 |
34.2.1 Die vorhandenen Drucker | 1681 |
34.2.2 Der Standarddrucker | 1682 |
34.2.3 Verfügbare Papierformate/Seitenabmessungen | 1682 |
34.2.4 Der eigentliche Druckbereich | 1684 |
34.2.5 Die Seitenausrichtung ermitteln | 1684 |
34.2.6 Ermitteln der Farbfähigkeit | 1685 |
34.2.7 Die Druckauflösung abfragen | 1685 |
34.2.8 Ist beidseitiger Druck möglich? | 1686 |
34.2.9 Einen "Informationsgerätekontext" erzeugen | 1686 |
34.2.10 Abfragen von Werten während des Drucks | 1687 |
34.3 Festlegen von Druckereinstellungen | 1688 |
34.3.1 Einen Drucker auswählen | 1688 |
34.3.2 Drucken in Millimetern | 1688 |
34.3.3 Festlegen der Seitenränder | 1689 |
34.3.4 Druckjobname | 1690 |
34.3.5 Die Anzahl der Kopien festlegen | 1690 |
34.3.6 Beidseitiger Druck | 1691 |
34.3.7 Seitenzahlen festlegen | 1692 |
34.3.8 Druckqualität verändern | 1695 |
34.3.9 Ausgabemöglichkeiten des Chart-Controls nutzen | 1695 |
34.4 Die Druckdialoge verwenden | 1696 |
34.4.1 PrintDialog | 1696 |
34.4.2 PageSetupDialog | 1697 |
Probleme mit den Rändern | 1698 |
34.4.3 PrintPreviewDialog | 1699 |
34.4.4 Ein eigenes Druckvorschau-Fenster realisieren | 1700 |
34.5 Drucken mit OLE-Automation | 1701 |
34.5.1 Kurzeinstieg in die OLE-Automation | 1701 |
Programmieren der OLE-Automation | 1702 |
New | 1702 |
GetObject und CreateObject | 1703 |
34.5.2 Drucken mit Microsoft Word | 1704 |
34.6 Praxisbeispiele | 1706 |
34.6.1 Den Drucker umfassend konfigurieren | 1706 |
Oberfläche (Hauptformular Form1) | 1707 |
Oberfläche (Druckvorschau Form2) | 1707 |
Quelltext (Form1) | 1708 |
Quelltext (Form2) | 1713 |
Test | 1714 |
34.6.2 Diagramme mit dem Chart-Control drucken | 1716 |
Oberfläche | 1716 |
Quelltext | 1716 |
Test | 1717 |
34.6.3 Drucken mit Word | 1718 |
Oberfläche | 1718 |
Quelltext | 1719 |
Test | 1721 |
Anmerkung ab .NET 4 | 1722 |
35 Windows Forms-Datenbindung | 1724 |
35.1 Prinzipielle Möglichkeiten | 1724 |
35.2 Manuelle Bindung an einfache Datenfelder | 1725 |
35.2.1 BindingSource erzeugen | 1725 |
35.2.2 Binding-Objekt | 1726 |
35.2.3 DataBindings-Collection | 1726 |
Bemerkungen | 1726 |
35.3 Manuelle Bindung an Listen und Tabellen | 1726 |
35.3.1 DataGridView | 1727 |
35.3.2 Datenbindung von ComboBox und ListBox | 1727 |
35.4 Entwurfszeit-Bindung an typisierte DataSets | 1727 |
35.5 Drag & Drop-Datenbindung | 1729 |
35.6 Navigations- und Bearbeitungsfunktionen | 1729 |
35.6.1 Navigieren zwischen den Datensätzen | 1729 |
35.6.2 Hinzufügen und Löschen | 1729 |
35.6.3 Aktualisieren und Abbrechen | 1730 |
35.6.4 Verwendung des BindingNavigators | 1730 |
35.7 Die Anzeigedaten formatieren | 1731 |
35.8 Praxisbeispiele | 1731 |
35.8.1 Einrichten und Verwenden einer Datenquelle | 1731 |
Assistent zum Konfigurieren von Datenquellen | 1731 |
Verwenden der Datenquelle | 1733 |
Test | 1734 |
Abfragemethoden hinzufügen | 1734 |
35.8.2 Eine Auswahlabfrage im DataGridView anzeigen | 1735 |
Oberfläche | 1736 |
Quellcode | 1736 |
Test | 1737 |
35.8.3 Master-Detailbeziehungen im DataGrid anzeigen | 1738 |
Oberfläche | 1738 |
Quellcode | 1738 |
Test | 1739 |
35.8.4 Datenbindung Chart-Control | 1739 |
Oberfläche | 1740 |
Quellcode | 1743 |
Test | 1743 |
36 Erweiterte Grafikausgabe | 1744 |
36.1 Transformieren mit der Matrix-Klasse | 1744 |
36.1.1 Übersicht | 1744 |
36.1.2 Translation | 1745 |
36.1.3 Skalierung | 1745 |
36.1.4 Rotation | 1746 |
36.1.5 Scherung | 1746 |
36.1.6 Zuweisen der Matrix | 1747 |
36.2 Low-Level-Grafikmanipulationen | 1747 |
36.2.1 Worauf zeigt Scan0? | 1748 |
36.2.2 Anzahl der Spalten bestimmen | 1749 |
36.2.3 Anzahl der Zeilen bestimmen | 1750 |
36.2.4 Zugriff im Detail (erster Versuch) | 1750 |
36.2.5 Zugriff im Detail (zweiter Versuch) | 1752 |
Weiter optimieren | 1753 |
36.2.6 Invertieren | 1754 |
36.2.7 In Graustufen umwandeln | 1755 |
36.2.8 Heller/Dunkler | 1756 |
36.2.9 Kontrast | 1757 |
36.2.10 Gamma-Wert | 1758 |
36.2.11 Histogramm spreizen | 1759 |
36.2.12 Ein universeller Grafikfilter | 1761 |
Beispiel: Eine universelle Filter-Klasse entwickeln | 1761 |
Die Klasse GrafikFilter im Einsatz | 1764 |
36.3 Fortgeschrittene Techniken | 1765 |
36.3.1 Flackerfrei dank Double Buffering | 1765 |
Eine Puffer-Bitmap erzeugen | 1765 |
Und was ist mit der PictureBox? | 1766 |
36.3.2 Animationen | 1767 |
Vorbereiten des Ausgabeobjekts | 1767 |
Styles bei Controls setzen | 1768 |
Die eigentliche Grafikausgabe | 1768 |
Bemerkungen | 1770 |
36.3.3 Animated GIFs | 1770 |
Wie lernen die Bilder das Laufen? | 1771 |
36.3.4 Auf einzelne GIF-Frames zugreifen | 1773 |
Wiedergabe einzelner Frames | 1773 |
Erzeugen eines Bitmap-Strips | 1774 |
36.3.5 Transparenz realisieren | 1774 |
36.3.6 Eine Grafik maskieren | 1776 |
36.3.7 JPEG-Qualität beim Sichern bestimmen | 1777 |
36.4 Grundlagen der 3D-Vektorgrafik | 1778 |
36.4.1 Datentypen für die Verwaltung | 1779 |
36.4.2 Eine universelle 3D-Grafik-Klasse | 1780 |
36.4.3 Grundlegende Betrachtungen | 1781 |
Drehwinkel | 1781 |
Darstellungsmöglichkeiten | 1782 |
36.4.4 Translation | 1784 |
36.4.5 Streckung/Skalierung | 1784 |
36.4.6 Rotation | 1785 |
36.4.7 Die eigentlichen Zeichenroutinen | 1787 |
Ausgabe einer Linie | 1787 |
Ausgabe eines Koordinatensystems | 1788 |
36.5 Und doch wieder GDI-Funktionen ... | 1790 |
36.5.1 Am Anfang war das Handle ... | 1790 |
36.5.2 Gerätekontext (Device Context Types) | 1792 |
Formular-DC über Graphics-Objekt erzeugen | 1793 |
Formular-DC mit GetDC erzeugen | 1794 |
36.5.3 Koordinatensysteme und Abbildungsmodi | 1794 |
36.5.4 Zeichenwerkzeuge/Objekte | 1799 |
Erzeugen und Parametrieren der Objekte | 1800 |
36.5.5 Bitmaps | 1801 |
Bitmaps kopieren | 1803 |
Bitmaps skalieren | 1804 |
36.6 Praxisbeispiele | 1805 |
36.6.1 Die Transformationsmatrix verstehen | 1805 |
Oberfläche | 1805 |
Quelltext | 1806 |
Test | 1808 |
36.6.2 Eine 3D-Grafikausgabe in Aktion | 1808 |
Oberfläche | 1808 |
Quelltext | 1808 |
Test/Bemerkungen | 1810 |
36.6.3 Einen Fenster-Screenshot erzeugen | 1811 |
Oberfläche | 1811 |
Quelltext | 1811 |
Test | 1813 |
Bemerkung | 1813 |
37 Ressourcen/Lokalisierung | 1814 |
37.1 Manifestressourcen | 1814 |
37.1.1 Erstellen von Manifestressourcen | 1814 |
37.1.2 Zugriff auf Manifestressourcen | 1816 |
Namensgebung eingebetteter Ressourcen | 1816 |
Auflisten aller eingebetteten Ressourcen | 1816 |
Die Inhalte eingebetteter Ressourcen auslesen | 1817 |
37.2 Typisierte Resourcen | 1817 |
37.2.1 Erzeugen von .resources-Dateien | 1817 |
37.2.2 Hinzufügen der .resources-Datei zum Projekt | 1818 |
37.2.3 Zugriff auf die Inhalte von .resources-Dateien | 1818 |
Bemerkungen zum Zugriff auf .resources-Dateien | 1819 |
37.2.4 ResourceManager direkt aus der .resources-Datei erzeugen | 1819 |
Bemerkungen | 1820 |
37.2.5 Was sind .resx-Dateien? | 1820 |
37.3 Streng typisierte Ressourcen | 1820 |
37.3.1 Erzeugen streng typisierter Ressourcen | 1820 |
37.3.2 Verwenden streng typisierter Ressourcen | 1821 |
37.3.3 Streng typisierte Ressourcen per Reflection auslesen | 1821 |
37.4 Anwendungen lokalisieren | 1824 |
37.4.1 Localizable und Language | 1824 |
37.4.2 Beispiel "Landesfahnen" | 1824 |
37.4.3 Einstellen der aktuellen Kultur zur Laufzeit | 1827 |
Bemerkungen | 1828 |
37.5 Praxisbeispiel | 1829 |
37.5.1 Betrachter für Manifestressourcen | 1829 |
Oberfläche | 1829 |
Quellcode Form1 | 1829 |
Test | 1831 |
38 Komponentenentwicklung | 1832 |
38.1 Überblick | 1832 |
38.2 Benutzersteuerelement | 1833 |
38.2.1 Entwickeln einer Auswahl-ListBox | 1833 |
Oberflächendesign | 1834 |
Implementieren der Programmlogik | 1834 |
38.2.2 Komponente verwenden | 1835 |
38.3 Benutzerdefiniertes Steuerelement | 1836 |
38.3.1 Entwickeln eines BlinkLabels | 1836 |
Oberflächendesign | 1837 |
Festlegen des Typs des Vorfahren | 1837 |
Implementieren der Programmlogik | 1838 |
38.3.2 Verwenden der Komponente | 1838 |
38.4 Komponentenklasse | 1839 |
38.5 Eigenschaften | 1840 |
38.5.1 Einfache Eigenschaften | 1840 |
38.5.2 Schreib-/Lesezugriff (Get/Set) | 1840 |
38.5.3 Nur Lese-Eigenschaft (ReadOnly) | 1841 |
38.5.4 Nur-Schreibzugriff (WriteOnly) | 1841 |
38.5.5 Hinzufügen von Beschreibungen | 1842 |
38.5.6 Ausblenden im Eigenschaftenfenster | 1842 |
38.5.7 Einfügen in Kategorien | 1843 |
38.5.8 Default-Wert einstellen | 1843 |
38.5.9 Standard-Eigenschaft | 1844 |
38.5.10 Wertebereichsbeschränkung und Fehlerprüfung | 1845 |
38.5.11 Eigenschaften von Aufzählungstypen | 1846 |
38.5.12 Standard Objekt-Eigenschaften | 1847 |
38.5.13 Eigene Objekt-Eigenschaften | 1848 |
38.6 Methoden | 1850 |
38.6.1 Konstruktor | 1851 |
38.6.2 Class-Konstruktor | 1852 |
38.6.3 Destruktor | 1853 |
38.6.4 Aufruf des Basisklassen-Konstruktors | 1854 |
38.6.5 Aufruf von Basisklassen-Methoden | 1854 |
38.7 Ereignisse (Events) | 1854 |
38.7.1 Ereignis mit Standardargument definieren | 1855 |
38.7.2 Ereignis mit eigenen Argumenten | 1856 |
38.7.3 Ein Default-Ereignis festlegen | 1857 |
38.7.4 Mit Ereignissen auf Windows-Messages reagieren | 1857 |
38.8 Weitere Themen | 1859 |
38.8.1 Wohin mit der Komponente? | 1859 |
38.8.2 Assembly-Informationen festlegen | 1860 |
38.8.3 Assemblies signieren | 1862 |
Erstellen eines AssemblyKey-File | 1862 |
38.8.4 Komponenten-Ressourcen einbetten | 1863 |
38.8.5 Der Komponente ein Icon zuordnen | 1863 |
Icon erstellen | 1863 |
38.8.6 Den Designmodus erkennen | 1864 |
38.8.7 Komponenten lizenzieren | 1864 |
Verwendung der LicFileLicenseProvider-Klasse | 1865 |
Ableiten der LicFileLicenseProvider-Klasse | 1867 |
Bemerkung | 1868 |
38.9 Praxisbeispiele | 1869 |
38.9.1 AnimGif für die Anzeige von Animationen | 1869 |
Oberfläche/Ressourcen | 1869 |
Quelltext | 1870 |
Test | 1871 |
38.9.2 Eine FontComboBox entwickeln | 1871 |
Quelltext | 1871 |
Test | 1873 |
38.9.3 Das PropertyGrid verwenden | 1874 |
Oberfläche | 1874 |
Quelltext | 1874 |
Test | 1875 |
39 ASP.NET-Einführung | 1878 |
39.1 ASP.NET für Ein- und Umsteiger | 1878 |
39.1.1 ASP – der Blick zurück | 1878 |
39.1.2 Was ist bei ASP.NET anders? | 1879 |
39.1.3 Was gibt es noch in ASP.NET? | 1881 |
39.1.4 Vorteile von ASP.NET gegenüber ASP | 1882 |
39.1.5 Voraussetzungen für den Einsatz von ASP.NET | 1883 |
39.1.6 Und was hat das alles mit Visual Basic zu tun? | 1883 |
Grundsätzlicher Projektaufbau | 1884 |
39.2 Unsere erste Web-Anwendung | 1886 |
39.2.1 Visueller Entwurf der Bedienoberfläche | 1886 |
39.2.2 Zuweisen der Objekteigenschaften | 1888 |
39.2.3 Verknüpfen der Objekte mit Ereignissen | 1889 |
39.2.4 Programm kompilieren und testen | 1891 |
39.3 Die ASP.NET-Projektdateien | 1892 |
39.3.1 ASP.NET-Website | 1893 |
39.3.2 ASP.NET-Web-Anwendungen | 1894 |
39.3.3 ASPX-Datei(en) | 1894 |
39.3.4 Die aspx.vb-Datei(en) | 1897 |
39.3.5 Die Datei Global.asax | 1897 |
39.3.6 Das Startformular | 1898 |
39.3.7 Die Datei Web.config | 1898 |
39.3.8 Masterpages (master-Dateien) | 1901 |
39.3.9 Sitemap (Web.sitemap) | 1901 |
39.3.10 Benutzersteuerelemente (ascx-Dateien) | 1902 |
39.3.11 Die Web-Projekt-Verzeichnisse | 1902 |
39.4 Lernen am Beispiel | 1903 |
39.4.1 Erstellen des Projekts | 1903 |
39.4.2 Oberflächengestaltung | 1904 |
Formular-Titel setzen | 1905 |
39.4.3 Ereignisprogrammierung | 1905 |
39.4.4 Ein Fehler, was nun? | 1906 |
Einfache Fehlerbehandlung | 1907 |
39.4.5 Ereignisse von Textboxen | 1908 |
39.4.6 Ein gemeinsamer Ereignis-Handler | 1908 |
39.4.7 Eingabefokus setzen | 1909 |
39.4.8 Ausgaben in einer Tabelle | 1909 |
39.4.9 Scrollen der Anzeige | 1912 |
39.4.10 Zusammenspiel mehrerer Formulare | 1912 |
Globale Variablen? | 1913 |
Das Page_Load-Ereignis | 1913 |
39.4.11 Umleiten bei Direktaufruf | 1914 |
39.4.12 Ärger mit den Cookies | 1915 |
39.4.13 Export auf den IIS | 1916 |
39.5 Tipps & Tricks | 1917 |
39.5.1 Nachinstallieren IIS 7 bzw. 7.5 (Windows 7) | 1917 |
Nachinstallieren | 1917 |
ASP.NET registrieren | 1918 |
39.5.2 Nachinstallieren IIS8 (Windows 8) | 1918 |
40 Übersicht ASP.NET-Controls | 1920 |
40.1 Einfache Steuerelemente im Überblick | 1920 |
40.1.1 Label | 1920 |
AccessKey/AssociatedControlID | 1921 |
Datenbindung | 1921 |
40.1.2 TextBox | 1922 |
40.1.3 Button, ImageButton, LinkButton | 1923 |
Click-Ereignis | 1923 |
OnClientClick-Eigenschaft | 1923 |
PostbackUrl-Eigenschaft | 1924 |
40.1.4 CheckBox, RadioButton | 1924 |
40.1.5 CheckBoxList, BulletList, RadioButtonList | 1925 |
Datenbindung | 1925 |
BulletList | 1926 |
40.1.6 Table | 1926 |
40.1.7 Hyperlink | 1928 |
40.1.8 Image, ImageMap | 1928 |
40.1.9 Calendar | 1930 |
40.1.10 Panel | 1931 |
40.1.11 HiddenField | 1931 |
40.1.12 Substitution | 1932 |
40.1.13 XML | 1933 |
Die XML-Daten | 1933 |
Die Transformationsdateien | 1934 |
Verwendung und Test | 1934 |
40.1.14 FileUpload | 1935 |
40.1.15 AdRotator | 1936 |
40.2 Steuerelemente für die Seitennavigation | 1937 |
40.2.1 Mehr Übersicht mit Web.Sitemap | 1937 |
40.2.2 Menu | 1939 |
Datenbindung an eine SiteMap | 1940 |
Menü ohne Datenbindung | 1941 |
40.2.3 TreeView | 1942 |
TreeView ohne Datenbindung | 1943 |
40.2.4 SiteMapPath | 1945 |
40.2.5 MultiView, View | 1946 |
40.2.6 Wizard | 1947 |
40.3 Webseitenlayout/-design | 1949 |
40.3.1 Masterpages | 1949 |
Masterpage | 1950 |
Content-Seiten | 1951 |
40.3.2 Themes/Skins | 1952 |
Zuweisen des aktiven Theme | 1953 |
Skin-Datei | 1953 |
Stylesheet | 1954 |
Grafiken | 1954 |
40.3.3 Webparts | 1955 |
40.4 Die Validator-Controls | 1956 |
40.4.1 Übersicht | 1956 |
40.4.2 Wo findet die Fehlerprüfung statt? | 1957 |
40.4.3 Verwendung | 1957 |
40.4.4 RequiredFieldValidator | 1958 |
40.4.5 CompareValidator | 1959 |
40.4.6 RangeValidator | 1961 |
40.4.7 RegularExpressionValidator | 1961 |
40.4.8 CustomValidator | 1962 |
Clientseitige Validierung | 1963 |
Serverseitige Validierung | 1963 |
40.4.9 ValidationSummary | 1965 |
40.4.10 Weitere Möglichkeiten | 1966 |
Validierung zeitweise verhindern | 1966 |
ValidationGroup bilden | 1966 |
Eingabefokus setzen | 1966 |
40.5 Praxisbeispiele | 1966 |
40.5.1 Themes und Skins verstehen | 1966 |
Oberfläche | 1967 |
Projekt | 1967 |
Skin bearbeiten | 1968 |
Stylesheet bearbeiten | 1968 |
Quelltext | 1969 |
Test | 1970 |
40.5.2 Masterpages verwenden | 1971 |
Oberfläche (Masterpage) | 1971 |
Oberfläche (Contentpage) | 1972 |
Quelltext | 1972 |
Test | 1973 |
40.5.3 Webparts verwenden | 1974 |
Vorbereiten der Portalseite | 1974 |
User Control programmieren | 1974 |
Inhalte für die Webzones definieren | 1975 |
Programmieren des Werkzeugkastens | 1976 |
41 ASP.NET-Datenbindung | 1980 |
41.1 Einstiegsbeispiel | 1980 |
41.1.1 Erstellen der ASP.NET-Website | 1980 |
Datenbank hinzufügen | 1981 |
GridView hinzufügen | 1982 |
GridView an Datenquelle anbinden | 1982 |
Test | 1984 |
41.2 Einführung | 1985 |
41.2.1 Konzept | 1985 |
41.2.2 Übersicht DataSource-Steuerelemente | 1986 |
41.3 SQLDataSource | 1987 |
41.3.1 Datenauswahl mit Parametern | 1989 |
41.3.2 Parameter für INSERT, UPDATE und DELETE | 1990 |
41.3.3 Methoden | 1992 |
41.3.4 Caching | 1993 |
41.3.5 Aktualisieren/Refresh | 1994 |
41.4 AccessDataSource | 1994 |
41.5 ObjectDataSource | 1994 |
41.5.1 Verbindung zwischen Objekt und DataSource | 1994 |
41.5.2 Ein Beispiel sorgt für Klarheit | 1996 |
41.5.3 Geschäftsobjekte in einer Session verwalten | 2000 |
41.6 SitemapDataSource | 2002 |
41.7 LinqDataSource | 2003 |
41.7.1 Bindung von einfachen Collections | 2003 |
41.7.2 Bindung eines LINQ to SQL-DataContext | 2004 |
41.8 EntityDataSource | 2006 |
41.8.1 Entity Data Model erstellen | 2007 |
41.8.2 EntityDataSource anbinden | 2009 |
41.8.3 Datenmenge filtern | 2012 |
41.9 XmlDataSource | 2012 |
41.10 QueryExtender | 2014 |
41.10.1 Grundlagen | 2014 |
41.10.2 Suchen | 2015 |
41.10.3 Sortieren | 2017 |
41.11 GridView | 2018 |
41.11.1 Auswahlfunktion (Zeilenauswahl) | 2018 |
41.11.2 Auswahl mit mehrspaltigem Index | 2019 |
41.11.3 Hyperlink-Spalte für Detailansicht | 2019 |
41.11.4 Spalten erzeugen | 2020 |
41.11.5 Paging realisieren | 2021 |
41.11.6 Edit, Update, Delete | 2023 |
41.11.7 Keine Daten, was tun? | 2024 |
41.12 DetailsView | 2024 |
41.13 FormView | 2026 |
Datenbindung im Detail | 2027 |
41.14 DataList | 2029 |
41.14.1 Bearbeitungsfunktionen implementieren | 2029 |
41.14.2 Layout verändern | 2031 |
41.15 Repeater | 2031 |
41.16 ListView | 2033 |
41.17 Typisierte Datenbindung | 2033 |
41.18 Model Binding | 2034 |
41.19 Chart | 2036 |
42 ASP.NET-Objekte/-Techniken | 2038 |
42.1 Wichtige ASP.NET-Objekte | 2038 |
42.1.1 HTTPApplication | 2038 |
42.1.2 Application | 2041 |
42.1.3 Session | 2042 |
Session-Variablen | 2042 |
Beenden einer Session | 2043 |
Ereignisse | 2043 |
42.1.4 Page | 2044 |
Eigenschaften | 2044 |
Methoden | 2045 |
Ereignisse | 2046 |
42.1.5 Request | 2046 |
Informationen über den Browser ermitteln | 2047 |
QueryString-Parameter auslesen | 2049 |
42.1.6 Response | 2049 |
Eigenschaften | 2050 |
Methoden | 2050 |
Textausgabe | 2050 |
Bilder/Dateien zum Client senden | 2051 |
Dynamisch erzeugte Grafiken senden | 2051 |
Neue Seiten aufrufen | 2053 |
Wir geben zur Protokoll ... | 2053 |
42.1.7 Server | 2054 |
MapPath | 2054 |
MachineName | 2054 |
Transfer | 2054 |
Execute | 2054 |
42.1.8 Cookies verwenden | 2055 |
User | 2057 |
42.2 ASP.NET-Fehlerbehandlung | 2057 |
42.2.1 Fehler beim Entwurf | 2057 |
42.2.2 Laufzeitfehler | 2058 |
42.2.3 Eine eigene Fehlerseite | 2059 |
42.2.4 Fehlerbehandlung im Web Form | 2060 |
42.2.5 Fehlerbehandlung in der Anwendung | 2061 |
42.2.6 Alternative Fehlerseite einblenden | 2062 |
42.2.7 Lokale Fehlerbehandlung | 2063 |
42.2.8 Seite nicht gefunden! – Was nun? | 2064 |
42.3 E-Mail-Versand in ASP.NET | 2064 |
42.3.1 Übersicht | 2064 |
42.3.2 Mail-Server bestimmen | 2065 |
42.3.3 Einfache Text-E-Mails versenden | 2066 |
Variante 1 | 2066 |
Variante 2 | 2067 |
42.3.4 E-Mails mit Dateianhang | 2067 |
42.4 Sicherheit von Webanwendungen | 2068 |
42.4.1 Authentication | 2068 |
Anonyme Anmeldung | 2068 |
Forms Authentication | 2069 |
Windows Authentication | 2069 |
42.4.2 Forms Authentication realisieren | 2070 |
Login-Dialog | 2070 |
Die Änderungen in der Web.config | 2071 |
Test | 2072 |
Weitere Möglichkeiten der Authentifizierung | 2073 |
42.4.3 Impersonation | 2073 |
42.4.4 Authorization | 2074 |
File Authorization | 2075 |
URL Authorization | 2075 |
42.4.5 Administrieren der Website | 2077 |
Voraussetzung | 2077 |
ASP.NET-Konfigurationsoberfläche | 2077 |
Auswahl des Authentifizierungstyps | 2078 |
Neuen Nutzer erstellen | 2079 |
Rechte einschränken | 2080 |
42.4.6 Steuerelemente für das Login-Handling | 2080 |
Login | 2081 |
LoginStatus | 2082 |
LoginName | 2082 |
LoginView | 2082 |
PasswortRecovery | 2083 |
CreateUserWizard | 2084 |
ChangePasswort | 2085 |
42.4.7 Programmieren der Sicherheitseinstellungen | 2085 |
42.5 AJAX in ASP.NET-Anwendungen | 2087 |
42.5.1 Was ist eigentlich AJAX und was kann es? | 2087 |
42.5.2 Die AJAX-Controls | 2088 |
ScriptManager | 2088 |
UpdatePanel | 2089 |
UpdateProgress | 2090 |
Timer | 2091 |
42.5.3 AJAX-Control-Toolkit | 2091 |
42.6 User Controls/Webbenutzersteuerelemente | 2093 |
User Controls | 2093 |
Custom Controls | 2093 |
42.6.1 Ein simples Einstiegsbeispiel | 2094 |
Entwurf | 2094 |
Quellcode | 2095 |
Einbindung | 2095 |
Test | 2096 |
Eigene Eigenschaften definieren | 2096 |
Fazit | 2097 |
42.6.2 Dynamische Grafiken im User Control anzeigen | 2097 |
Dynamisches Senden der Grafik | 2097 |
Entwurf des Controls | 2098 |
Verwendung und Test | 2100 |
42.6.3 Grafikausgaben per User Control realisieren | 2102 |
Das User Control | 2102 |
Die Einbindung/Programmierung | 2103 |
Test | 2104 |
43 Silverlight-Entwicklung | 2108 |
43.1 Einführung | 2108 |
43.1.1 Zielplattformen | 2109 |
43.1.2 Silverlight-Applikationstypen | 2109 |
Silverlight-Anwendung | 2110 |
Silverlight-Navigationsanwendung | 2110 |
Silverlight Out-of-Browser-Anwendung | 2111 |
43.1.3 Wichtige Unterschiede zu den WPF-Anwendungen | 2111 |
Einschränkungen durch das Silverlight-Konzept | 2111 |
Unterschiede durch unterschiedliche Codebasis | 2112 |
43.1.4 Vor- und Nachteile von Silverlight-Anwendungen | 2113 |
WPF-ClickOnce-Anwendungen | 2113 |
ASP.NET/AJAX | 2113 |
FLASH | 2114 |
Fazit | 2114 |
43.1.5 Entwicklungstools | 2115 |
43.1.6 Installation auf dem Client | 2115 |
Updates/Deinstallation | 2116 |
43.2 Die Silverlight-Anwendung im Detail | 2116 |
43.2.1 Ein kleines Beispielprojekt | 2117 |
43.2.2 Das Application Package und das Test-Web | 2119 |
.xap-Package | 2119 |
Silverlight.js | 2119 |
...TestPage.aspx & ...TestPage.html | 2119 |
43.3 Die Projektdateien im Überblick | 2122 |
43.3.1 Projektverwaltung mit App.xaml & App.xaml.vb | 2123 |
Startup | 2124 |
Exit | 2124 |
UnhandledException | 2125 |
Weitere Eigenschaften und Methoden der Application-Klasse | 2125 |
43.3.2 MainPage.xaml & MainPage.xaml.vb | 2125 |
43.3.3 AssemblyInfo.vb | 2126 |
43.4 Fenster und Seiten in Silverlight | 2126 |
43.4.1 Das Standardfenster | 2126 |
43.4.2 Untergeordnete Silverlight-Fenster | 2127 |
43.4.3 UserControls für die Anzeige von Detaildaten | 2129 |
Ein-/Ausblenden von UserControls | 2129 |
Hinzufügen/Entfernen von UserControls | 2130 |
43.4.4 Echte Windows | 2130 |
43.4.5 Navigieren in Silverlight-Anwendungen | 2131 |
Projekt erzeugen | 2131 |
Die Page-Klasse | 2132 |
Der Navigations-Frame | 2134 |
43.5 Datenbanken/Datenbindung | 2136 |
43.5.1 ASP.NET-Webdienste/WCF-Dienste | 2137 |
Einfügen der SQL Server-Datenbank | 2138 |
Erstellen des LINQ to SQL-Datenmodells | 2138 |
Erstellen des ASP.NET-Webdienstes | 2140 |
Alternative: Erstellen eines WCF Dienstes | 2141 |
Einbinden der Dienste in das Silverlight-Projekt | 2142 |
Konfigurieren der Silverlight-Oberfläche | 2143 |
Abrufen der Daten | 2144 |
Zusammenfassung | 2145 |
43.5.2 WCF Data Services | 2145 |
Grundlagen | 2146 |
Einfügen der SQL Server-Datenbank | 2148 |
Erstellen des Entity Data Models | 2149 |
Erstellen des WCF Data Service | 2149 |
Einbinden des WCF Data Service in das Silverlight-Projekt | 2152 |
Konfigurieren der Silverlight-Oberfläche | 2152 |
Abrufen der Daten | 2152 |
Bearbeiten der Daten | 2153 |
Arbeiten mit LINQ und Erweiterungsmethoden | 2154 |
43.6 Isolierter Speicher | 2156 |
43.6.1 Grundkonzept | 2156 |
43.6.2 Das virtuelle Dateisystem verwalten | 2157 |
Wieviel Platz ist verfügbar? | 2157 |
Ich will mehr! | 2158 |
Unterverzeichnisse erzeugen | 2158 |
Anzeige von Dateien und Verzeichnissen | 2158 |
Dateien/Verzeichnisse löschen | 2159 |
43.6.3 Arbeiten mit Dateien | 2160 |
Schreiben | 2160 |
Lesen | 2160 |
43.7 Fulltrust-Anwendungen | 2161 |
43.8 Praxisbeispiele | 2164 |
43.8.1 Eine Out-of-Browser-Applikation realisieren | 2164 |
Vorgehensweise | 2164 |
Installation | 2166 |
Bemerkungen | 2167 |
43.8.2 Out-of-Browser-Anwendung aktualisieren | 2168 |
Quellcode | 2168 |
43.8.3 Testen auf aktive Internetverbindung | 2169 |
Quellcode | 2169 |
43.8.4 Auf Out-of-Browser-Anwendung testen | 2170 |
Quellcode | 2170 |
43.8.5 Den Browser bestimmen | 2170 |
Quellcode | 2170 |
Test | 2171 |
43.8.6 Parameter an das Plug-in übergeben | 2171 |
Oberfläche | 2171 |
Quellcode (MainPage.xaml.vb) | 2171 |
Quellcode (App.xaml.vb) | 2172 |
Quellcode der umgebenden HTML-Seite | 2172 |
Test | 2173 |
43.8.7 Auf den QueryString zugreifen | 2173 |
Oberfläche | 2173 |
Quellcode | 2173 |
Test | 2174 |
43.8.8 Timer in Silverlight nutzen | 2174 |
Oberfläche | 2174 |
Quellcode | 2174 |
Test | 2175 |
43.8.9 Dateien lokal speichern | 2175 |
Oberfläche | 2175 |
Quellcode | 2175 |
Bemerkung | 2176 |
43.8.10 Drag & Drop realisieren | 2176 |
Oberfläche | 2176 |
Quelltext | 2177 |
Test | 2177 |
43.8.11 Auf die Zwischenablage zugreifen | 2178 |
Oberfläche | 2178 |
Quelltext | 2178 |
Test | 2179 |
43.8.12 Weitere Fenster öffnen | 2180 |
Oberfläche (MainPage) | 2180 |
Quellcode (MainPage.xaml.vb) | 2180 |
Oberfläche (SilverlightControl1) | 2181 |
Quellcode (SilverlightControl1.xaml.vb) | 2181 |
Test | 2182 |
Bemerkungen | 2182 |
Index | 2184 |