Walter Doberenz, Thomas Gewinnus
Visual C# 2012 - Grundlagen und Profiwissen
Visual C# 2012 - Grundlagen und Profiwissen
4
Vorwort
52
Zum Buchinhalt
52
Zu den Neuigkeiten in Visual Studio 2012
53
Weitere Bücher von uns
54
Zu den Codebeispielen
54
Nobody is perfect
55
1 Einstieg in Visual Studio 2012
58
1.1 Die Installation von Visual Studio 2012
58
1.1.1 Überblick über die Produktpalette
58
Visual Studio 2012 Express
58
Visual Studio 2012 Professional
59
Visual Studio 2012 Premium
60
Visual Studio 2012 Ultimate
60
1.1.2 Anforderungen an Hard- und Software
60
1.2 Unser allererstes C#-Programm
61
1.2.1 Vorbereitungen
61
Compilerpfad eintragen
61
1.2.2 Quellcode schreiben
63
1.2.3 Programm kompilieren und testen
64
1.2.4 Einige Erläuterungen zum Quellcode
64
Befehlszeilen und Gültigkeitsbereiche
64
using-Anweisung
65
class-Anweisung
65
WriteLine- und ReadLine-Methoden
65
Assemblierung
65
1.2.5 Konsolenanwendungen sind langweilig
65
1.3 Die Windows-Philosophie
66
1.3.1 Mensch-Rechner-Dialog
66
1.3.2 Objekt- und ereignisorientierte Programmierung
66
Objekte (Objects)
67
Eigenschaften (Properties)
67
Methoden (Methods)
67
Ereignisse (Events)
68
1.3.3 Programmieren mit Visual Studio 2012
68
1.4 Die Entwicklungsumgebung Visual Studio 2012
69
1.4.1 Neues Projekt
69
1.4.2 Die wichtigsten Fenster
70
Der Projektmappen-Explorer
71
Der Designer
72
Der Werkzeugkasten
72
Das Eigenschaften-Fenster
72
Das Codefenster
73
1.5 Microsofts .NET-Technologie
73
1.5.1 Zur Geschichte von .NET
73
Warum eine extra Programmiersprache?
74
Wie funktioniert eine .NET-Sprache?
75
1.5.2 .NET-Features und Begriffe
76
.NET-Framework
76
Die Common Language Specification (CLS)
77
Das Common Type System (CTS)
77
Die Common Language Runtime (CLR)
78
Namespaces ersetzen Registry
79
Assemblierungen
80
Zugriff auf COM-Komponenten
80
Metadaten und Reflexion
80
Attribute
81
Serialisierung
82
Multithreading
82
Objektorientierte Programmierung
83
1.6 Wichtige Neuigkeiten in Visual Studio 2012
83
1.6.1 Die neue Visual Studio 2012 Entwicklungsumgebung
83
Neues Outfit der Toolbar
83
Veränderter Projektmappen-Explorer
84
Registerkartenverwaltung der geöffneten Dateien
85
Suchen überall
85
Neuer Verweis Manager-Dialog
85
Projekt-Kompatibilität
85
Neue Projekttypen
86
Multi-Monitor -Unterstützung
86
Zusätzliche Tools und Features
86
1.6.2 Neuheiten im .NET Framework 4.5
86
WinRT-Anwendungen
86
Portable Klassenbibliotheken
86
Parallele Computervorgänge
87
Internet
87
WPF
87
WCF
87
1.6.3 C# 5.0 – Sprache und Compiler
88
Asynchrone Methoden
88
Caller Information
88
1.7 Praxisbeispiele
88
1.7.1 Windows Forms-Anwendung für Einsteiger
88
1. Etappe: Visueller Entwurf der Bedienoberfläche
89
2. Etappe: Zuweisen der Objekteigenschaften
90
3. Etappe: Verknüpfen der Objekte mit Ereignissen
90
4. Etappe: Programm kompilieren und testen
91
Bemerkungen
92
1.7.2 Windows-Anwendung für fortgeschrittene Einsteiger
93
1. Etappe: Visueller Entwurf der Bedienoberfläche
93
2. Etappe: Zuweisen der Objekteigenschaften
94
3. Etappe: Verknüpfen der Objekte mit Ereignissen
95
4. Etappe: Programm kompilieren und testen
98
IntelliSense – die hilfreiche Fee
99
Hilfe ein Fehler!
99
2 Grundlagen der Sprache C#
102
2.1 Grundbegriffe
102
2.1.1 Anweisungen
102
2.1.2 Bezeichner
103
2.1.3 Schlüsselwörter
104
2.1.4 Kommentare
104
Einzeilige Kommentare
104
Mehrzeilige Kommentare
105
2.2 Datentypen, Variablen und Konstanten
105
2.2.1 Fundamentale Typen
105
2.2.2 Wertetypen versus Verweistypen
106
Wertetypen
107
Verweistypen
107
2.2.3 Benennung von Variablen
107
2.2.4 Deklaration von Variablen
107
Initialisierte Variablen
108
Typinferenz
108
2.2.5 Typsuffixe
109
2.2.6 Zeichen und Zeichenketten
110
char
110
string
110
2.2.7 object-Datentyp
112
2.2.8 Konstanten deklarieren
112
2.2.9 Nullable Types
113
Initialisieren von Wertetypen mit null
113
Zuweisungen mit dem ??-Operator
114
2.2.10 Typinferenz
114
2.2.11 Gültigkeitsbereiche und Sichtbarkeit
115
2.3 Konvertieren von Datentypen
115
2.3.1 Implizite und explizite Konvertierung
115
as-Konverierungsoperator
117
2.3.2 Welcher Datentyp passt zu welchem?
117
2.3.3 Konvertieren von string
118
ToString-Methode
118
String in Zahl verwandeln
119
EVA-Prinzip
119
2.3.4 Die Convert-Klasse
120
2.3.5 Die Parse-Methode
120
2.3.6 Boxing und Unboxing
121
Boxing
121
Unboxing
121
2.4 Operatoren
122
2.4.1 Arithmetische Operatoren
123
Standard-Operatoren
123
Inkrement- und Dekrement-Operatoren
123
2.4.2 Zuweisungsoperatoren
124
2.4.3 Logische Operatoren
125
Vergleichsoperatoren
125
Boolesche Operatoren
126
Kurzschlussauswertung
127
Bitweise Operationen
127
2.4.4 Rangfolge der Operatoren
128
2.5 Kontrollstrukturen
129
2.5.1 Verzweigungsbefehle
129
Klassische Entscheidungsanweisungen
129
Ergänzung
131
Sprungbefehle
132
2.5.2 Schleifenanweisungen
132
for-Schleifen
133
while-Schleife
133
do-Schleife
133
Vorzeitiges Verlassen einer Schleife
134
2.6 Benutzerdefinierte Datentypen
135
2.6.1 Enumerationen
135
Deklaration
135
Zugriff
135
2.6.2 Strukturen
136
Deklaration
136
Datenzugriff
137
Struktur versus Klasse
138
2.7 Nutzerdefinierte Methoden
138
2.7.1 Methoden mit Rückgabewert
139
Deklaration
139
Aufruf
139
2.7.2 Methoden ohne Rückgabewert
140
Deklaration
140
Aufruf
140
2.7.3 Parameterübergabe mit ref
141
Noch einmal – aber bitte langsam
142
2.7.4 Parameterübergabe mit out
142
2.7.5 Methodenüberladung
143
Bemerkungen
143
2.7.6 Optionale Parameter
144
2.7.7 Benannte Parameter
145
2.8 Praxisbeispiele
146
2.8.1 Vom PAP zur Konsolenanwendung
146
Programmablaufplan
146
Programmierung
146
Kompilieren
147
Test
147
2.8.2 Ein Konsolen- in ein Windows-Programm verwandeln
148
Oberfläche
148
Quelltext
149
Test
150
Bemerkungen
150
2.8.3 Schleifenanweisungen verstehen
150
Oberfläche
150
Quellcode
150
Test
152
2.8.4 Benutzerdefinierte Methoden überladen
152
Oberfläche
153
Quellcode
153
Test
155
3 OOP-Konzepte
156
3.1 Kleine Einführung in die OOP
156
3.1.1 Historische Entwicklung
156
Strukturierte Programmierung
157
Objektorientiertes Programmieren
157
3.1.2 Grundbegriffe der OOP
158
Objekt
158
Klasse
159
Instanz
159
Kapselung
159
Wiederverwendbarkeit
159
Vererbung
159
Polymorphie
160
3.1.3 Sichtbarkeit von Klassen und ihren Mitgliedern
160
Klassen
160
Klassenmitglieder
161
3.1.4 Allgemeiner Aufbau einer Klasse
161
3.1.5 Das Erzeugen eines Objekts
162
Referenzieren und Instanziieren
163
Klassische Initialisierung
164
Objekt-Initialisierer
164
Arbeiten mit dem Objekt
165
Zerstören des Objekts
165
3.1.6 Einführungsbeispiel
165
Vorbereitungen
165
Klasse definieren
166
Bemerkungen
167
Objekt erzeugen und initialisieren
168
Objekt verwenden
168
Unterstützung durch die IntelliSense
168
Objekt testen
169
Bemerkungen
170
3.2 Eigenschaften
170
3.2.1 Eigenschaften mit Zugriffsmethoden kapseln
170
Deklarieren von Eigenschaften
171
Zugriff
172
Bemerkung
172
3.2.2 Berechnete Eigenschaften
172
3.2.3 Lese-/Schreibschutz
174
3.2.4 Property-Accessoren
175
3.2.5 Statische Felder/Eigenschaften
175
Konstante Felder
177
3.2.6 Einfache Eigenschaften automatisch implementieren
178
3.3 Methoden
179
3.3.1 Öffentliche und private Methoden
179
3.3.2 Überladene Methoden
180
3.3.3 Statische Methoden
180
Bemerkungen
182
3.4 Ereignisse
182
3.4.1 Ereignis hinzufügen
183
Ereignis deklarieren
184
Ereignis instanziieren
184
Ereignis auslösen
185
3.4.2 Ereignis verwenden
186
Ereignisbehandlung schreiben
187
Ereignisbehandlung anmelden
188
Bemerkungen
188
3.5 Arbeiten mit Konstruktor und Destruktor
189
3.5.1 Konstruktor und Objektinitialisierer
189
Deklaration
190
Aufruf
190
Objektinitialisierer
191
Statischer Konstruktor
191
3.5.2 Destruktor und Garbage Collector
192
3.5.3 Mit using den Lebenszyklus des Objekts kapseln
195
3.5.4 Verzögerte Initialisierung
195
3.6 Vererbung und Polymorphie
196
3.6.1 Klassendiagramm
196
3.6.2 Method-Overriding
198
3.6.3 Klassen implementieren
198
Basisklasse CKunde
198
Subklasse CPrivatKunde
199
Subklasse CFirmenKunde
200
Testoberfläche
201
3.6.4 Implementieren der Objekte
201
Praxistest
202
3.6.5 Ausblenden von Mitgliedern durch Vererbung
203
3.6.6 Allgemeine Hinweise und Regeln zur Vererbung
205
3.6.7 Polymorphes Verhalten
206
Praxistest
208
3.6.8 Die Rolle von System.Object
209
3.7 Spezielle Klassen
210
3.7.1 Abstrakte Klassen
210
Abstrakte Methoden
210
3.7.2 Versiegelte Klassen
211
3.7.3 Partielle Klassen
212
3.7.4 Statische Klassen
213
3.8 Schnittstellen (Interfaces)
214
3.8.1 Definition einer Schnittstelle
214
3.8.2 Implementieren einer Schnittstelle
215
3.8.3 Abfragen, ob Schnittstelle vorhanden ist
216
3.8.4 Mehrere Schnittstellen implementieren
216
3.8.5 Schnittstellenprogrammierung ist ein weites Feld
216
3.9 Praxisbeispiele
217
3.9.1 Eigenschaften sinnvoll kapseln
217
Oberfläche
217
Quellcode (CKreis)
218
Quellcode (Form1)
219
Test
219
Bemerkungen
220
3.9.2 Eine statische Klasse anwenden
220
Oberfläche
220
Quellcode
220
Test
221
3.9.3 Vom fetten zum schlanken Client
222
Oberfläche
222
Quellcode (Fat Client)
223
Test
226
Bemerkungen
226
Abmagerungskur für den fetten Client
227
Quellcode für CRegister
228
Quellcode für CRechenmodul
229
Quellcode für Form1
232
Test
233
Bemerkungen
233
3.9.4 Schnittstellenvererbung verstehen
233
Klassendiagramme
234
Oberfläche Form1
234
Quellcode CPerson
235
Quellcode CKunde
235
Quellcode Form1
236
Test
237
Quellcode IPerson
237
Quellcode CKunde
238
Bemerkungen
238
4 Arrays, Strings, Funktionen
240
4.1 Datenfelder (Arrays)
240
4.1.1 Array deklarieren
240
4.1.2 Array instanziieren
241
4.1.3 Array initialisieren
241
4.1.4 Zugriff auf Array-Elemente
242
Indexüberprüfung
242
Oberen Array-Index ermitteln
243
4.1.5 Zugriff mittels Schleife
243
for-Schleife
243
foreach-Schleife
243
4.1.6 Mehrdimensionale Arrays
244
Dimensionsgrenzen ermitteln
245
Mehrdimensional initialisieren
245
4.1.7 Zuweisen von Arrays
246
4.1.8 Arrays aus Strukturvariablen
247
4.1.9 Löschen und Umdimensionieren von Arrays
248
Felder löschen
248
Array löschen
248
Array-Dimensionen ändern
249
4.1.10 Eigenschaften und Methoden von Arrays
249
Wichtige Eigenschaften und Methoden von Array-Variablen
250
Wichtige Methoden der Array-Klasse
250
4.1.11 Übergabe von Arrays
251
Arrays als Parameter
251
Rückgabe von Arrays
251
4.2 Verarbeiten von Zeichenketten
252
4.2.1 Zuweisen von Strings
252
4.2.2 Eigenschaften und Methoden von String-Variablen
253
Strings in Char-Arrays verwandeln
255
4.2.3 Wichtige Methoden der String-Klasse
255
Strings zerlegen und wieder zusammenstückeln
256
4.2.4 Die StringBuilder-Klasse
257
Grundlegendes
257
Eigenschaften
258
Methoden
259
4.3 Reguläre Ausdrücke
259
4.3.1 Wozu werden reguläre Ausdrücke verwendet?
260
4.3.2 Eine kleine Einführung
260
4.3.3 Wichtige Methoden/Eigenschaften der Klasse Regex
261
Die Match-Methode
261
Eigenschaften des Match-Objekts
262
Die NextMatch-Methode
262
Die Matches-Methode
262
Der Alternator
262
4.3.4 Kompilierte reguläre Ausdrücke
263
4.3.5 RegexOptions-Enumeration
264
4.3.6 Metazeichen (Escape-Zeichen)
264
4.3.7 Zeichenmengen (Character Sets)
265
4.3.8 Quantifizierer
267
4.3.9 Zero-Width Assertions
268
String- und Zeilengrenzen (^ und $)
268
Wortgrenzen (b)
269
Positiver Lookahead (?=expr)
269
Negativer Lookahead (?!expr)
270
Positiver (?<=expr) und negativer (?
271
4.3.10 Gruppen
271
4.3.11 Text ersetzen
272
4.3.12 Text splitten
273
Trennzeichen im Ergebnis
273
4.4 Datums- und Zeitberechnungen
274
4.4.1 Die DateTime-Struktur
274
Grundlegendes
274
4.4.2 Wichtige Eigenschaften von DateTime-Variablen
275
4.4.3 Wichtige Methoden von DateTime-Variablen
276
4.4.4 Wichtige Mitglieder der DateTime-Struktur
276
4.4.5 Konvertieren von Datumstrings in DateTime-Werte
277
4.4.6 Die TimeSpan-Struktur
278
4.5 Mathematische Funktionen
279
4.5.1 Überblick
279
4.5.2 Zahlen runden
280
4.5.3 Winkel umrechnen
280
4.5.4 Potenz- und Wurzeloperationen
280
4.5.5 Logarithmus und Exponentialfunktionen
281
4.5.6 Zufallszahlen erzeugen
281
4.6 Zahlen- und Datumsformatierungen
282
4.6.1 Anwenden der ToString-Methode
282
Zahlenformatierungen
283
Datumsformatierungen
283
4.6.2 Anwenden der Format-Methode
284
4.7 Praxisbeispiele
286
4.7.1 Zeichenketten verarbeiten
286
Oberfläche
286
Quellcode
287
Test
288
Bemerkungen
288
4.7.2 Zeichenketten mit StringBuilder addieren
289
Oberfläche
289
Quellcode Klasse CTest
289
Quellcode Form1
291
Test
292
Bemerkungen
292
4.7.3 Reguläre Ausdrücke testen
292
Oberfläche
292
Quellcode
293
Test
294
Bemerkungen
294
4.7.4 Methodenaufrufe mit Array-Parametern
294
Oberfläche
294
Quellcode
294
Test
297
Bemerkungen
297
5 Weitere Sprachfeatures
298
5.1 Namespaces (Namensräume)
298
5.1.1 Ein kleiner Überblick
298
5.1.2 Einen eigenen Namespace einrichten
299
5.1.3 Die using-Anweisung
300
5.1.4 Namespace Alias
301
5.1.5 Namespace Alias Qualifizierer
301
5.2 Operatorenüberladung
302
5.2.1 Syntaxregeln
302
5.2.2 Praktische Anwendung
303
5.3 Collections (Auflistungen)
304
5.3.1 Die Schnittstelle IEnumerable
304
IEnumerable
305
ICollection
305
IList
306
5.3.2 ArrayList
306
Weitere Eigenschaften und Methoden
307
5.3.3 Hashtable
308
5.3.4 Indexer
308
5.4 Generics
310
5.4.1 Klassische Vorgehensweise
311
Miserable Typsicherheit bei den alten Collections
311
Viel Aufwand für eigene generische Collection-Klassen
312
Warum uns auch ein Array nicht weiterhilft
312
5.4.2 Generics bieten Typsicherheit
312
Einen einfachen generischen Typ deklarieren
312
Generischen Typ verwenden
313
5.4.3 Generische Methoden
313
5.4.4 Iteratoren
314
5.5 Generische Collections
315
5.5.1 List-Collection statt ArrayList
315
5.5.2 Vorteile generischer Collections
316
5.5.3 Constraints
316
5.6 Das Prinzip der Delegates
316
5.6.1 Delegates sind Methodenzeiger
317
5.6.2 Einen Delegate-Typ deklarieren
317
5.6.3 Ein Delegate-Objekt erzeugen
317
5.6.4 Delegates vereinfacht instanziieren
319
5.6.5 Anonyme Methoden
320
5.6.6 Lambda-Ausdrücke
321
5.6.7 Lambda-Ausdrücke in der Task Parallel Library
323
Bemerkungen
324
5.7 Dynamische Programmierung
325
5.7.1 Wozu dynamische Programmierung?
325
5.7.2 Das Prinzip der dynamischen Programmierung
325
5.7.3 Optionale Parameter sind hilfreich
328
5.7.4 Kovarianz und Kontravarianz
329
5.8 Weitere Datentypen
329
5.8.1 BigInteger
329
5.8.2 Complex
332
5.8.3 Tuple<>
332
5.8.4 SortedSet<>
333
5.9 Praxisbeispiele
334
5.9.1 ArrayList versus generische List
334
Oberfläche
335
Quellcode (mit ArrayList)
335
Quellcode (mit generischer List)
336
Test
337
Bemerkungen
338
5.9.2 Generische IEnumerable-Interfaces implementieren
338
Oberfläche
338
Quellcode CTestListe
339
Quellcode Form1
340
Test
340
Bemerkungen
341
5.9.3 Delegates, anonyme Methoden, Lambda Expressions
341
Oberfläche
341
Quellcode
342
Test
344
5.9.4 Dynamischer Zugriff auf COM Interop
345
Oberfläche
345
Quellcode (klassische Programmierung)
345
Quellcode (dynamische Programmierung)
346
Test
346
Bemerkungen
347
6 Einführung in LINQ
348
6.1 LINQ-Grundlagen
348
6.1.1 Die LINQ-Architektur
348
LINQ-Implementierungen
349
6.1.2 Anonyme Typen
349
6.1.3 Erweiterungsmethoden
351
6.2 Abfragen mit LINQ to Objects
352
6.2.1 Grundlegendes zur LINQ-Syntax
352
6.2.2 Zwei alternative Schreibweisen von LINQ Abfragen
353
6.2.3 Übersicht der wichtigsten Abfrage-Operatoren
354
6.3 LINQ-Abfragen im Detail
355
6.3.1 Die Projektionsoperatoren Select und SelectMany
356
Select
356
SelectMany
357
6.3.2 Der Restriktionsoperator Where
357
6.3.3 Die Sortierungsoperatoren OrderBy und ThenBy
358
OrderBy/OrderByDescending
358
ThenBy/ThenByDescending
358
Reverse
359
6.3.4 Der Gruppierungsoperator GroupBy
359
6.3.5 Verknüpfen mit Join
362
6.3.6 Aggregat-Operatoren
362
Count
362
Sum
363
6.3.7 Verzögertes Ausführen von LINQ-Abfragen
364
6.3.8 Konvertierungsmethoden
365
6.3.9 Abfragen mit PLINQ
365
Probleme mit der Sortierfolge
367
6.4 Praxisbeispiele
368
6.4.1 Die Syntax von LINQ-Abfragen verstehen
368
Oberfläche
369
Quellcode
369
Test
370
Bemerkungen
370
6.4.2 Aggregat-Abfragen mit LINQ
371
Oberfläche
371
Quellcode
372
Test
373
Bemerkungen
373
7 Zugriff auf das Dateisystem
376
7.1 Grundlagen
376
7.1.1 Klassen für den Zugriff auf das Dateisystem
377
7.1.2 Statische versus Instanzen-Klasse
377
7.2 Übersichten
378
7.2.1 Methoden der Directory-Klasse
378
7.2.2 Methoden eines DirectoryInfo-Objekts
379
7.2.3 Eigenschaften eines DirectoryInfo-Objekts
379
7.2.4 Methoden der File-Klasse
379
7.2.5 Methoden eines FileInfo-Objekts
380
7.2.6 Eigenschaften eines FileInfo-Objekts
381
7.3 Operationen auf Verzeichnisebene
381
7.3.1 Existenz eines Verzeichnisses/einer Datei feststellen
381
7.3.2 Verzeichnisse erzeugen und löschen
382
7.3.3 Verzeichnisse verschieben und umbenennen
382
7.3.4 Aktuelles Verzeichnis bestimmen
383
7.3.5 Unterverzeichnisse ermitteln
383
7.3.6 Alle Laufwerke ermitteln
383
7.3.7 Dateien kopieren und verschieben
384
7.3.8 Dateien umbenennen
385
7.3.9 Dateiattribute feststellen
385
Attribute von Verzeichnissen und Dateien
386
7.3.10 Verzeichnis einer Datei ermitteln
387
7.3.11 Alle im Verzeichnis enthaltenen Dateien ermitteln
387
7.3.12 Dateien und Unterverzeichnisse ermitteln
387
7.4 Zugriffsberechtigungen
388
7.4.1 ACL und ACE
388
7.4.2 SetAccessControl-Methode
389
7.4.3 Zugriffsrechte anzeigen
389
7.5 Weitere wichtige Klassen
390
7.5.1 Die Path-Klasse
390
7.5.2 Die Klasse FileSystemWatcher
391
7.6 Datei- und Verzeichnisdialoge
392
7.6.1 OpenFileDialog und SaveFileDialog
393
Anzeige und Auswertung
393
Wichtige Eigenschaften
393
Dateifilter
394
7.6.2 FolderBrowserDialog
394
Die SpecialFolder-Enumeration
394
7.7 Praxisbeispiele
395
7.7.1 Infos über Verzeichnisse und Dateien gewinnen
395
Oberfläche
395
Quelltext
396
Test
398
7.7.2 Eine Verzeichnisstruktur in die TreeView einlesen
399
Oberfläche
399
Quellcode
399
Test
400
7.7.3 Mit LINQ und RegEx Verzeichnisbäume durchsuchen
401
Oberfläche
401
Quellcode
402
Test
404
Bemerkungen
405
8 Dateien lesen und schreiben
406
8.1 Grundprinzip der Datenpersistenz
406
8.1.1 Dateien und Streams
406
8.1.2 Die wichtigsten Klassen
407
8.1.3 Erzeugen eines Streams
408
8.2 Dateiparameter
408
8.2.1 FileAccess
408
8.2.2 FileMode
408
8.2.3 FileShare
409
8.3 Textdateien
409
8.3.1 Eine Textdatei beschreiben bzw. neu anlegen
409
WriteAllLines/AppendAllText
410
8.3.2 Eine Textdatei lesen
411
ReadAllLines/ReadLines
411
8.4 Binärdateien
412
8.4.1 Lese-/Schreibzugriff
412
8.4.2 Die Methoden ReadAllBytes und WriteAllBytes
413
8.4.3 Erzeugen von BinaryReader/BinaryWriter
413
8.5 Sequenzielle Dateien
414
8.5.1 Lesen und schreiben von strukturierten Daten
414
8.5.2 Serialisieren von Objekten
415
8.6 Dateien verschlüsseln und komprimieren
416
8.6.1 Das Methodenpärchen Encrypt/Decrypt
416
8.6.2 Verschlüsseln unter Vista/Windows 7/Windows 8
416
8.6.3 Verschlüsseln mit der CryptoStream-Klasse
417
8.6.4 Dateien komprimieren
418
8.7 Memory Mapped Files
419
8.7.1 Grundprinzip
419
8.7.2 Erzeugen eines MMF
420
CreateFromFile-Methode
420
CreateNew-Methode
421
8.7.3 Erstellen eines Map View
421
8.8 Praxisbeispiele
422
8.8.1 Auf eine Textdatei zugreifen
422
Oberfläche
422
Quellcode
422
Test
424
8.8.2 Einen Objektbaum persistent speichern
425
Klassendiagramm
425
Klasse CBestellung
426
Klasse CPerson
427
Klasse CKunde
427
Klasse CFirma
428
Klasse CPersistent
428
Form1
429
Test
431
Anzeige mit DataGridView
431
8.8.3 Ein Memory Mapped File (MMF) verwenden
432
Oberfläche
432
Quellcode
432
Test
433
Bemerkungen
434
9 Asynchrone Programmierung
436
9.1 Übersicht
436
9.1.1 Multitasking versus Multithreading
437
9.1.2 Deadlocks
438
9.1.3 Racing
438
9.2 Programmieren mit Threads
440
9.2.1 Einführungsbeispiel
440
9.2.2 Wichtige Thread-Methoden
441
9.2.3 Wichtige Thread-Eigenschaften
443
9.2.4 Einsatz der ThreadPool-Klasse
444
9.3 Sperrmechanismen
446
9.3.1 Threading ohne lock
446
9.3.2 Threading mit lock
448
Ein anschauliches Beispiel
449
9.3.3 Die Monitor-Klasse
450
Wait und Pulse/PulseAll
451
TryEnter
453
9.3.4 Mutex
453
9.3.5 Methoden für die parallele Ausführung sperren
455
9.3.6 Semaphore
455
9.4 Interaktion mit der Programmoberfläche
457
9.4.1 Die Werkzeuge
457
9.4.2 Einzelne Steuerelemente mit Invoke aktualisieren
457
9.4.3 Mehrere Steuerelemente aktualisieren
459
9.4.4 Ist ein Invoke-Aufruf nötig?
459
9.4.5 Und was ist mit WPF?
460
9.5 Timer-Threads
461
9.6 Die BackgroundWorker-Komponente
462
9.7 Asynchrone Programmier-Entwurfsmuster
465
9.7.1 Kurzübersicht
465
Begin...-Methode
465
End...-Methode
466
Die Rückrufmethode
466
9.7.2 Polling
466
9.7.3 Callback verwenden
468
9.7.4 Callback mit Parameterübergabe verwenden
469
9.7.5 Callback mit Zugriff auf die Programm-Oberfläche
470
9.8 Asynchroner Aufruf beliebiger Methoden
471
9.8.1 Die Beispielklasse
471
9.8.2 Asynchroner Aufruf ohne Callback
473
9.8.3 Asynchroner Aufruf mit Callback und Anzeigefunktion
474
9.8.4 Aufruf mit Rückgabewerten (per Eigenschaft)
475
9.8.5 Aufruf mit Rückgabewerten (per EndInvoke)
475
9.9 Es geht auch einfacher – async und await
476
9.9.1 Der Weg von Synchron zu Asynchron
477
9.9.2 Achtung: Fehlerquellen!
479
9.9.3 Eigene asynchrone Methoden entwickeln
481
9.10 Praxisbeispiele
483
9.10.1 Spieltrieb & Multithreading erleben
483
Aufgabenstellung
483
Oberfläche
484
Quelltext LKW
485
Quelltext Schiff
487
Quelltext Controller
490
Quelltext Global
492
Quelltext Form1
492
Test
495
Bemerkungen
496
9.10.2 Prozess- und Thread-Informationen gewinnen
496
Oberfläche
496
Quellcode
496
Test
500
9.10.3 Ein externes Programm starten
501
Oberfläche
501
Quelltext
501
Test
502
Ergänzungen
502
Bemerkung
503
10 Die Task Parallel Library
504
10.1 Überblick
504
10.1.1 Parallel-Programmierung
504
10.1.2 Möglichkeiten der TPL
507
10.1.3 Der CLR-Threadpool
507
10.2 Parallele Verarbeitung mit Parallel.Invoke
508
10.2.1 Aufrufvarianten
509
10.2.2 Einschränkungen
510
10.3 Verwendung von Parallel.For
510
10.3.1 Abbrechen der Verarbeitung
512
10.3.2 Auswerten des Verarbeitungsstatus
513
10.3.3 Und was ist mit anderen Iterator-Schrittweiten?
514
10.4 Collections mit Parallel.ForEach verarbeiten
514
10.5 Die Task-Klasse
515
10.5.1 Einen Task erzeugen
515
10.5.2 Den Task starten
516
10.5.3 Datenübergabe an den Task
518
10.5.4 Wie warte ich auf das Ende des Task?
519
10.5.5 Tasks mit Rückgabewerten
521
10.5.6 Die Verarbeitung abbrechen
524
Abbruch per return
524
Abbruch per CancellationToken
525
10.5.7 Fehlerbehandlung
527
10.5.8 Weitere Eigenschaften
528
Task-Id
528
Status
529
IsCanceled, IsCompleted, IsFaulted
529
TaskCreationOptions
529
10.6 Zugriff auf das User-Interface
529
10.6.1 Task-Ende und Zugriff auf die Oberfläche
530
10.6.2 Zugriff auf das UI aus dem Task heraus
531
10.7 Weitere Datenstrukturen im Überblick
533
10.7.1 Threadsichere Collections
533
10.7.2 Primitive für die Threadsynchronisation
534
10.8 Parallel LINQ (PLINQ)
534
10.9 Die Parallel Diagnostic Tools
535
10.9.1 Fenster für parallele Aufgaben
535
10.9.2 Fenster für parallele Stacks
536
10.9.3 IntelliTrace
537
10.10 Praxisbeispiel: Spieltrieb – Version 2
537
10.10.1 Aufgabenstellung
537
10.10.2 Global-Klasse
538
10.10.3 Controller-Klasse
539
10.10.4 LKW-Klasse
541
10.10.5 Schiff-Klasse
542
10.10.6 Oberfläche
545
11 Fehlersuche und Behandlung
548
11.1 Der Debugger
548
11.1.1 Allgemeine Beschreibung
548
11.1.2 Die wichtigsten Fenster
549
Befehlsfenster
549
Direktfenster
550
Lokal-Fenster
550
Überwachungsfenster
551
Autofenster
551
Ausgabefenster
551
11.1.3 Debugging-Optionen
552
Einzelschritt-Modus
553
Prozedurschritt-Modus
553
Breakpoints
553
11.1.4 Praktisches Debugging am Beispiel
554
Haltepunkte setzen
555
Abbruchbedingung setzen
555
Trefferanzahl verwenden
556
Einzelschritt-Modus
556
Prozedurschritt
557
Ausführen bis Rücksprung
557
Auswerten von Ausdrücken
557
11.2 Arbeiten mit Debug und Trace
558
11.2.1 Wichtige Methoden von Debug und Trace
558
Write, WriteLine, WriteIf und WriteLineIf
558
IndentLevel, Indent, IndentSize und UnIndent
560
Assert
560
Fail
561
11.2.2 Besonderheiten der Trace-Klasse
562
11.2.3 TraceListener-Objekte
562
TextWriterTraceListener
562
App.config zur Definition verwenden
563
EventLogTraceListener
564
11.3 Caller Information
565
11.3.1 Attribute
565
11.3.2 Anwendung
565
11.4 Fehlerbehandlung
566
11.4.1 Anweisungen zur Fehlerbehandlung
566
11.4.2 try-catch
567
Ausnahmen über Fehlerklassen auswerten
568
Spezifische Fehlerklassen auswerten
568
Fehler erneut auslösen
569
11.4.3 try-finally
572
11.4.4 Das Standardverhalten bei Ausnahmen festlegen
574
11.4.5 Die Exception-Klasse
575
11.4.6 Fehler/Ausnahmen auslösen
576
11.4.7 Eigene Fehlerklassen
576
11.4.8 Exceptionhandling zur Entwurfszeit
578
11.4.9 Code Contracts
579
12 Einführung in WPF
582
Und was ist mit Silverlight?
583
12.1 Neues aus der Gerüchteküche
583
12.1.1 Silverlight
583
12.1.2 WPF
583
12.2 Einführung
584
12.2.1 Was kann eine WPF-Anwendung?
584
12.2.2 Die eXtensible Application Markup Language
586
Unsere erste XAML-Anwendung
587
Probleme mit dem Stammelement
588
Ein kleines Experiment
589
Soll ich das alles von Hand eintippen?
590
12.2.3 Verbinden von XAML und C#-Code
590
App.xaml
590
App.xaml.cs
591
MainWindow.xaml
592
MainWindow.xaml.cs
593
Ein erster Ereignis-Handler
593
Und wo ist mein Button-Objekt?
594
Brauche ich unbedingt eine Trennung von Code und XAML?
595
Kann ich Oberflächen auch per Code erzeugen?
595
12.2.4 Zielplattformen
596
12.2.5 Applikationstypen
597
WPF-Anwendung
597
WPF-Browseranwendungen
597
12.2.6 Vor- und Nachteile von WPF-Anwendungen
598
12.2.7 Weitere Dateien im Überblick
598
Was sind .BAML-Dateien und was passiert damit?
598
Worum handelt es sich bei den .G.CS-Dateien?
599
12.3 Alles beginnt mit dem Layout
601
12.3.1 Allgemeines zum Layout
601
12.3.2 Positionieren von Steuerelementen
603
Was sind das überhaupt für Maßangaben?
603
Top/Left/Width/Height
604
MinWidth/MaxWidth/MinHeight/MaxHeight
604
Margin/Padding
605
HorizontalAlignment/VerticalAligment
606
12.3.3 Canvas
607
12.3.4 StackPanel
607
12.3.5 DockPanel
609
12.3.6 WrapPanel
611
12.3.7 UniformGrid
611
12.3.8 Grid
613
Definition des Grundlayouts
613
Zuordnen von Kind-Elementen
615
Verwendung des GridSplitters
617
12.3.9 ViewBox
618
12.3.10 TextBlock
619
Textformatierungen
620
Besonderheit von Leerzeichen/Zeilenumbrüchen
621
Textausrichtung
622
12.4 Das WPF-Programm
622
12.4.1 Die App-Klasse
622
12.4.2 Das Startobjekt festlegen
623
12.4.3 Kommandozeilenparameter verarbeiten
624
12.4.4 Die Anwendung beenden
625
12.4.5 Auswerten von Anwendungsereignissen
625
12.5 Die Window-Klasse
626
12.5.1 Position und Größe festlegen
626
12.5.2 Rahmen und Beschriftung
627
12.5.3 Das Fenster-Icon ändern
627
12.5.4 Anzeige weiterer Fenster
628
12.5.5 Transparenz
628
12.5.6 Abstand zum Inhalt festlegen
629
12.5.7 Fenster ohne Fokus anzeigen
629
12.5.8 Ereignisfolge bei Fenstern
630
12.5.9 Ein paar Worte zur Schriftdarstellung
630
TextOptions.TextFormattingMode
631
TextOptions.TextRenderingMode
632
12.5.10 Ein paar Worte zur Darstellung von Controls
633
12.5.11 Wird mein Fenster komplett mit WPF gerendert?
635
13 Übersicht WPF-Controls
636
13.1 Allgemeingültige Eigenschaften
636
13.2 Label
638
13.3 Button, RepeatButton, ToggleButton
639
13.3.1 Schaltflächen für modale Dialoge
639
13.3.2 Schaltflächen mit Grafik
640
13.4 TextBox, PasswordBox
641
13.4.1 TextBox
641
13.4.2 PasswordBox
643
13.5 CheckBox
644
13.6 RadioButton
646
13.7 ListBox, ComboBox
647
13.7.1 ListBox
647
13.7.2 ComboBox
650
13.7.3 Den Content formatieren
652
13.8 Image
653
13.8.1 Grafik per XAML zuweisen
653
13.8.2 Grafik zur Laufzeit zuweisen
654
13.8.3 Bild aus Datei laden
655
13.8.4 Die Grafikskalierung beeinflussen
656
13.9 MediaElement
657
13.10 Slider, ScrollBar
659
13.10.1 Slider
659
13.10.2 ScrollBar
660
13.11 ScrollViewer
661
13.12 Menu, ContextMenu
662
13.12.1 Menu
662
13.12.2 Tastenkürzel
663
13.12.3 Grafiken
664
13.12.4 Weitere Möglichkeiten
665
13.12.5 ContextMenu
666
13.13 ToolBar
667
Der ToolBarTray
668
13.14 StatusBar, ProgressBar
670
13.14.1 StatusBar
670
13.14.2 ProgressBar
672
13.15 Border, GroupBox, BulletDecorator
673
13.15.1 Border
673
13.15.2 GroupBox
674
13.15.3 BulletDecorator
675
13.16 RichTextBox
677
13.16.1 Verwendung und Anzeige von vordefiniertem Text
677
13.16.2 Neues Dokument zur Laufzeit erzeugen
679
13.16.3 Sichern von Dokumenten
679
13.16.4 Laden von Dokumenten
681
13.16.5 Texte per Code einfügen/modifizieren
682
13.16.6 Texte formatieren
683
13.16.7 EditingCommands
684
13.16.8 Grafiken/Objekte einfügen
685
13.16.9 Rechtschreibkontrolle
687
13.17 FlowDocumentPageViewer & Co.
687
13.17.1 FlowDocumentPageViewer
687
13.17.2 FlowDocumentReader
688
13.17.3 FlowDocumentScrollViewer
688
13.18 FlowDocument
688
13.18.1 FlowDocument per XAML beschreiben
689
13.18.2 FlowDocument per Code erstellen
691
13.19 DocumentViewer
692
13.20 Expander, TabControl
693
13.20.1 Expander
693
13.20.2 TabControl
695
13.21 Popup
696
13.22 TreeView
698
13.23 ListView
701
13.24 DataGrid
702
13.25 Calendar/DatePicker
703
DisplayMode
703
DisplayDate, SelectedDate und SelectedDates
703
Auswahlmodi
704
Sperrtage
705
Calendar skalieren
706
13.26 InkCanvas
707
13.26.1 Stift-Parameter definieren
707
13.26.2 Die Zeichenmodi
708
13.26.3 Inhalte laden und sichern
709
13.26.4 Konvertieren in eine Bitmap
709
13.26.5 Weitere Eigenschaften
710
13.27 Ellipse, Rectangle, Line und Co.
711
13.27.1 Ellipse
711
13.27.2 Rectangle
711
13.27.3 Line
712
13.28 Browser
712
13.29 Ribbon
715
13.29.1 Allgemeine Grundlagen
715
13.29.2 Download/Installation
716
13.29.3 Erste Schritte
717
13.29.4 Registerkarten und Gruppen
718
13.29.5 Kontextabhängige Registerkarten
719
13.29.6 Einfache Beschriftungen
720
13.29.7 Schaltflächen
720
Schaltflächen zusammenfassen
722
13.29.8 Auswahllisten
722
13.29.9 Optionsauswahl
725
13.29.10 Texteingaben
725
13.29.11 Screentips
725
13.29.12 Symbolleiste für den Schnellzugriff
726
13.29.13 Das RibbonWindow
727
13.29.14 Menüs
728
13.29.15 Anwendungsmenü
730
13.29.16 Alternativen
733
13.30 Chart
733
13.31 WindowsFormsHost
734
14 Wichtige WPF-Techniken
738
14.1 Eigenschaften
738
14.1.1 Abhängige Eigenschaften (Dependency Properties)
738
14.1.2 Angehängte Eigenschaften (Attached Properties)
740
14.2 Einsatz von Ressourcen
740
14.2.1 Was sind eigentlich Ressourcen?
740
14.2.2 Wo können Ressourcen gespeichert werden?
740
14.2.3 Wie definiere ich eine Ressource?
742
14.2.4 Statische und dynamische Ressourcen
743
14.2.5 Wie werden Ressourcen adressiert?
744
14.2.6 System-Ressourcen einbinden
745
14.3 Das WPF-Ereignis-Modell
745
14.3.1 Einführung
745
14.3.2 Routed Events
746
14.3.3 Direkte Events
748
14.4 Verwendung von Commands
749
14.4.1 Einführung zu Commands
749
14.4.2 Verwendung vordefinierter Commands
749
14.4.3 Das Ziel des Commands
751
14.4.4 Welche vordefinierten Commands stehen zur Verfügung?
752
14.4.5 Commands an Ereignismethoden binden
753
14.4.6 Wie kann ich ein Command per Code auslösen?
754
14.4.7 Command-Ausführung verhindern
755
14.5 Das WPF-Style-System
755
14.5.1 Übersicht
755
14.5.2 Benannte Styles
756
14.5.3 Typ-Styles
757
14.5.4 Styles anpassen und vererben
758
Styles anpassen (überschreiben)
759
Style ersetzen
759
Styles vererben
760
Styleänderung per Code
760
14.6 Verwenden von Triggern
761
14.6.1 Eigenschaften-Trigger (Property Triggers)
761
14.6.2 Ereignis-Trigger
763
14.6.3 Daten-Trigger
764
14.7 Einsatz von Templates
765
14.7.1 Neues Template erstellen
765
14.7.2 Template abrufen und verändern
769
14.8 Transformationen, Animationen, StoryBoards
772
14.8.1 Transformationen
772
Drehen mit RotateTransform
773
Skalieren mit ScaleTransform
774
Verformen mit SkewTransform
774
Verschieben mit TranslateTransform
775
Und alles zusammen mit TransformGroup
775
Hilfe durch den WPF-Editor
777
14.8.2 Animationen mit dem StoryBoard realisieren
778
Animation per C#-Code realisieren
779
Animation per Code steuern
779
Mehrere Animationen zusammenfassen
782
14.9 Praxisbeispiel
782
14.9.1 Arbeiten mit Microsoft Expression Blend
782
Eine Animation realisieren
783
Der XAML-Code
784
Test
785
Bemerkung
785
15 WPF-Datenbindung
788
15.1 Grundprinzip
788
15.1.1 Bindungsarten
789
15.1.2 Wann eigentlich wird die Quelle aktualisiert?
790
15.1.3 Geht es auch etwas langsamer?
791
15.1.4 Bindung zur Laufzeit realisieren
792
15.2 Binden an Objekte
794
15.2.1 Objekte im XAML-Code instanziieren
794
15.2.2 Verwenden der Instanz im C#-Quellcode
796
15.2.3 Anforderungen an die Quell-Klasse
796
15.2.4 Instanziieren von Objekten per C#-Code
798
15.3 Binden von Collections
799
15.3.1 Anforderung an die Collection
799
15.3.2 Einfache Anzeige
800
15.3.3 Navigieren zwischen den Objekten
801
15.3.4 Einfache Anzeige in einer ListBox
803
Verwendung von DisplayMemberPath
803
15.3.5 DataTemplates zur Anzeigeformatierung
804
15.3.6 Mehr zu List- und ComboBox
805
SelectedIndex
805
SelectedItem/SelectedItems
805
SelectedValuePath und SelectedValue
806
15.3.7 Verwendung der ListView
807
Einfache Bindung
807
Sortieren der Einträge
808
15.4 Noch einmal zurück zu den Details
809
15.4.1 Navigieren in den Daten
809
15.4.2 Sortieren
811
15.4.3 Filtern
811
15.4.4 Live Shaping
812
15.5 Anzeige von Datenbankinhalten
813
15.5.1 Datenmodell per LINQ to SQL-Designer erzeugen
814
15.5.2 Die Programm-Oberfläche
815
15.5.3 Der Zugriff auf die Daten
816
15.6 Drag & Drop-Datenbindung
817
15.6.1 Vorgehensweise
817
15.6.2 Weitere Möglichkeiten
820
15.7 Formatieren von Werten
821
15.7.1 IValueConverter
822
15.7.2 BindingBase.StringFormat-Eigenschaft
824
15.8 Das DataGrid als Universalwerkzeug
826
15.8.1 Grundlagen der Anzeige
826
15.8.2 UI-Virtualisierung
827
15.8.3 Spalten selbst definieren
827
15.8.4 Zusatzinformationen in den Zeilen anzeigen
829
15.8.5 Vom Betrachten zum Editieren
830
15.9 Praxisbeispiele
831
15.9.1 Collections in Hintergrundthreads füllen
831
Oberfläche
831
Das Problem
831
Lösung (bis .NET 4.0)
833
Test
833
Lösung (ab .NET 4.5)
833
Test
834
15.9.2 Drag & Drop-Bindung bei 1:n-Beziehungen
834
Oberfläche
834
Quellcode (XAML)
836
Quellcode (C#)
837
Test
838
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
852
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
884
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
Bemerkung
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
919
18.4.3 Reagieren auf die Änderung
919
SizeChanged auswerten
920
VisualStateManager
921
18.4.4 Angedockten Modus aktiv beenden
923
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
927
Test
927
Bemerkung
927
18.6.2 Auf Ansichtsänderungen reagieren
927
Oberfläche & Quellcode MainPage
927
Oberfläche & Quellcode BlankPage1
928
Oberfläche der beiden Frame-Seiten
929
Oberfläche & Quellcode BasicPage2
930
18.7 Tipps & Tricks
931
18.7.1 Symbole für WinRT-Oberflächen finden
931
18.7.2 Wie werde ich das Grufti-Layout schnell los?
932
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
946
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
957
19.3.4 FlipView
960
19.4 Sonstige Controls
962
19.4.1 CaptureElement
962
19.4.2 MediaElement
963
19.4.3 Frame
965
19.4.4 WebView
965
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
973
Quelltext
975
Test
975
Bemerkung
976
19.5.4 Das SemanticZoom-Control verwenden
978
Oberflächen
979
Quellcode
981
Test
981
19.5.5 Die CollectionViewSource verwenden
982
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
989
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.cs
996
20.1.3 Verweise
997
20.1.4 App.xaml und App.xaml.cs
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.cs
1003
20.1.8 Datentyp-Konverter/Hilfsklassen
1004
BooleanToVisibilityConverter.cs
1004
BooleanNegationConverter.cs
1004
RichTextColumns.cs
1005
SuspensionManager.cs
1005
LayoutAwarePage.cs
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
1017
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
1019
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
1024
20.3.8 Daten in der Cloud ablegen/laden (Roaming)
1026
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.cs)
1033
Quelltext (SearchPage.xaml.cs)
1036
Quelltext (DetailPage.xaml.cs)
1036
Test
1037
Erweiterungen
1038
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.cs)
1043
Quellcode (ErsatzSplashScreen.xaml.cs)
1043
Test
1044
20.4.4 Eine Dateiverknüpfung erstellen
1044
Oberfläche
1044
Quelltext (App.xaml.cs)
1045
Quelltext (BasicPage1.xaml.cs)
1046
Test
1046
Ergänzungen
1048
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
1054
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
1063
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
1074
Texte kopieren und einfügen
1075
Bilder kopieren und einfügen
1076
Dateien kopieren/verschieben und abrufen
1077
Zwischenablage überwachen
1079
21.2.2 Teilen von Inhalten
1081
Funktion "Teilen" programmgesteuert aufrufen
1083
Sie möchten temporär keine Daten teilen
1084
21.2.3 Eine App als Freigabeziel verwenden
1084
21.2.4 Zugriff auf die Kontaktliste
1085
21.3 Spezielle Oberflächenelemente
1087
21.3.1 MessageDialog
1087
Dialog mit Auswahl
1087
Alternativen beim Auswerten der Tasten
1089
Ergänzungen
1090
21.3.2 Popup-Benachrichtigungen
1090
Wann sollten Sie Popup-Benachrichtigungen einsetzen?
1091
Was können Sie alles parametrieren?
1093
Und wie funktioniert das alles?
1093
Unser ToastNotification-"Bäckerei"
1094
Prüfen auf Funktionsfähigkeit
1098
21.3.3 PopUp/Flyouts
1098
21.3.4 Das PopupMenu einsetzen
1102
21.3.5 Eine AppBar verwenden
1104
21.4 Datenbanken und Windows 8-Apps
1109
21.4.1 Der Retter in der Not: SQLite!
1109
21.4.2 Verwendung/Kurzüberblick
1109
Was eigentlich ist SQLite?
1109
Vorteile
1110
Nachteile
1110
21.4.3 Installation
1111
21.4.4 Wie kommen wir zu einer neuen Datenbank?
1113
21.4.5 Wie werden die Daten manipuliert?
1117
21.5 Vertrieb der App
1119
21.5.1 Verpacken der App
1119
21.5.2 Windows App Certification Kit
1121
21.5.3 App-Installation per Skript
1123
21.6 Ein Blick auf die App-Schwachstellen
1124
21.6.1 Quellcodes im Installationsverzeichnis
1124
21.6.2 Zugriff auf den App-Datenordner
1126
21.7 Praxisbeispiele
1126
21.7.1 Ein Verzeichnis auf Änderungen überwachen
1126
Oberfläche
1127
Quellcode
1127
Test
1128
21.7.2 Eine App als Freigabeziel verwenden
1129
Oberfläche
1129
Registrieren der App als Freigabeziel
1130
Quellcode (App.xaml.cs)
1131
Quellcode (InsertPage.xaml.cs)
1131
Test
1133
21.7.3 ToastNotifications einfach erzeugen
1134
Quellcode
1135
Test
1139
Index
1150
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-Designers
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 Verwendung des DOM unter .NET
1216
22.3.1 Übersicht
1216
22.3.2 DOM-Integration in C#
1217
22.3.3 Laden von Dokumenten
1217
22.3.4 Erzeugen von XML-Dokumenten
1218
22.3.5 Auslesen von XML-Dateien
1220
22.3.6 Direktzugriff auf einzelne Elemente
1222
22.3.7 Einfügen von Informationen
1222
22.3.8 Suchen in den Baumzweigen
1225
22.4 XML-Verarbeitung mit LINQ to XML
1228
22.4.1 Die LINQ to XML-API
1228
22.4.2 Neue XML-Dokumente erzeugen
1230
22.4.3 Laden und Sichern von XML-Dokumenten
1232
22.4.4 Navigieren in XML-Daten
1233
22.4.5 Auswählen und Filtern
1235
22.4.6 Manipulieren der XML-Daten
1235
Editieren der Daten
1236
Hinzufügen von Daten
1236
Löschen
1237
22.4.7 XML-Dokumente transformieren
1237
22.5 Weitere Möglichkeiten der XML-Verarbeitung
1240
22.5.1 Die relationale Sicht mit XmlDataDocument
1240
Laden von XML-Daten
1240
Verwendung des DataSets
1241
22.5.2 XML-Daten aus Objektstrukturen erzeugen
1243
22.5.3 Schnelles Suchen in XML-Daten mit XPathNavigator
1246
22.5.4 Schnelles Auslesen von XML-Daten mit XmlReader
1249
22.5.5 Erzeugen von XML-Daten mit XmlWriter
1251
22.5.6 XML transformieren mit XSLT
1253
22.6 Praxisbeispiele
1255
22.6.1 Mit dem DOM in XML-Dokumenten navigieren
1255
Oberfläche
1255
Quelltext
1256
Test
1257
Bemerkungen
1258
22.6.2 XML-Daten in eine TreeView einlesen
1258
Oberfläche
1258
Quelltext
1258
Test
1260
Ergänzung
1260
23 Einführung in ADO.NET
1262
23.1 Eine kleine Übersicht
1262
23.1.1 Die ADO.NET-Klassenhierarchie
1262
23.1.2 Die Klassen der Datenprovider
1263
.NET-Datenprovider
1264
Weitere Datenprovider
1264
Anzeige der installierten Datenprovider
1265
23.1.3 Das Zusammenspiel der ADO.NET-Klassen
1266
23.2 Das Connection-Objekt
1267
23.2.1 Allgemeiner Aufbau
1267
23.2.2 OleDbConnection
1267
Parameter für OleDb-Zugriff
1267
OleDb-Provider für Access Datenbank
1268
23.2.3 Schließen einer Verbindung
1269
23.2.4 Eigenschaften des Connection-Objekts
1269
ConnectionString-Eigenschaft
1269
Database- und DataSource-Eigenschaft
1270
Provider-Eigenschaft
1270
ServerVersion-Eigenschaft
1270
ConnectionTimeout-Eigenschaft
1271
State-Eigenschaft
1271
23.2.5 Methoden des Connection-Objekts
1271
Open- und Close-Methode
1271
ChangeDatabase-Methode
1272
CreateCommand-Methode
1272
23.2.6 Der ConnectionStringBuilder
1272
23.3 Das Command-Objekt
1272
23.3.1 Erzeugen und Anwenden eines Command-Objekts
1273
23.3.2 Erzeugen mittels CreateCommand-Methode
1273
23.3.3 Eigenschaften des Command-Objekts
1274
Connection- und CommandText-Eigenschaft
1274
CommandTimeout-Eigenschaft
1274
CommandType-Eigenschaft
1275
23.3.4 Methoden des Command-Objekts
1276
ExecuteNonQuery-Methode
1276
ExecuteReader-Methode
1276
ExecuteScalar-Methode
1276
23.3.5 Freigabe von Connection- und Command-Objekten
1277
23.4 Parameter-Objekte
1278
23.4.1 Erzeugen und Anwenden eines Parameter-Objekts
1278
23.4.2 Eigenschaften des Parameter-Objekts
1279
ParameterName- und Value-Eigenschaft
1279
DbType, OleDbType und SqlDbType-Eigenschaft
1279
Direction-Eigenschaft
1279
23.5 Das CommandBuilder-Objekt
1280
23.5.1 Erzeugen
1280
23.5.2 Anwenden
1280
23.6 Das DataReader-Objekt
1281
23.6.1 DataReader erzeugen
1281
23.6.2 Daten lesen
1282
23.6.3 Eigenschaften des DataReaders
1283
Item-Eigenschaft
1283
FieldCount-Eigenschaft
1283
IsClosed-Eigenschaft
1283
23.6.4 Methoden des DataReaders
1283
Read-Methode
1283
GetValue- und GetValues-Methode
1283
GetOrdinal- und ähnliche Methoden
1283
Bemerkungen
1283
23.7 Das DataAdapter-Objekt
1284
23.7.1 DataAdapter erzeugen
1284
Konstruktor mit SELECT-String und Connection-Objekt
1284
Konstruktor mit SelectCommand-Objekt
1285
23.7.2 Command-Eigenschaften
1285
23.7.3 Fill-Methode
1286
Begrenzen der Datenmenge
1286
23.7.4 Update-Methode
1287
23.8 Praxisbeispiele
1288
23.8.1 Wichtige ADO.NET-Objekte im Einsatz
1288
Oberfläche
1288
Quellcode
1288
Test
1289
Bemerkungen
1289
23.8.2 Eine Aktionsabfrage ausführen
1289
Oberfläche
1290
Quellcode
1290
Test
1291
Bemerkungen
1291
23.8.3 Eine Auswahlabfrage aufrufen
1292
Oberfläche
1292
Quellcode
1292
Test
1294
23.8.4 Die Datenbank aktualisieren
1294
Oberfläche
1295
Quellcode (Command-Objekte selbst programmiert)
1295
Test
1296
Bemerkungen
1297
24 Das DataSet
1298
24.1 Grundlegende Features des DataSets
1298
24.1.1 Die Objekthierarchie
1299
24.1.2 Die wichtigsten Klassen
1299
24.1.3 Erzeugen eines DataSets
1300
Copy-Methode
1300
Clone-Methode
1301
GetChanges-/HasChanges-Methode
1301
24.2 Das DataTable-Objekt
1301
24.2.1 DataTable erzeugen
1302
24.2.2 Spalten hinzufügen
1302
24.2.3 Zeilen zur DataTable hinzufügen
1303
NewRow-Methode
1303
ImportRow-Methode
1303
24.2.4 Auf den Inhalt einer DataTable zugreifen
1304
Columns- und Rows-Eigenschaften
1304
TableName- und ColumnName-Eigenschaften
1304
Find-Methode
1305
Zeilen löschen
1305
24.3 Die DataView
1306
24.3.1 Erzeugen einer DataView
1306
24.3.2 Sortieren und Filtern von Datensätzen
1306
24.3.3 Suchen von Datensätzen
1307
24.4 Typisierte DataSets
1307
24.4.1 Ein typisiertes DataSet erzeugen
1308
24.4.2 Das Konzept der Datenquellen
1309
24.4.3 Typisierte DataSets und TableAdapter
1310
Warum sollte man ein typisiertes DataSet einsetzen?
1310
Der TableAdapter
1311
24.5 Die Qual der Wahl
1311
24.5.1 DataReader – der schnelle Lesezugriff
1312
24.5.2 DataSet – die Datenbank im Hauptspeicher
1312
Typisiertes versus untypisiertes DataSet
1312
24.5.3 Objektrelationales Mapping – die Zukunft?
1313
LINQ to SQL/LINQ to Entities
1313
24.6 Praxisbeispiele
1314
24.6.1 In der DataView sortieren und filtern
1314
Oberfläche
1314
Quellcode
1314
Test
1315
Bemerkungen
1316
24.6.2 Suche nach Datensätzen
1316
Oberfläche
1316
Quellcode
1316
Test
1317
24.6.3 Ein DataSet in einen XML-String serialisieren
1317
Konvertierungsmethoden
1318
Testoberfläche Form1
1319
Quellcode Form1
1319
Erzeugen eines untypisierten DataSets als Testobjekt
1320
Test
1321
24.6.4 Untypisiertes in ein typisiertes DataSet konvertieren
1322
Konvertierungscode
1323
Normales DataSet erzeugen
1323
Typisiertes DataSet erzeugen
1324
Oberfläche
1325
Test
1326
Bemerkungen
1327
24.6.5 Eine LINQ to SQL-Abfrage ausführen
1327
Datenmodell per LINQ to SQL-Designer erzeugen
1327
Datenquelle hinzufügen
1328
Oberfläche
1329
Test
1330
Bemerkung
1330
25 OOP-Spezial
1332
25.1 Eine kleine Einführung in die UML
1332
25.1.1 Use Case-Diagramm
1332
25.1.2 Use Case-Dokumentation
1334
USE CASE: Inbetriebnahme des Autos
1334
USE CASE: Versuchter Diebstahl des Autos
1335
25.1.3 Objekte identifizieren
1335
25.1.4 Statisches Modell
1336
25.1.5 Beziehungen zwischen den Klassen
1337
25.1.6 Dynamisches Modell
1337
Relevante Zustände identifizieren
1337
Zustandsüberführungsdiagramm
1338
25.1.7 Implementierung
1338
Klasse CSchlüssel
1339
Klasse CSchloss
1340
Klasse CAuto
1340
25.1.8 Test-Client
1342
Test
1344
Bemerkungen
1345
25.2 Der Klassen-Designer
1345
25.2.1 Ein neues Klassendiagramm erzeugen
1346
25.2.2 Werkzeugkasten
1347
25.2.3 Enumeration
1348
25.2.4 Klasse
1350
Klassendetails-Fenster
1351
25.2.5 Struktur
1352
25.2.6 Abstrakte Klasse
1352
25.2.7 Schnittstelle
1354
25.2.8 Delegate
1356
25.2.9 Zuordnung
1358
25.2.10 Vererbung
1359
25.2.11 Diagramme anpassen
1359
25.2.12 Wann lohnt sich der Klassen-Designer?
1360
25.3 Praxisbeispiele
1360
25.3.1 Implementierung einer Finite State Machine
1360
Zustandsüberführungsmatrix
1360
CAuto
1364
Clientcode
1365
Test
1366
25.3.2 Modellierung des Bestellsystems einer Firma
1366
Klassendiagramm
1366
Klasse CBestellung
1367
Klasse CPerson
1369
Klasse CKunde
1370
Klasse CFirma
1373
Klasse Form1
1374
Abschlusstest
1378
Bemerkungen
1378
26 Das Microsoft Event Pattern
1380
26.1 Einführung in Design Pattern
1380
26.2 Aufbau und Bedeutung des Observer Pattern
1381
26.2.1 Subjekt und Observer
1381
26.2.2 Sequenzdiagramme
1383
26.2.3 Die Registration-Sequenz
1383
26.2.4 Die Notification-Sequenz
1384
26.2.5 Die Unregistration-Sequenz
1384
26.2.6 Bedeutung der Sequenzen für das Geschäftsmodell
1385
26.2.7 Die Rolle des Containers
1385
26.3 Implementieren mit Interfaces und Callbacks
1386
26.3.1 Übersicht und Klassendiagramm
1386
26.3.2 Die Schnittstellen IObserver und IObservable
1388
26.3.3 Die Abstrakte Klasse Subject
1388
26.3.4 Observer1
1389
26.3.5 Observer2
1390
26.3.6 Model
1391
26.3.7 Form1
1392
26.3.8 Ein zweites Klassendiagramm
1393
26.3.9 Testen
1394
26.4 Implementierung mit Delegates und Events
1395
26.4.1 Multicast-Events
1396
26.4.2 IObserver, IObservable und Subject
1396
26.4.3 Observer1 und Observer2
1397
26.4.4 Model
1397
26.4.5 Form1
1398
26.4.6 Test und Vergleich
1398
26.4.7 Klassendiagramm
1399
26.5 Implementierung des Microsoft Event Pattern
1400
26.5.1 Namensgebung für Ereignisse
1400
26.5.2 Namensgebung und Signatur der Delegates
1400
26.5.3 Hinzufügen einer das Ereignis auslösenden Methode
1401
Neue Klasse NumberChangedEventArgs
1401
26.5.4 Model
1402
26.5.5 Observer1
1403
26.5.6 Form1
1404
26.6 Test und Vergleich
1404
26.7 Klassendiagramm
1404
26.8 Implementierung eines Event Pattern
1405
26.9 Praxisbeispiel
1407
26.9.1 Objekte beobachten sich gegenseitig
1407
Oberfläche
1407
NumberChangedEventArgs und MaximumChangedEventArgs
1407
Model
1408
Observer1
1410
Observer2
1411
Form1
1412
Test und Vergleich
1414
Klassenzusammenstellung
1415
Klassendiagramm
1416
27 Verteilen von Anwendungen
1418
27.1 ClickOnce-Deployment
1419
27.1.1 Übersicht/Einschränkungen
1419
27.1.2 Die Vorgehensweise
1420
27.1.3 Ort der Veröffentlichung
1420
27.1.4 Anwendungsdateien
1421
27.1.5 Erforderliche Komponenten
1421
27.1.6 Aktualisierungen
1422
27.1.7 Veröffentlichungsoptionen
1423
27.1.8 Veröffentlichen
1424
27.1.9 Verzeichnisstruktur
1424
27.1.10 Der Webpublishing-Assistent
1426
27.1.11 Neue Versionen erstellen
1427
27.2 InstallShield
1427
27.2.1 Installation
1427
27.2.2 Aktivieren
1428
27.2.3 Ein neues Setup-Projekt
1428
Anwendungseinstellungen
1429
Installationsbedingungen
1430
Optionales Setup
1431
Anwendungsdateien
1431
Startmenü und Verknüpfungen
1432
Registrierungseinträge
1432
Setup-Dialoge/Erscheinungsbild
1433
Installationsdateien
1435
27.2.4 Finaler Test
1436
28 Weitere Techniken
1438
28.1 Zugriff auf die Zwischenablage
1438
28.1.1 Das Clipboard-Objekt
1438
Kopieren
1439
Einfügen
1439
28.1.2 Zwischenablage-Funktionen für Textboxen
1440
28.2 Arbeiten mit der Registry
1440
28.2.1 Allgemeines
1441
28.2.2 Registry-Unterstützung in .NET
1443
28.3 .NET-Reflection
1444
28.3.1 Übersicht
1444
28.3.2 Assembly laden
1444
28.3.3 Mittels GetType und Type Informationen sammeln
1445
28.3.4 Dynamisches Laden von Assemblies
1447
Beispiel
1447
28.4 Das SerialPort-Control
1450
28.4.1 Übersicht
1450
Wichtige Eigenschaften
1450
Wichtige Methoden
1451
Wichtige Ereignisse
1451
28.4.2 Einführungsbeispiele
1451
SerialPortTalker
1451
SerialPortListener
1452
Test
1453
28.4.3 Thread-Probleme bei Windows Forms-Anwendungen
1454
28.4.4 Ein einfaches Terminalprogramm
1457
Bedienoberfläche
1458
Quellcode
1458
Test
1461
Bemerkungen zur Verarbeitung von Messdaten
1461
28.5 Praxisbeispiele
1462
28.5.1 Zugriff auf die Registry
1462
Oberfläche
1462
Quelltext
1462
Test
1464
28.5.2 Dateiverknüpfungen erzeugen
1464
28.5.3 Betrachter für Manifestressourcen
1466
Oberfläche
1466
Quellcode Form1
1466
Test
1468
28.5.4 Ressourcen mit Reflection auslesen
1469
29 Konsolenanwendungen
1472
29.1 Grundaufbau/Konzepte
1472
29.1.1 Unser Hauptprogramm – Program.cs
1473
static void Main()
1474
29.1.2 Rückgabe eines Fehlerstatus
1474
29.1.3 Parameterübergabe
1475
29.1.4 Zugriff auf die Umgebungsvariablen
1476
29.2 Die Kommandozentrale: System.Console
1477
29.2.1 Eigenschaften
1478
29.2.2 Methoden/Ereignisse
1478
29.2.3 Textausgaben
1479
29.2.4 Farbangaben
1480
29.2.5 Tastaturabfragen
1481
Modifiers-Eigenschaft und ConsoleModifiers-Enumeration
1482
29.2.6 Arbeiten mit Streamdaten
1482
29.3 Praxisbeispiel
1484
29.3.1 Farbige Konsolenanwendung
1484
29.3.2 Weitere Hinweise und Beispiele
1486
30 Windows Forms-Anwendungen
1490
30.1 Grundaufbau/Konzepte
1490
30.1.1 Das Hauptprogramm – Program.cs
1491
static void Main()
1492
Application.EnableVisualStyles
1493
Application.SetCompatibleTextRenderingDefault(false)
1493
Application.Run(new Form1())
1493
30.1.2 Die Oberflächendefinition – Form1.Designer.cs
1495
30.1.3 Die Spielwiese des Programmierers – Form1.cs
1496
30.1.4 Die Datei AssemblyInfo.cs
1497
30.1.5 Resources.resx/Resources.Designer.cs
1498
30.1.6 Settings.settings/Settings.Designer.cs
1499
30.1.7 Settings.cs
1500
30.2 Ein Blick auf die Application-Klasse
1501
30.2.1 Eigenschaften
1501
30.2.2 Methoden
1502
30.2.3 Ereignisse
1504
30.3 Allgemeine Eigenschaften von Komponenten
1504
30.3.1 Font
1505
30.3.2 Handle
1507
30.3.3 Tag
1508
30.3.4 Modifiers
1508
30.4 Allgemeine Ereignisse von Komponenten
1509
30.4.1 Die Eventhandler-Argumente
1509
30.4.2 Sender
1509
30.4.3 Der Parameter e
1511
30.4.4 Mausereignisse
1511
Tastaturereignisse
1512
30.4.5 KeyPreview
1513
30.4.6 Weitere Ereignisse
1514
30.4.7 Validätsprüfungen
1514
30.4.8 SendKeys
1515
30.5 Allgemeine Methoden von Komponenten
1516
31 Windows Forms-Formulare
1518
31.1 Übersicht
1518
31.1.1 Wichtige Eigenschaften des Form-Objekts
1519
Controls-Auflistung
1520
31.1.2 Wichtige Ereignisse des Form-Objekts
1521
31.1.3 Wichtige Methoden des Form-Objekts
1522
31.2 Praktische Aufgabenstellungen
1523
31.2.1 Fenster anzeigen
1523
Nichtmodale Fenster
1524
Modale Fenster (Dialoge)
1524
31.2.2 Splash Screens beim Anwendungsstart anzeigen
1526
31.2.3 Eine Sicherheitsabfrage vor dem Schließen anzeigen
1529
31.2.4 Ein Formular durchsichtig machen
1529
31.2.5 Die Tabulatorreihenfolge festlegen
1530
31.2.6 Ausrichten von Komponenten im Formular
1531
Dock
1531
Anchor
1532
31.2.7 Spezielle Panels für flexible Layouts
1533
SplitContainer
1534
FlowLayoutPanel
1534
TableLayoutPanel
1534
31.2.8 Menüs erzeugen
1535
MenuStrip
1535
ContextMenuStrip
1537
Weitere Eigenschaften von Menüeinträgen
1538
31.3 MDI-Anwendungen
1539
31.3.1 "Falsche" MDI-Fenster bzw. Verwenden von Parent
1539
31.3.2 Die echten MDI-Fenster
1540
31.3.3 Die Kindfenster
1541
31.3.4 Automatisches Anordnen der Kindfenster
1542
31.3.5 Zugriff auf die geöffneten MDI-Kindfenster
1543
31.3.6 Zugriff auf das aktive MDI-Kindfenster
1544
31.3.7 Mischen von Kindfenstermenü/MDIContainer-Menü
1544
AllowMerge
1544
MergeAction und MergeIndex
1545
31.4 Praxisbeispiele
1545
31.4.1 Informationsaustausch zwischen Formularen
1545
Überblick
1545
Bedienoberfläche Form1 (Hauptformular)
1546
Bedienoberfläche Form2 ... Form5 (untergeordnete Formulare)
1546
Allgemeiner Code für Form1
1547
Variante 1: Übergabe der Formular-Referenz im Konstruktor
1548
Variante 2: Übergabe der Formular-Referenz als Eigenschaft
1549
Variante 3: Übergabe der Formular-Referenz als globale Variable
1550
Variante 4: Übergabe der Formular-Referenz als Ownership
1551
Bemerkungen
1552
31.4.2 Ereigniskette beim Laden/Entladen eines Formulars
1552
Bedienoberfläche (Form1 und Form2)
1553
Änderung des Startformulars
1553
Quellcode von Form1
1554
Quellcode von Form2
1556
Test
1556
Bemerkungen
1557
32 Windows Forms-Komponenten
1558
32.1 Allgemeine Hinweise
1558
32.1.1 Hinzufügen von Komponenten
1558
32.1.2 Komponenten zur Laufzeit per Code erzeugen
1559
32.2 Allgemeine Steuerelemente
1561
32.2.1 Label
1561
32.2.2 LinkLabel
1562
Wichtige Eigenschaften
1562
Hyperlink einfügen
1562
32.2.3 Button
1563
32.2.4 TextBox
1564
Mehrzeilige Textboxen
1564
Markieren von Text
1565
PasswordChar
1566
Automatisches Vervollständigen
1566
32.2.5 MaskedTextBox
1567
32.2.6 CheckBox
1568
32.2.7 RadioButton
1570
32.2.8 ListBox
1570
32.2.9 CheckedListBox
1572
32.2.10 ComboBox
1572
32.2.11 PictureBox
1573
32.2.12 DateTimePicker
1574
32.2.13 MonthCalendar
1574
32.2.14 HScrollBar, VScrollBar
1575
32.2.15 TrackBar
1576
32.2.16 NumericUpDown
1576
32.2.17 DomainUpDown
1577
32.2.18 ProgressBar
1577
32.2.19 RichTextBox
1578
32.2.20 ListView
1579
ListViewItem
1579
ImageList
1580
Übersichten zur ListView
1580
32.2.21 TreeView
1585
Knoten zur Laufzeit erzeugen
1586
Auswerten des aktiven Knotens
1587
Wichtige Eigenschaften von TreeView
1588
Wichtige Methoden von TreeView
1589
Wichtige Ereignisse von TreeView
1589
Wichtige Eigenschaften von TreeNode
1589
Wichtige Methoden von TreeNode
1590
32.2.22 WebBrowser
1590
32.3 Container
1591
32.3.1 FlowLayout/TableLayout/SplitContainer
1591
32.3.2 Panel
1591
Oberflächen gestalten
1591
32.3.3 GroupBox
1592
32.3.4 TabControl
1593
Wichtige Eigenschaften
1594
Wichtige Ereignisse
1594
32.3.5 ImageList
1595
32.4 Menüs & Symbolleisten
1596
32.4.1 MenuStrip und ContextMenuStrip
1596
32.4.2 ToolStrip
1596
32.4.3 StatusStrip
1596
32.4.4 ToolStripContainer
1597
32.5 Daten
1597
32.5.1 DataSet
1597
32.5.2 DataGridView/DataGrid
1598
32.5.3 BindingNavigator/BindingSource
1598
32.5.4 Chart
1598
32.6 Komponenten
1600
32.6.1 ErrorProvider
1600
32.6.2 HelpProvider
1600
32.6.3 ToolTip
1600
32.6.4 BackgroundWorker
1600
32.6.5 Timer
1600
32.6.6 SerialPort
1601
32.7 Drucken
1601
32.7.1 PrintPreviewControl
1601
32.7.2 PrintDocument
1601
32.8 Dialoge
1601
32.8.1 OpenFileDialog/SaveFileDialog/FolderBrowserDialog
1601
32.8.2 FontDialog/ColorDialog
1602
32.9 WPF-Unterstützung mit dem ElementHost
1602
32.10 Praxisbeispiele
1602
32.10.1 Mit der CheckBox arbeiten
1602
Oberfläche
1602
Quellcode
1603
Test
1603
32.10.2 Steuerelemente per Code selbst erzeugen
1604
Oberfläche
1604
Quellcode
1604
Test
1606
Bemerkungen
1606
32.10.3 Controls-Auflistung im TreeView anzeigen
1606
Oberfläche
1607
Quellcode
1608
Test
1609
32.10.4 WPF-Komponenten mit dem ElementHost anzeigen
1610
Oberfläche (WPF-Control)
1611
Oberfläche (Windows Forms)
1613
33 Grundlagen Grafikausgabe
1614
33.1 Übersicht und erste Schritte
1614
33.1.1 GDI+ – Ein erster Einblick für Umsteiger
1615
Ein zentrales Grafikausgabe-Objekt
1615
Die Grafikausgabe ist zustandslos
1615
Prinzipieller Ablauf
1615
Wichtige Features
1616
33.1.2 Namespaces für die Grafikausgabe
1616
System.Drawing
1616
System.Drawing.Drawing2D
1617
System.Drawing.Imaging
1617
System.Drawing.Printing
1617
System.Drawing.Design
1618
System.Drawing.Text
1618
33.2 Darstellen von Grafiken
1618
33.2.1 Die PictureBox-Komponente
1618
33.2.2 Das Image-Objekt
1619
33.2.3 Laden von Grafiken zur Laufzeit
1620
33.2.4 Sichern von Grafiken
1620
Spezielle Einstellungen
1621
33.2.5 Grafikeigenschaften ermitteln
1621
Breite und Höhe der Grafik
1621
Auflösung
1621
Grafiktyp
1622
Interner Bitmap-Aufbau
1622
33.2.6 Erzeugen von Vorschaugrafiken (Thumbnails)
1622
33.2.7 Die Methode RotateFlip
1623
33.2.8 Skalieren von Grafiken
1624
33.3 Das .NET-Koordinatensystem
1625
33.3.1 Globale Koordinaten
1626
33.3.2 Seitenkoordinaten (globale Transformation)
1627
Translation (Verschiebung)
1627
Skalierung (Vergrößerung/Verkleinerung)
1627
Rotation
1628
33.3.3 Gerätekoordinaten (Seitentransformation)
1629
33.4 Grundlegende Zeichenfunktionen von GDI+
1630
33.4.1 Das zentrale Graphics-Objekt
1630
Wie erzeuge ich ein Graphics-Objekt?
1631
Die Invalidate-Methode
1632
Die Eigenschaft ResizeRedraw
1632
33.4.2 Punkte zeichnen/abfragen
1633
33.4.3 Linien
1634
33.4.4 Kantenglättung mit Antialiasing
1635
33.4.5 PolyLine
1636
33.4.6 Rechtecke
1636
DrawRectangle
1636
FillRectangle
1637
DrawRectangles/FillRectangles
1637
33.4.7 Polygone
1638
33.4.8 Splines
1639
33.4.9 Bézierkurven
1640
33.4.10 Kreise und Ellipsen
1641
33.4.11 Tortenstück (Segment)
1641
Kuchendiagramme
1642
33.4.12 Bogenstück
1643
33.4.13 Wo sind die Rechtecke mit den runden Ecken?
1644
33.4.14 Textausgabe
1645
Texteigenschaften
1646
Ausgabe von mehrzeiligem Text
1646
Textattribute
1647
Ausgabequalität
1647
Und wo bleibt eine Methode zum Drehen von Text?
1648
33.4.15 Ausgabe von Grafiken
1649
Skalieren
1650
33.5 Unser Werkzeugkasten
1650
33.5.1 Einfache Objekte
1650
Point, FPoint
1650
Size, FSize
1651
Rectangle, FRectangle
1651
33.5.2 Vordefinierte Objekte
1652
Vordefinierte Pinsel
1652
Vordefinierte Stifte
1652
Vordefinierte Farben
1653
Vordefinierte Icons
1653
33.5.3 Farben/Transparenz
1654
ARGB-Farben
1654
Was ist mit dem höchstwertigen Byte?
1654
33.5.4 Stifte (Pen)
1655
Einfarbige Stifte
1656
Stifte mit Füllung
1657
33.5.5 Pinsel (Brush)
1658
33.5.6 SolidBrush
1659
33.5.7 HatchBrush
1659
33.5.8 TextureBrush
1660
33.5.9 LinearGradientBrush
1661
33.5.10 PathGradientBrush
1662
33.5.11 Fonts
1663
33.5.12 Path-Objekt
1664
Füllen
1665
Fillmode
1666
33.5.13 Clipping/Region
1667
Regions
1668
Clipping
1670
33.6 Standarddialoge
1671
33.6.1 Schriftauswahl
1671
33.6.2 Farbauswahl
1672
33.7 Praxisbeispiele
1674
33.7.1 Ein Graphics-Objekt erzeugen
1674
Variante 1: Verwendung des Paint-Events
1674
Test
1674
Variante 2: Überschreiben der OnPaint-Methode
1675
Test
1675
Variante 3: Graphics-Objekt mit CreateGraphics erzeugen
1675
Test
1676
Variante 4: Verwendung des Graphics-Objekts einer PictureBox
1676
33.7.2 Zeichenoperationen mit der Maus realisieren
1676
Oberfläche
1676
Quelltext
1677
Test
1679
34 Druckausgabe
1680
34.1 Einstieg und Übersicht
1680
34.1.1 Nichts geht über ein Beispiel
1680
34.1.2 Programmiermodell
1682
34.1.3 Kurzübersicht der Objekte
1683
34.2 Auswerten der Druckereinstellungen
1683
34.2.1 Die vorhandenen Drucker
1683
34.2.2 Der Standarddrucker
1684
34.2.3 Verfügbare Papierformate/Seitenabmessungen
1685
34.2.4 Der eigentliche Druckbereich
1686
34.2.5 Die Seitenausrichtung ermitteln
1687
34.2.6 Ermitteln der Farbfähigkeit
1687
34.2.7 Die Druckauflösung abfragen
1687
34.2.8 Ist beidseitiger Druck möglich?
1688
34.2.9 Einen "Informationsgerätekontext" erzeugen
1688
34.2.10 Abfragen von Werten während des Drucks
1689
34.3 Festlegen von Druckereinstellungen
1690
34.3.1 Einen Drucker auswählen
1690
34.3.2 Drucken in Millimetern
1690
34.3.3 Festlegen der Seitenränder
1691
34.3.4 Druckjobname
1692
34.3.5 Anzahl der Kopien
1693
34.3.6 Beidseitiger Druck
1693
34.3.7 Seitenzahlen festlegen
1694
34.3.8 Druckqualität verändern
1697
34.3.9 Ausgabemöglichkeiten des Chart-Controls nutzen
1698
34.4 Die Druckdialoge verwenden
1698
34.4.1 PrintDialog
1699
34.4.2 PageSetupDialog
1700
Probleme mit den Rändern
1701
34.4.3 PrintPreviewDialog
1702
34.4.4 Ein eigenes Druckvorschau-Fenster realisieren
1703
34.5 Drucken mit OLE-Automation
1704
34.5.1 Kurzeinstieg in die OLE-Automation
1704
Programmieren der OLE-Automation
1705
34.5.2 Drucken mit Microsoft Word
1706
34.6 Praxisbeispiele
1708
34.6.1 Den Drucker umfassend konfigurieren
1708
Oberfläche (Hauptformular Form1)
1708
Oberfläche (Druckvorschau Form2)
1709
Quelltext (Form1)
1710
Quelltext (Form2)
1715
Test
1716
34.6.2 Diagramme mit dem Chart-Control drucken
1718
Oberfläche
1718
Quelltext
1718
Test
1719
34.6.3 Druckausgabe mit Word
1720
Oberfläche
1720
Quelltext
1721
Test
1723
Anmerkung ab .NET 4.0
1724
35 Windows Forms-Datenbindung
1726
35.1 Prinzipielle Möglichkeiten
1726
35.2 Manuelle Bindung an einfache Datenfelder
1727
35.2.1 BindingSource erzeugen
1727
35.2.2 Binding-Objekt
1728
35.2.3 DataBindings-Collection
1728
Bemerkungen
1728
35.3 Manuelle Bindung an Listen und Tabellen
1728
35.3.1 DataGridView
1729
35.3.2 Datenbindung von ComboBox und ListBox
1729
35.4 Entwurfszeit-Bindung an typisierte DataSets
1729
35.5 Drag & Drop-Datenbindung
1731
35.6 Navigations- und Bearbeitungsfunktionen
1731
35.6.1 Navigieren zwischen den Datensätzen
1731
35.6.2 Hinzufügen und Löschen
1731
35.6.3 Aktualisieren und Abbrechen
1732
35.6.4 Verwendung des BindingNavigators
1732
35.7 Die Anzeigedaten formatieren
1733
35.8 Praxisbeispiele
1733
35.8.1 Einrichten und Verwenden einer Datenquelle
1733
Assistent zum Konfigurieren von Datenquellen
1733
Verwenden der Datenquelle
1735
Test
1736
Abfragemethoden hinzufügen
1736
35.8.2 Eine Auswahlabfrage im DataGridView anzeigen
1737
Oberfläche
1738
Quellcode
1738
Test
1739
35.8.3 Master-Detailbeziehungen im DataGrid anzeigen
1740
Oberfläche
1740
Quellcode
1740
Test
1741
35.8.4 Datenbindung Chart-Control
1741
Oberfläche
1742
Quellcode
1744
Test
1744
36 Erweiterte Grafikausgabe
1746
36.1 Transformieren mit der Matrix-Klasse
1746
36.1.1 Übersicht
1746
36.1.2 Translation
1747
36.1.3 Skalierung
1747
36.1.4 Rotation
1748
36.1.5 Scherung
1748
36.1.6 Zuweisen der Matrix
1749
36.2 Low-Level-Grafikmanipulationen
1749
36.2.1 Worauf zeigt Scan0?
1750
36.2.2 Anzahl der Spalten bestimmen
1751
36.2.3 Anzahl der Zeilen bestimmen
1752
36.2.4 Zugriff im Detail (erster Versuch)
1752
36.2.5 Zugriff im Detail (zweiter Versuch)
1754
Weiter optimieren
1755
36.2.6 Invertieren
1756
36.2.7 In Graustufen umwandeln
1757
36.2.8 Heller/Dunkler
1758
36.2.9 Kontrast
1760
36.2.10 Gamma-Wert
1761
36.2.11 Histogramm spreizen
1761
36.2.12 Ein universeller Grafikfilter
1764
Beispiel: Eine universelle Filter-Klasse entwickeln
1764
Die Klasse GrafikFilter im Einsatz
1767
36.3 Fortgeschrittene Techniken
1768
36.3.1 Flackerfrei dank Double Buffering
1768
Eine Puffer-Bitmap erzeugen
1768
Und was ist mit der PictureBox?
1769
36.3.2 Animationen
1770
Vorbereiten des Ausgabeobjekts
1770
Styles bei Controls setzen
1771
Die eigentliche Grafikausgabe
1771
Bemerkungen
1773
36.3.3 Animated GIFs
1773
Wie lernen die Bilder das Laufen?
1774
36.3.4 Auf einzelne GIF-Frames zugreifen
1775
Wiedergabe einzelner Frames
1776
Erzeugen eines Bitmap-Strips
1776
36.3.5 Transparenz realisieren
1777
36.3.6 Eine Grafik maskieren
1778
36.3.7 JPEG-Qualität beim Sichern bestimmen
1780
36.4 Grundlagen der 3D-Vektorgrafik
1781
36.4.1 Datentypen für die Verwaltung
1781
36.4.2 Eine universelle 3D-Grafik-Klasse
1782
36.4.3 Grundlegende Betrachtungen
1783
Drehwinkel
1784
Darstellungsmöglichkeiten
1784
36.4.4 Translation
1786
36.4.5 Streckung/Skalierung
1787
36.4.6 Rotation
1788
36.4.7 Die eigentlichen Zeichenroutinen
1790
Ausgabe einer Linie
1790
Ausgabe eines Koordinatensystems
1790
36.5 Und doch wieder GDI-Funktionen ...
1792
36.5.1 Am Anfang war das Handle ...
1792
36.5.2 Gerätekontext (Device Context Types)
1795
Formular-DC über Graphics-Objekt erzeugen
1795
Formular-DC mit GetDC erzeugen
1796
36.5.3 Koordinatensysteme und Abbildungsmodi
1797
36.5.4 Zeichenwerkzeuge/Objekte
1801
Erzeugen und Parametrieren der Objekte
1802
36.5.5 Bitmaps
1803
Bitmaps kopieren
1805
Bitmaps skalieren
1806
36.6 Praxisbeispiele
1807
36.6.1 Die Transformationsmatrix verstehen
1807
Oberfläche
1807
Quelltext
1807
Test
1809
36.6.2 Eine 3D-Grafikausgabe in Aktion
1810
Oberfläche
1810
Quelltext
1810
Test/Bemerkungen
1812
36.6.3 Einen Fenster-Screenshot erzeugen
1813
Oberfläche
1813
Quelltext
1813
Test
1814
Bemerkung
1815
37 Ressourcen/Lokalisierung
1816
37.1 Manifestressourcen
1816
37.1.1 Erstellen von Manifestressourcen
1816
37.1.2 Zugriff auf Manifestressourcen
1818
Namensgebung eingebetteter Ressourcen
1818
Auflisten aller eingebetteten Ressourcen
1818
Die Inhalte eingebetteter Ressourcen auslesen
1819
37.2 Typisierte Ressourcen
1820
37.2.1 Erzeugen von .resources-Dateien
1820
37.2.2 Hinzufügen der .resources-Datei zum Projekt
1820
37.2.3 Zugriff auf die Inhalte von .resources-Dateien
1821
Bemerkungen zum Zugriff auf .resources-Dateien
1821
37.2.4 ResourceManager einer .resources-Datei erzeugen
1821
Bemerkungen
1822
37.2.5 Was sind .resx-Dateien?
1822
37.3 Streng typisierte Ressourcen
1822
37.3.1 Erzeugen streng typisierter Ressourcen
1823
37.3.2 Verwenden streng typisierter Ressourcen
1823
37.3.3 Streng typisierte Ressourcen per Reflection auslesen
1824
37.4 Anwendungen lokalisieren
1826
37.4.1 Localizable und Language
1826
37.4.2 Beispiel "Landesfahnen"
1826
37.4.3 Einstellen der aktuellen Kultur zur Laufzeit
1829
Bemerkungen
1830
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
1839
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)
1842
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 (Indexer)
1844
38.5.10 Wertebereichsbeschränkung und Fehlerprüfung
1844
38.5.11 Eigenschaften von Aufzählungstypen
1846
38.5.12 Standard Objekt-Eigenschaften
1847
38.5.13 Eigene Objekt-Eigenschaften
1847
38.6 Methoden
1849
38.6.1 Konstruktor
1850
38.6.2 Class-Konstruktor
1851
38.6.3 Destruktor
1852
38.6.4 Aufruf des Basisklassen-Konstruktors
1852
38.6.5 Aufruf von Basisklassen-Methoden
1853
38.7 Ereignisse (Events)
1853
38.7.1 Ereignis mit Standardargument definieren
1854
38.7.2 Ereignis mit eigenen Argumenten
1855
38.7.3 Ein Default-Ereignis festlegen
1856
38.7.4 Mit Ereignissen auf Windows-Messages reagieren
1856
38.8 Weitere Themen
1858
38.8.1 Wohin mit der Komponente?
1858
38.8.2 Assembly-Informationen festlegen
1859
38.8.3 Assemblies signieren
1862
Erstellen eines AssemblyKey-File
1862
38.8.4 Komponenten-Ressourcen einbetten
1862
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
1866
Bemerkung
1868
38.9 Praxisbeispiele
1868
38.9.1 AnimGif – Anzeige von Animationen
1868
Oberfläche/Ressourcen
1868
Quelltext
1869
Test
1871
38.9.2 Eine FontComboBox entwickeln
1871
Quelltext
1871
Test
1873
38.9.3 Das PropertyGrid verwenden
1873
Oberfläche
1873
Quelltext
1873
Test
1875
39 Einführung in ASP.NET
1878
39.1 ASP.NET für Ein- und Umsteiger
1878
39.1.1 ASP – Ein kurzer 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 C# 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
1889
39.2.3 Verknüpfen der Objekte mit Ereignissen
1890
39.2.4 Programm kompilieren und testen
1891
39.3 Die ASP.NET-Projektdateien
1892
39.3.1 Die ASP.NET-Projekttypen
1893
ASP.NET-Website
1894
ASP.NET-Web-Anwendungen
1894
39.3.2 ASPX-Datei(en)
1895
39.3.3 Die aspx.cs-Datei(en)
1897
39.3.4 Die Datei Global.asax
1898
39.3.5 Das Startformular
1899
39.3.6 Die Datei Web.config
1899
39.3.7 Masterpages (master-Dateien)
1902
39.3.8 Sitemap (Web.sitemap)
1902
39.3.9 Benutzersteuerelemente (ascx-Dateien)
1903
39.3.10 Die Web-Projekt-Verzeichnisse
1903
39.4 Lernen am Beispiel
1904
39.4.1 Erstellen des Projekts
1904
39.4.2 Oberflächengestaltung
1905
Formular-Titel setzen
1906
39.4.3 Ereignisprogrammierung
1906
39.4.4 Ein Fehler, was nun?
1908
Einfache Fehlerbehandlung
1909
39.4.5 Ereignisse von Textboxen
1909
39.4.6 Ein gemeinsamer Ereignis-Handler
1910
39.4.7 Eingabefokus setzen
1910
39.4.8 Ausgaben in einer Tabelle
1911
39.4.9 Scrollen der Anzeige
1913
39.4.10 Zusammenspiel mehrerer Formulare
1914
Globale Variablen?
1914
Das Page_Load-Ereignis
1914
39.4.11 Umleiten bei Direktaufruf
1915
39.4.12 Ärger mit den Cookies
1916
39.4.13 Export auf den IIS
1918
39.5 Tipps & Tricks
1919
39.5.1 Nachinstallieren IIS 7 bzw. 7.5 (Windows 7)
1919
Nachinstallieren
1919
ASP.NET registrieren
1920
39.5.2 Nachinstallieren IIS8 (Windows 8)
1920
40 Übersicht ASP.NET-Controls
1922
40.1 Einfache Steuerelemente im Überblick
1922
40.1.1 Label
1922
AccessKey/AssociatedControlID
1923
Datenbindung
1923
40.1.2 TextBox
1924
40.1.3 Button, ImageButton, LinkButton
1925
Click-Ereignis
1925
OnClientClick-Eigenschaft
1925
PostbackUrl-Eigenschaft
1926
40.1.4 CheckBox, RadioButton
1926
40.1.5 CheckBoxList, BulletList, RadioButtonList
1927
Datenbindung
1927
BulletList
1928
40.1.6 Table
1928
40.1.7 Hyperlink
1930
40.1.8 Image, ImageMap
1930
40.1.9 Calendar
1932
40.1.10 Panel
1933
40.1.11 HiddenField
1933
40.1.12 Substitution
1934
40.1.13 XML
1935
Die XML-Daten
1935
Die Transformationsdateien
1936
Verwendung und Test
1937
40.1.14 FileUpload
1937
40.1.15 AdRotator
1938
40.2 Steuerelemente für die Seitennavigation
1939
40.2.1 Mehr Übersicht mit Web.Sitemap
1939
40.2.2 Menu
1941
Datenbindung an eine SiteMap
1942
Menü ohne Datenbindung
1943
40.2.3 TreeView
1944
TreeView ohne Datenbindung
1945
40.2.4 SiteMapPath
1947
40.2.5 MultiView, View
1948
40.2.6 Wizard
1949
40.3 Webseitenlayout/-design
1951
40.3.1 Masterpages
1951
Masterpage
1952
Content Seiten
1953
40.3.2 Themes/Skins
1954
Zuweisen des aktiven Theme
1955
Skin-Datei
1955
StyleSheet
1956
Grafiken
1956
40.3.3 Webparts
1957
40.4 Die Validator-Controls
1958
40.4.1 Übersicht
1958
40.4.2 Wo findet die Fehlerprüfung statt?
1959
40.4.3 Verwendung
1959
40.4.4 RequiredFieldValidator
1960
40.4.5 CompareValidator
1961
40.4.6 RangeValidator
1963
40.4.7 RegularExpressionValidator
1963
40.4.8 CustomValidator
1964
Clientseitige Validierung
1965
Serverseitige Validierung
1965
40.4.9 ValidationSummary
1967
40.4.10 Weitere Möglichkeiten
1968
Validierung zeitweise verhindern
1968
ValidationGroup bilden
1968
Eingabefokus setzen
1968
40.5 Praxisbeispiele
1968
40.5.1 Themes und Skins verstehen
1968
Oberfläche
1969
Projekt
1969
Skin bearbeiten
1970
Style Sheet bearbeiten
1970
Quelltext
1971
Test
1972
40.5.2 Masterpages verwenden
1973
Oberfläche (Masterpage)
1973
Oberfläche (Contentpage)
1974
Quelltext
1974
Test
1975
40.5.3 Webparts verwenden
1976
Vorbereiten der Portalseite
1976
User Control programmieren
1976
Inhalte für die Webzones definieren
1977
Programmieren des Werkzeugkastens
1978
41 Datenbindung unter ASP.NET
1982
41.1 Einstiegsbeispiel
1982
41.1.1 Erstellen der ASP.NET-Website
1982
Datenbank hinzufügen
1983
GridView hinzufügen
1984
GridView an Datenquelle anbinden
1984
Test
1986
41.2 Einführung
1987
41.2.1 Konzept
1987
41.2.2 Übersicht über die DataSource-Steuerelemente
1988
41.3 SQLDataSource
1989
41.3.1 Datenauswahl mit Parametern
1991
41.3.2 Parameter für INSERT, UPDATE und DELETE
1992
41.3.3 Methoden
1994
41.3.4 Caching
1995
41.3.5 Aktualisieren/Refresh
1996
41.4 AccessDataSource
1996
41.5 ObjectDataSource
1996
41.5.1 Verbindung zwischen Objekt und DataSource
1996
41.5.2 Ein Beispiel sorgt für Klarheit
1998
41.5.3 Geschäftsobjekte in einer Session verwalten
2002
41.6 SitemapDataSource
2004
41.7 LinqDataSource
2005
41.7.1 Bindung von einfachen Collections
2005
41.7.2 Bindung eines LINQ to SQL-DataContext
2006
41.8 EntityDataSource
2008
41.8.1 Entity Data Model erstellen
2008
41.8.2 EntityDataSource anbinden
2011
41.8.3 Datenmenge filtern
2014
41.9 XmlDataSource
2014
41.10 QueryExtender
2016
41.10.1 Grundlagen
2016
41.10.2 Suchen
2017
41.10.3 Sortieren
2019
41.11 GridView
2020
41.11.1 Auswahlfunktion (Zeilenauswahl)
2020
41.11.2 Auswahl mit mehrspaltigem Index
2021
41.11.3 Hyperlink-Spalte für Detailansicht
2021
41.11.4 Spalten erzeugen
2022
41.11.5 Paging realisieren
2023
41.11.6 Edit, Update, Delete
2025
41.11.7 Keine Daten, was tun?
2025
41.12 DetailsView
2025
41.13 FormView
2027
Datenbindung im Detail
2029
41.14 DataList
2030
41.14.1 Bearbeitungsfunktionen implementieren
2031
41.14.2 Layout verändern
2032
41.15 Repeater
2033
41.16 ListView
2034
41.17 Typisierte Datenbindung
2034
41.18 Model Binding
2035
41.19 Chart
2037
42 ASP.NET-Objekte/-Techniken
2040
42.1 Wichtige ASP.NET-Objekte
2040
42.1.1 HTTPApplication
2040
42.1.2 Application
2043
42.1.3 Session
2044
Session-Variablen
2044
Beenden einer Session
2045
Ereignisse
2045
42.1.4 Page
2046
Eigenschaften
2046
Methoden
2047
Ereignisse
2048
42.1.5 Request
2049
Informationen über den Browser ermitteln
2049
QueryString-Parameter auslesen
2051
42.1.6 Response
2052
Eigenschaften
2052
Methoden
2052
Textausgabe
2053
Bilder/Dateien zum Client senden
2053
Dynamisch erzeugte Grafiken senden
2054
Neue Seiten aufrufen
2055
Wir geben zur Protokoll ...
2056
42.1.7 Server
2056
MapPath
2056
MachineName
2057
Transfer
2057
Execute
2057
42.1.8 Cookies verwenden
2057
User
2060
42.2 Fehlerbehandlung unter ASP.NET
2060
42.2.1 Fehler beim Entwurf
2060
42.2.2 Laufzeitfehler
2060
42.2.3 Eine eigene Fehlerseite
2062
42.2.4 Fehlerbehandlung im Web Form
2063
42.2.5 Fehlerbehandlung in der Anwendung
2064
42.2.6 Alternative Fehlerseite einblenden
2065
42.2.7 Lokale Fehlerbehandlung
2066
42.2.8 Seite nicht gefunden – was nun?
2067
42.3 E-Mail-Versand in ASP.NET
2067
42.3.1 Übersicht
2068
42.3.2 Mail-Server bestimmen
2068
42.3.3 Einfache Text-E-Mails versenden
2070
Variante 1
2070
Variante 2
2070
42.3.4 E-Mails mit Dateianhang
2071
42.4 Sicherheit von Webanwendungen
2072
42.4.1 Authentication
2072
Anonyme Anmeldung
2072
Forms Authentication
2073
Windows Authentication
2073
42.4.2 Forms Authentication realisieren
2073
Login-Dialog
2074
Die Änderungen in der Web.config
2075
Test
2076
Weitere Möglichkeiten der Authentifizierung
2077
42.4.3 Impersonation
2077
42.4.4 Authorization
2078
File Authorization
2078
URL Authorization
2078
42.4.5 Administrieren der Website
2080
Voraussetzung
2080
ASP.NET-Konfigurationsoberfläche
2081
Auswahl des Authentifizierungstyps
2082
Neuen Nutzer erstellen
2082
Rechte einschränken
2083
42.4.6 Steuerelemente für das Login-Handling
2084
Login
2084
LoginStatus
2085
LoginName
2085
LoginView
2085
PasswortRecovery
2086
CreateUserWizard
2087
ChangePasswort
2088
42.4.7 Programmieren der Sicherheitseinstellungen
2088
42.5 AJAX in ASP.NET-Anwendungen
2090
42.5.1 Was ist AJAX und was kann es?
2090
42.5.2 Die AJAX-Controls
2091
ScriptManager
2092
UpdatePanel
2092
UpdateProgress
2094
Timer
2094
42.5.3 AJAX-Control-Toolkit
2095
42.6 User Controls/Webbenutzersteuerelemente
2096
User Controls
2096
Custom Controls
2096
42.6.1 Ein simples Einstiegsbeispiel
2097
Entwurf
2097
Quellcode
2098
Einbindung
2099
Test
2099
Eigene Eigenschaften definieren
2099
Fazit
2100
42.6.2 Dynamische Grafiken im User Control anzeigen
2100
Dynamisches Senden der Grafik
2101
Entwurf des Controls
2101
Verwendung und Test
2103
42.6.3 Grafikausgaben per User Control realisieren
2105
Das User Control
2105
Einbindung/Programmierung
2106
Test
2107
43 Silverlight-Entwicklung
2110
43.1 Einführung
2110
43.1.1 Zielplattformen
2111
43.1.2 Silverlight-Applikationstypen
2111
Silverlight-Anwendung
2112
Silverlight-Navigationsanwendung
2112
Silverlight Out-of-Browser-Anwendung
2113
43.1.3 Wichtige Unterschiede zu den WPF-Anwendungen
2113
Einschränkungen durch das Silverlight-Konzept
2113
Unterschiede durch unterschiedliche Codebasis
2114
43.1.4 Vor- und Nachteile von Silverlight-Anwendungen
2115
WPF-ClickOnce-Anwendungen
2115
ASP.NET/AJAX
2115
FLASH
2116
Fazit
2116
Updates/Deinstallation
2118
43.2 Die Silverlight-Anwendung im Detail
2118
43.2.1 Ein kleines Beispielprojekt
2119
43.2.2 Das Application Package und das Test-Web
2121
.xap-Package
2121
Silverlight.js
2121
...TestPage.aspx & ...TestPage.html
2122
43.3 Die Projektdateien im Überblick
2124
43.3.1 Projektverwaltung mit App.xaml & App.xaml.cs
2125
Startup
2126
Exit
2127
UnhandledException
2127
Weitere Eigenschaften und Methoden der Application-Klasse
2127
43.3.2 MainPage.xaml & MainPage.xaml.cs
2127
43.3.3 AssemblyInfo.cs
2128
43.4 Fenster und Seiten in Silverlight
2128
43.4.1 Das Standardfenster
2129
43.4.2 Untergeordnete Silverlight-Fenster
2130
43.4.3 UserControls für die Anzeige von Detaildaten
2132
Ein-/Ausblenden von UserControls
2132
Hinzufügen/Entfernen von UserControls
2132
43.4.4 Echte Windows
2133
43.4.5 Navigieren in Silverlight-Anwendungen
2134
Projekt erzeugen
2134
Die Page-Klasse
2135
Der Navigations-Frame
2137
43.5 Datenbanken/Datenbindung
2139
43.5.1 ASP.NET-Webdienste/WCF-Dienste
2140
Einfügen der SQL Server-Datenbank
2140
Erstellen des EDM-Datenmodells
2141
Erstellen des ASP.NET Webdienstes
2142
Alternative: Erstellen eines WCF Dienstes
2144
Einbinden der Dienste in das Silverlight-Projekt
2145
Konfigurieren der Silverlight-Oberfläche
2146
Abrufen der Daten
2147
Zusammenfassung
2148
43.5.2 WCF Data Services
2149
Grundlagen
2149
Einfügen der SQL Server-Datenbank
2152
Erstellen des Entity Data Models
2152
Erstellen des WCF Data Service
2153
Einbinden des WCF Data Service in das Silverlight-Projekt
2155
Konfigurieren der Silverlight-Oberfläche
2155
Abrufen der Daten
2156
Bearbeiten der Daten
2157
Arbeiten mit LINQ und Erweiterungsmethoden
2158
43.6 Isolierter Speicher
2160
43.6.1 Grundkonzept
2160
43.6.2 Das virtuelle Dateisystem verwalten
2161
Wieviel Platz ist verfügbar?
2161
Ich will mehr!
2162
Unterverzeichnisse erzeugen
2162
Anzeige von Dateien und Verzeichnissen
2162
Dateien/Verzeichnisse löschen
2163
43.6.3 Arbeiten mit Dateien
2164
Schreiben
2164
Lesen von Dateien
2164
43.7 Fulltrust-Anwendungen
2165
43.8 Praxisbeispiele
2168
43.8.1 Eine Out-of-Browser-Applikation realisieren
2168
Vorgehensweise
2168
Installation
2170
Bemerkungen
2171
43.8.2 Out-of-Browser-Anwendung aktualisieren
2172
Quellcode
2172
43.8.3 Testen auf aktive Internetverbindung
2173
Quellcode
2173
43.8.4 Auf Out-of-Browser-Anwendung testen
2174
Quellcode
2174
43.8.5 Den Browser bestimmen
2174
Quellcode
2174
Test
2175
43.8.6 Parameter an das Plug-in übergeben
2175
Oberfläche
2175
Quellcode (MainPage.xaml.cs)
2175
Quellcode (App.xaml.cs)
2176
Quellcode der umgebenden HTML-Seite
2176
Test
2177
43.8.7 Auf den QueryString zugreifen
2177
Oberfläche
2177
Quellcode
2177
Test
2178
43.8.8 Timer in Silverlight nutzen
2178
Oberfläche
2178
Quellcode
2178
Test
2179
43.8.9 Dateien lokal speichern
2179
Oberfläche
2179
Quellcode
2180
Bemerkung
2180
43.8.10 Drag & Drop realisieren
2181
Oberfläche
2181
Quelltext
2181
Test
2182
43.8.11 Auf die Zwischenablage zugreifen
2182
Oberfläche
2182
Quelltext
2183
Test
2183
43.8.12 Weitere Fenster öffnen
2184
Oberfläche (MainPage)
2184
Quellcode (MainPage.xaml.cs)
2185
Oberfläche (SilverlightControl1)
2186
Quellcode (SilverlightControl1.xaml.cs)
2186
Test
2186
Bemerkungen
2186
Index
2188
© 2009-2024 ciando GmbH