Walter Doberenz, Thomas Gewinnus
Visual Basic 2012 - Grundlagen und Profiwissen
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
© 2009-2024 ciando GmbH