Walter Doberenz, Thomas Gewinnus
Visual Basic 2015 - Grundlagen, Profiwissen und Rezepte
Inhaltsverzeichnis
6
Vorwort
46
Teil I: Grundlagen
50
1 Einstieg in Visual Studio 2015
52
1.1 Die Installation von Visual Studio 2015
52
1.1.1 Überblick über die Produktpalette
52
1.1.2 Anforderungen an Hard- und Software
53
1.2 Unser allererstes VB-Programm
54
1.2.1 Vorbereitungen
54
1.2.2 Programm schreiben
56
1.2.3 Programm kompilieren und testen
56
1.2.4 Einige Erläuterungen zum Quellcode
57
1.2.5 Konsolenanwendungen sind out
58
1.3 Die Windows-Philosophie
58
1.3.1 Mensch-Rechner-Dialog
59
1.3.2 Objekt- und ereignisorientierte Programmierung
59
1.3.3 Windows-Programmierung unter Visual Studio 2015
60
1.4 Die Entwicklungsumgebung Visual Studio 2015
62
1.4.1 Neues Projekt
62
1.4.2 Die wichtigsten Fenster
63
1.5 Microsofts .NET-Technologie
65
1.5.1 Zur Geschichte von .NET
65
1.5.2 .NET-Features und Begriffe
67
1.6 Wichtige Neuigkeiten in Visual Studio 2015
75
1.6.1 Entwicklungsumgebung
75
1.6.2 Neue VB-Sprachfeatures
75
1.6.3 Code-Editor
75
1.6.4 NET Framework 4.6
76
1.7 Praxisbeispiele
76
1.7.1 Windows-Anwendung für Einsteiger
76
1.7.2 Windows-Anwendung für fortgeschrittene Einsteiger
80
2 Einführung in Visual Basic
88
2.1 Grundbegriffe
88
2.1.1 Anweisungen
88
2.1.2 Bezeichner
89
2.1.3 Kommentare
90
2.1.4 Zeilenumbruch
91
2.2 Datentypen, Variablen und Konstanten
93
2.2.1 Fundamentale Typen
93
2.2.2 Wertetypen versus Verweistypen
94
2.2.3 Benennung von Variablen
94
2.2.4 Deklaration von Variablen
95
2.2.5 Typinferenz
98
2.2.6 Konstanten deklarieren
98
2.2.7 Gültigkeitsbereiche von Deklarationen
99
2.2.8 Lokale Variablen mit Dim
99
2.2.9 Lokale Variablen mit Static
100
2.2.10 Private globale Variablen
100
2.2.11 Public Variablen
101
2.3 Wichtige Datentypen im Überblick
101
2.3.1 Byte, Short, Integer, Long
101
2.3.2 Single, Double und Decimal
102
2.3.3 Char und String
102
2.3.4 Date
103
2.3.5 Boolean
104
2.3.6 Object
104
2.4 Konvertieren von Datentypen
105
2.4.1 Implizite und explizite Konvertierung
105
2.4.2 Welcher Datentyp passt zu welchem?
106
2.4.3 Konvertierungsfunktionen
107
2.4.4 CType-Funktion
108
2.4.5 Konvertieren von Strings
108
2.4.6 Die Convert-Klasse
110
2.4.7 Die Parse-Methode
110
2.4.8 Boxing und Unboxing
111
2.4.9 TryCast-Operator
112
2.4.10 Nullable Types
112
2.5 Operatoren
113
2.5.1 Arithmetische Operatoren
113
2.5.2 Zuweisungsoperatoren
114
2.5.3 Logische Operatoren
115
2.5.4 Vergleichsoperatoren
116
2.5.5 Rangfolge der Operatoren
116
2.6 Kontrollstrukturen
117
2.6.1 Verzweigungsbefehle
117
2.6.2 Schleifenanweisungen
120
2.7 Benutzerdefinierte Datentypen
121
2.7.1 Enumerationen
121
2.7.2 Strukturen
122
2.8 Nutzerdefinierte Funktionen/Prozeduren
125
2.8.1 Deklaration und Syntax
125
2.8.2 Parameterübergabe allgemein
127
2.8.3 Übergabe mit ByVal und ByRef
128
2.8.4 Optionale Parameter
129
2.8.5 Überladene Funktionen/Prozeduren
129
2.9 Praxisbeispiele
130
2.9.1 Vom PAP zum Konsolen-Programm
130
2.9.2 Vom Konsolen- zum Windows-Programm
132
2.9.3 Schleifenanweisungen kennen lernen
134
2.9.4 Methoden überladen
137
2.9.5 Eine Iterationsschleife verstehen
139
2.9.6 Anwendungen von C# nach Visual Basic portieren
142
3 OOP-Konzepte
150
3.1 Strukturierter versus objektorientierter Entwurf
150
3.1.1 Was bedeutet strukturierte Programmierung?
150
3.1.2 Was heißt objektorientierte Programmierung?
151
3.2 Grundbegriffe der OOP
152
3.2.1 Objekt, Klasse, Instanz
152
3.2.2 Kapselung und Wiederverwendbarkeit
153
3.2.3 Vererbung und Polymorphie
153
3.2.4 Sichtbarkeit von Klassen und ihren Mitgliedern
154
3.2.5 Allgemeiner Aufbau einer Klasse
155
3.3 Ein Objekt erzeugen
156
3.3.1 Referenzieren und Instanziieren
157
3.3.2 Klassische Initialisierung
158
3.3.3 Objekt-Initialisierer
158
3.3.4 Arbeiten mit dem Objekt
158
3.3.5 Zerstören des Objekts
159
3.4 OOP-Einführungsbeispiel
159
3.4.1 Vorbereitungen
159
3.4.2 Klasse definieren
160
3.4.3 Objekt erzeugen und initialisieren
161
3.4.4 Objekt verwenden
161
3.4.5 Unterstützung durch die IntelliSense
161
3.4.6 Objekt testen
162
3.4.7 Warum unsere Klasse noch nicht optimal ist
163
3.5 Eigenschaften
163
3.5.1 Eigenschaften kapseln
163
3.5.2 Eigenschaften mit Zugriffsmethoden kapseln
166
3.5.3 Lese-/Schreibschutz für Eigenschaften
167
3.5.4 Statische Eigenschaften
168
3.5.5 Selbst implementierende Eigenschaften
169
3.6 Methoden
170
3.6.1 Öffentliche und private Methoden
170
3.6.2 Überladene Methoden
171
3.6.3 Statische Methoden
172
3.7 Ereignisse
173
3.7.1 Ereignise deklarieren
173
3.7.2 Ereignis auslösen
174
3.7.3 Ereignis auswerten
174
3.7.4 Benutzerdefinierte Ereignisse (Custom Events)
176
3.8 Arbeiten mit Konstruktor und Destruktor
179
3.8.1 Der Konstruktor erzeugt das Objekt
179
3.8.2 Bequemer geht’s mit einem Objekt-Initialisierer
181
3.8.3 Destruktor und Garbage Collector räumen auf
182
3.8.4 Mit Using den Lebenszyklus des Objekts kapseln
184
3.9 Vererbung und Polymorphie
185
3.9.1 Vererbungsbeziehungen im Klassendiagramm
185
3.9.2 Überschreiben von Methoden (Method-Overriding)
187
3.9.3 Klassen implementieren
187
3.9.4 Objekte implementieren
192
3.9.5 Ausblenden von Mitgliedern durch Vererbung
193
3.9.6 Allgemeine Hinweise und Regeln zur Vererbung
195
3.9.7 Polymorphe Methoden
196
3.10 Besondere Klassen und Features
198
3.10.1 Abstrakte Klassen
198
3.10.2 Abstrakte Methoden
199
3.10.3 Versiegelte Klassen
199
3.10.4 Partielle Klassen
200
3.10.5 Die Basisklasse System.Object
202
3.10.6 Property-Accessors
203
3.10.7 Nullbedingter Operator
203
3.11 Schnittstellen (Interfaces)
204
3.11.1 Definition einer Schnittstelle
204
3.11.2 Implementieren einer Schnittstelle
205
3.11.3 Abfragen, ob eine Schnittstelle vorhanden ist
206
3.11.4 Mehrere Schnittstellen implementieren
206
3.11.5 Schnittstellenprogrammierung ist ein weites Feld
206
3.12 Praxisbeispiele
207
3.12.1 Eigenschaften sinnvoll kapseln
207
3.12.2 Eine statische Klasse anwenden
210
3.12.3 Vom fetten zum dünnen Client
212
3.12.4 Schnittstellenvererbung verstehen
221
3.12.5 Aggregation und Vererbung gegenüberstellen
225
3.12.6 Eine Klasse zur Matrizenrechnung entwickeln
231
3.12.7 Rechner für komplexe Zahlen
237
3.12.8 Formel-Rechner mit dem CodeDOM
245
3.12.9 Einen Funktionsverlauf grafisch darstellen
250
3.12.10 Sortieren mit IComparable/IComparer
254
3.12.11 Objektbäume in generischen Listen abspeichern
259
3.12.12 OOP beim Kartenspiel erlernen
265
4 Arrays, Strings, Funktionen
270
4.1 Datenfelder (Arrays)
270
4.1.1 Ein Array deklarieren
270
4.1.2 Zugriff auf Array-Elemente
271
4.1.3 Oberen Index ermitteln
271
4.1.4 Explizite Arraygrenzen
271
4.1.5 Arrays erzeugen und initialisieren
271
4.1.6 Zugriff mittels Schleife
272
4.1.7 Mehrdimensionale Arrays
273
4.1.8 Dynamische Arrays
274
4.1.9 Zuweisen von Arrays
275
4.1.10 Arrays aus Strukturvariablen
276
4.1.11 Löschen von Arrays
277
4.1.12 Eigenschaften und Methoden von Arrays
277
4.1.13 Übergabe von Arrays
280
4.2 Zeichenkettenverarbeitung
281
4.2.1 Strings zuweisen
281
4.2.2 Eigenschaften und Methoden eines Strings
281
4.2.3 Kopieren eines Strings in ein Char-Array
284
4.2.4 Wichtige (statische) Methoden der String-Klasse
284
4.2.5 Die StringBuilder-Klasse
286
4.3 Reguläre Ausdrücke
289
4.3.1 Wozu braucht man reguläre Ausdrücke?
289
4.3.2 Eine kleine Einführung
290
4.3.3 Wichtige Methoden der Klasse Regex
290
4.3.4 Kompilierte reguläre Ausdrücke
292
4.3.5 RegexOptions-Enumeration
293
4.3.6 Metazeichen (Escape-Zeichen)
294
4.3.7 Zeichenmengen (Character Sets)
295
4.3.8 Quantifizierer
296
4.3.9 Zero-Width Assertions
297
4.3.10 Gruppen
301
4.3.11 Text ersetzen
301
4.3.12 Text splitten
302
4.4 Datums- und Zeitberechnungen
303
4.4.1 Grundlegendes
303
4.4.2 Wichtige Eigenschaften von DateTime-Variablen
304
4.4.3 Wichtige Methoden von DateTime-Variablen
305
4.4.4 Wichtige Mitglieder der DateTime-Struktur
306
4.4.5 Konvertieren von Datumstrings in DateTime-Werte
307
4.4.6 Die TimeSpan-Struktur
307
4.5 Vordefinierten Funktionen
309
4.5.1 Mathematik
309
4.5.2 Datums- und Zeitfunktionen
311
4.6 Zahlen formatieren
313
4.6.1 Die ToString-Methode
314
4.6.2 Die Format-Methode
315
4.6.3 Stringinterpolation
317
4.7 Praxisbeispiele
317
4.7.1 Zeichenketten verarbeiten
317
4.7.2 Zeichenketten mittels StringBuilder addieren
320
4.7.3 Reguläre Ausdrücke testen
324
4.7.4 Fehler bei mathematischen Operationen behandeln
326
4.7.5 Methodenaufrufe mit Array-Parametern
329
4.7.6 String in Array kopieren und umgekehrt
332
4.7.7 Ein Byte-Array in einen String konvertieren
334
4.7.8 Strukturvariablen in Arrays einsetzen
336
5 Weitere Sprachfeatures
340
5.1 Namespaces (Namensräume)
340
5.1.1 Ein kleiner Überblick
340
5.1.2 Die Imports-Anweisung
342
5.1.3 Namespace-Alias
342
5.1.4 Namespaces in Projekteigenschaften
343
5.1.5 Namespace Alias Qualifizierer
344
5.1.6 Eigene Namespaces einrichten
344
5.2 Überladen von Operatoren
345
5.2.1 Syntaxregeln
345
5.2.2 Praktische Anwendung
346
5.2.3 Konvertierungsoperatoren überladen
347
5.3 Auflistungen (Collections)
348
5.3.1 Beziehungen zwischen den Schnittstellen
348
5.3.2 IEnumerable
349
5.3.3 ICollection
350
5.3.4 IList
350
5.3.5 Iteratoren
350
5.3.6 Die ArrayList-Collection
351
5.3.7 Die Hashtable
352
5.4 Generische Datentypen
353
5.4.1 Wie es früher einmal war
353
5.4.2 Typsicherheit durch Generics
355
5.4.3 List-Collection ersetzt ArrayList
356
5.4.4 Über die Vorzüge generischer Collections
357
5.4.5 Typbeschränkungen durch Constraints
358
5.4.6 Collection-Initialisierer
359
5.4.7 Generische Methoden
359
5.5 Delegates
360
5.5.1 Delegates sind Methodenzeiger
360
5.5.2 Delegate-Typ definieren
361
5.5.3 Delegate-Objekt erzeugen
362
5.5.4 Delegates vereinfacht instanziieren
362
5.5.5 Relaxed Delegates
363
5.5.6 Anonyme Methoden
363
5.5.7 Lambda-Ausdrücke
364
5.5.8 Lambda-Ausdrücke in der Task Parallel Library
365
5.6 Dynamische Programmierung
367
5.6.1 Wozu dynamische Programmierung?
367
5.6.2 Das Prinzip der dynamischen Programmierung
367
5.6.3 Kovarianz und Kontravarianz
371
5.7 Weitere Datentypen
372
5.7.1 BigInteger
372
5.7.2 Complex
374
5.7.3 Tuple(Of T)
375
5.7.4 SortedSet(Of T)
375
5.8 Praxisbeispiele
377
5.8.1 ArrayList versus generische List
377
5.8.2 Delegates und Lambda Expressions
380
5.8.3 Mit dynamischem Objekt eine Datei durchsuchen
383
6 Einführung in LINQ
388
6.1 LINQ-Grundlagen
388
6.1.1 Die LINQ-Architektur
388
6.1.2 LINQ-Implementierungen
389
6.1.3 Anonyme Typen
389
6.1.4 Erweiterungsmethoden
391
6.2 Abfragen mit LINQ to Objects
392
6.2.1 Grundlegendes zur LINQ-Syntax
392
6.2.2 Zwei alternative Schreibweisen von LINQ-Abfragen
393
6.2.3 Übersicht der wichtigsten Abfrage-Operatoren
395
6.3 LINQ-Abfragen im Detail
396
6.3.1 Die Projektionsoperatoren Select und SelectMany
397
6.3.2 Der Restriktionsoperator Where
399
6.3.3 Die Sortierungsoperatoren OrderBy und ThenBy
399
6.3.4 Der Gruppierungsoperator GroupBy
401
6.3.5 Verknüpfen mit Join
402
6.3.6 Aggregat-Operatoren
403
6.3.7 Verzögertes Ausführen von LINQ-Abfragen
405
6.3.8 Konvertierungsmethoden
406
6.3.9 Abfragen mit PLINQ
406
6.4 Praxisbeispiele
409
6.4.1 Die Syntax von LINQ-Abfragen verstehen
409
6.4.2 Aggregat-Abfragen mit LINQ
412
6.4.3 LINQ im Schnelldurchgang erlernen
414
6.4.4 Strings mit LINQ abfragen und filtern
417
6.4.5 Duplikate aus einer Liste oder einem Array entfernen
418
6.4.6 Arrays mit LINQ initialisieren
421
6.4.7 Arrays per LINQ mit Zufallszahlen füllen
423
6.4.8 Einen String mit Wiederholmuster erzeugen
424
6.4.9 Mit LINQ Zahlen und Strings sortieren
426
6.4.10 Mit LINQ Collections von Objekten sortieren
427
6.4.11 Ergebnisse von LINQ-Abfragen in ein Array kopieren
429
Teil II: Technologien
430
7 Zugriff auf das Dateisystem
432
7.1 Grundlagen
432
7.1.1 Klassen für Verzeichnis- und Dateioperationen
433
7.1.2 Statische versus Instanzen-Klasse
433
7.2 Übersichten
434
7.2.1 Methoden der Directory-Klasse
434
7.2.2 Methoden eines DirectoryInfo-Objekts
435
7.2.3 Eigenschaften eines DirectoryInfo-Objekts
435
7.2.4 Methoden der File-Klasse
435
7.2.5 Methoden eines FileInfo-Objekts
436
7.2.6 Eigenschaften eines FileInfo-Objekts
437
7.3 Operationen auf Verzeichnisebene
437
7.3.1 Existenz eines Verzeichnisses/einer Datei feststellen
437
7.3.2 Verzeichnisse erzeugen und löschen
438
7.3.3 Verzeichnisse verschieben und umbenennen
439
7.3.4 Aktuelles Verzeichnis bestimmen
439
7.3.5 Unterverzeichnisse ermitteln
439
7.3.6 Alle Laufwerke ermitteln
440
7.3.7 Dateien kopieren und verschieben
441
7.3.8 Dateien umbenennen
442
7.3.9 Dateiattribute feststellen
442
7.3.10 Verzeichnis einer Datei ermitteln
444
7.3.11 Alle im Verzeichnis enthaltene Dateien ermitteln
444
7.3.12 Dateien und Unterverzeichnisse ermitteln
444
7.4 Zugriffsberechtigungen
445
7.4.1 ACL und ACE
445
7.4.2 SetAccessControl-Methode
446
7.4.3 Zugriffsrechte anzeigen
446
7.5 Weitere wichtige Klassen
447
7.5.1 Die Path-Klasse
447
7.5.2 Die Klasse FileSystemWatcher
448
7.6 Datei- und Verzeichnisdialoge
450
7.6.1 OpenFileDialog und SaveFileDialog
450
7.6.2 FolderBrowserDialog
452
7.7 Praxisbeispiele
453
7.7.1 Infos über Verzeichnisse und Dateien gewinnen
453
7.7.2 Die Verzeichnisstruktur in eine TreeView einlesen
456
7.7.3 Mit LINQ und RegEx Verzeichnisbäume durchsuchen
458
8 Dateien lesen und schreiben
464
8.1 Grundprinzip der Datenpersistenz
464
8.1.1 Dateien und Streams
464
8.1.2 Die wichtigsten Klassen
465
8.1.3 Erzeugen eines Streams
466
8.2 Dateiparameter
466
8.2.1 FileAccess
466
8.2.2 FileMode
466
8.2.3 FileShare
467
8.3 Textdateien
467
8.3.1 Eine Textdatei beschreiben bzw. neu anlegen
467
8.3.2 Eine Textdatei lesen
469
8.4 Binärdateien
471
8.4.1 Lese-/Schreibzugriff
471
8.4.2 Die Methoden ReadAllBytes und WriteAllBytes
471
8.4.3 BinaryReader/BinaryWriter erzeugen
472
8.5 Sequenzielle Dateien
472
8.5.1 Lesen und Schreiben von strukturierten Daten
472
8.5.2 Serialisieren von Objekten
473
8.6 Dateien verschlüsseln und komprimieren
474
8.6.1 Das Methodenpärchen Encrypt-/Decrypt
475
8.6.2 Verschlüsseln unter Windows Vista/7/8/10
475
8.6.3 Verschlüsseln mit der CryptoStream-Klasse
476
8.6.4 Dateien komprimieren
477
8.7 Memory Mapped Files
478
8.7.1 Grundprinzip
478
8.7.2 Erzeugen eines MMF
479
8.7.3 Erstellen eines Map View
479
8.8 Praxisbeispiele
480
8.8.1 Auf eine Textdatei zugreifen
480
8.8.2 Einen Objektbaum speichern
484
8.8.3 Ein Memory Mapped File (MMF) verwenden
491
8.8.4 Hex-Dezimal-Bytes-Konverter
493
8.8.5 Eine Datei verschlüsseln
497
8.8.6 Eine Datei komprimieren
500
8.8.7 Echte ZIP-Dateien erstellen
502
8.8.8 PDFs erstellen/exportieren
503
8.8.9 Eine CSV-Datei erstellen
507
8.8.10 Eine CSV-Datei mit LINQ lesen und auswerten
510
8.8.11 Einen korrekten Dateinamen erzeugen
512
9 Asynchrone Programmierung
514
9.1 Übersicht
514
9.1.1 Multitasking versus Multithreading
515
9.1.2 Deadlocks
516
9.1.3 Racing
516
9.2 Programmieren mit Threads
518
9.2.1 Einführungsbeispiel
518
9.2.2 Wichtige Thread-Methoden
519
9.2.3 Wichtige Thread-Eigenschaften
521
9.2.4 Einsatz der ThreadPool-Klasse
522
9.3 Sperrmechanismen
524
9.3.1 Threading ohne SyncLock
524
9.3.2 Threading mit SyncLock
525
9.3.3 Die Monitor-Klasse
528
9.3.4 Mutex
531
9.3.5 Methoden für die parallele Ausführung sperren
532
9.3.6 Semaphore
533
9.4 Interaktion mit der Programmoberfläche
534
9.4.1 Die Werkzeuge
535
9.4.2 Einzelne Steuerelemente mit Invoke aktualisieren
535
9.4.3 Mehrere Steuerelemente aktualisieren
536
9.4.4 Ist ein Invoke-Aufruf nötig?
537
9.4.5 Und was ist mit WPF?
537
9.5 Timer-Threads
539
9.6 Die BackgroundWorker-Komponente
540
9.7 Asynchrone Programmier-Entwurfsmuster
543
9.7.1 Kurzübersicht
543
9.7.2 Polling
544
9.7.3 Callback verwenden
545
9.7.4 Callback mit Parameterübergabe verwenden
546
9.7.5 Callback mit Zugriff auf die Programm-Oberfläche
547
9.8 Asynchroner Aufruf beliebiger Methoden
548
9.8.1 Die Beispielklasse
548
9.8.2 Asynchroner Aufruf ohne Callback
550
9.8.3 Asynchroner Aufruf mit Callback und Anzeigefunktion
550
9.8.4 Aufruf mit Rückgabewerten (per Eigenschaft)
551
9.8.5 Aufruf mit Rückgabewerten (per EndInvoke)
552
9.9 Es geht auch einfacher – Async und Await
553
9.9.1 Der Weg von synchron zu asynchron
553
9.9.2 Achtung: Fehlerquellen!
555
9.9.3 Eigene asynchrone Methoden entwickeln
557
9.10 Praxisbeispiele
559
9.10.1 Spieltrieb & Multithreading erleben
559
9.10.2 Prozess- und Thread-Informationen gewinnen
571
9.10.3 Ein externes Programm starten
576
10 Die Task Parallel Library
580
10.1 Überblick
580
10.1.1 Parallel-Programmierung
580
10.1.2 Möglichkeiten der TPL
583
10.1.3 Der CLR-Threadpool
583
10.2 Parallele Verarbeitung mit Parallel.Invoke
584
10.2.1 Aufrufvarianten
585
10.2.2 Einschränkungen
586
10.3 Verwendung von Parallel.For
586
10.3.1 Abbrechen der Verarbeitung
588
10.3.2 Auswerten des Verarbeitungsstatus
589
10.3.3 Und was ist mit anderen Iterator-Schrittweiten?
589
10.4 Collections mit Parallel.ForEach verarbeiten
590
10.5 Die Task-Klasse
591
10.5.1 Einen Task erzeugen
591
10.5.2 Task starten
592
10.5.3 Datenübergabe an den Task
593
10.5.4 Wie warte ich auf das Taskende?
594
10.5.5 Tasks mit Rückgabewerten
596
10.5.6 Die Verarbeitung abbrechen
599
10.5.7 Fehlerbehandlung
603
10.5.8 Weitere Eigenschaften
603
10.6 Zugriff auf das Userinterface
605
10.6.1 Task-Ende und Zugriff auf die Oberfläche
605
10.6.2 Zugriff auf das UI aus dem Task heraus
606
10.7 Weitere Datenstrukturen im Überblick
608
10.7.1 Threadsichere Collections
608
10.7.2 Primitive für die Threadsynchronisation
609
10.8 Parallel LINQ (PLINQ)
609
10.9 Praxisbeispiel: Spieltrieb – Version 2
610
10.9.1 Aufgabenstellung
610
10.9.2 Global-Klasse
610
10.9.3 Controller
611
10.9.4 LKWs
613
10.9.5 Schiff-Klasse
614
10.9.6 Oberfläche
616
11 Fehlersuche und Behandlung
618
11.1 Der Debugger
618
11.1.1 Allgemeine Beschreibung
618
11.1.2 Die wichtigsten Fenster
619
11.1.3 Debugging-Optionen
622
11.1.4 Praktisches Debugging am Beispiel
624
11.2 Arbeiten mit Debug und Trace
628
11.2.1 Wichtige Methoden von Debug und Trace
628
11.2.2 Besonderheiten der Trace-Klasse
631
11.2.3 TraceListener-Objekte
632
11.3 Caller Information
635
11.3.1 Attribute
635
11.3.2 Anwendung
635
11.4 Fehlerbehandlung
636
11.4.1 Anweisungen zur Fehlerbehandlung
636
11.4.2 Try-Catch
636
11.4.3 Try-Finally
641
11.4.4 Das Standardverhalten bei Ausnahmen festlegen
643
11.4.5 Die Exception-Klasse
644
11.4.6 Fehler/Ausnahmen auslösen
644
11.4.7 Eigene Fehlerklassen
645
11.4.8 Exceptionhandling zur Entwurfszeit
647
11.4.9 Code Contracts
647
12 XML in Theorie und Praxis
650
12.1 XML – etwas Theorie
650
12.1.1 Übersicht
650
12.1.2 Der XML-Grundaufbau
653
12.1.3 Wohlgeformte Dokumente
654
12.1.4 Processing Instructions (PI)
657
12.1.5 Elemente und Attribute
657
12.1.6 Verwendbare Zeichensätze
659
12.2 XSD-Schemas
661
12.2.1 XSD-Schemas und ADO.NET
661
12.2.2 XML-Schemas in Visual Studio analysieren
663
12.2.3 XML-Datei mit XSD-Schema erzeugen
666
12.2.4 XSD-Schema aus einer XML-Datei erzeugen
667
12.3 XML-Integration in Visual Basic
668
12.3.1 XML-Literale
668
12.3.2 Einfaches Navigieren durch späte Bindung
671
12.3.3 Die LINQ to XML-API
673
12.3.4 Neue XML-Dokumente erzeugen
674
12.3.5 Laden und Sichern von XML-Dokumenten
676
12.3.6 Navigieren in XML-Daten
678
12.3.7 Auswählen und Filtern
680
12.3.8 Manipulieren der XML-Daten
680
12.3.9 XML-Dokumente transformieren
682
12.4 Verwendung des DOM unter .NET
685
12.4.1 Übersicht
685
12.4.2 DOM-Integration in Visual Basic
686
12.4.3 Laden von Dokumenten
686
12.4.4 Erzeugen von XML-Dokumenten
687
12.4.5 Auslesen von XML-Dateien
689
12.4.6 Direktzugriff auf einzelne Elemente
690
12.4.7 Einfügen von Informationen
691
12.4.8 Suchen in den Baumzweigen
693
12.5 Weitere Möglichkeiten der XML-Verarbeitung
697
12.5.1 Die relationale Sicht mit XmlDataDocument
697
12.5.2 XML-Daten aus Objektstrukturen erzeugen
700
12.5.3 Schnelles Suchen in XML-Daten mit XPathNavigator
703
12.5.4 Schnelles Auslesen von XML-Daten mit XmlReader
706
12.5.5 Erzeugen von XML-Daten mit XmlWriter
708
12.5.6 XML transformieren mit XSLT
710
12.6 Praxisbeispiele
712
12.6.1 Mit dem DOM in XML-Dokumenten navigieren
712
12.6.2 XML-Daten in eine TreeView einlesen
715
12.6.3 DataSets in XML-Strings konvertieren
719
12.6.4 In Dokumenten mit dem XPathNavigator navigieren
723
13 Einführung in ADO.NET
728
13.1 Eine kleine Übersicht
728
13.1.1 Die ADO.NET-Klassenhierarchie
728
13.1.2 Die Klassen der Datenprovider
729
13.1.3 Das Zusammenspiel der ADO.NET-Klassen
732
13.2 Das Connection-Objekt
733
13.2.1 Allgemeiner Aufbau
733
13.2.2 OleDbConnection
733
13.2.3 Schließen einer Verbindung
735
13.2.4 Eigenschaften des Connection-Objekts
735
13.2.5 Methoden des Connection-Objekts
737
13.2.6 Der ConnectionStringBuilder
738
13.3 Das Command-Objekt
739
13.3.1 Erzeugen und Anwenden eines Command-Objekts
739
13.3.2 Erzeugen mittels CreateCommand-Methode
740
13.3.3 Eigenschaften des Command-Objekts
740
13.3.4 Methoden des Command-Objekts
742
13.3.5 Freigabe von Connection- und Command-Objekten
743
13.4 Parameter-Objekte
745
13.4.1 Erzeugen und Anwenden eines Parameter-Objekts
745
13.4.2 Eigenschaften des Parameter-Objekts
745
13.5 Das CommandBuilder-Objekt
746
13.5.1 Erzeugen
746
13.5.2 Anwenden
747
13.6 Das DataReader-Objekt
747
13.6.1 DataReader erzeugen
748
13.6.2 Daten lesen
748
13.6.3 Eigenschaften des DataReaders
749
13.6.4 Methoden des DataReaders
749
13.7 Das DataAdapter-Objekt
750
13.7.1 DataAdapter erzeugen
750
13.7.2 Command-Eigenschaften
751
13.7.3 Fill-Methode
752
13.7.4 Update-Methode
753
13.8 Praxisbeispiele
754
13.8.1 Wichtige ADO.NET-Objekte im Einsatz
754
13.8.2 Eine Aktionsabfrage ausführen
756
13.8.3 Eine Auswahlabfrage aufrufen
758
13.8.4 Die Datenbank aktualisieren
760
13.8.5 Den ConnectionString speichern
763
14 Das DataSet
766
14.1 Grundlegende Features des DataSets
766
14.1.1 Die Objekthierarchie
767
14.1.2 Die wichtigsten Klassen
767
14.1.3 Erzeugen eines DataSets
768
14.2 Das DataTable-Objekt
770
14.2.1 DataTable erzeugen
770
14.2.2 Spalten hinzufügen
770
14.2.3 Zeilen zur DataTable hinzufügen
771
14.2.4 Auf den Inhalt einer DataTable zugreifen
772
14.3 Die DataView
774
14.3.1 Erzeugen eines DataView
774
14.3.2 Sortieren und Filtern von Datensätzen
774
14.3.3 Suchen von Datensätzen
775
14.4 Typisierte DataSets
775
14.4.1 Ein typisiertes DataSet erzeugen
776
14.4.2 Das Konzept der Datenquellen
777
14.4.3 Typisierte DataSets und TableAdapter
778
14.5 Die Qual der Wahl
779
14.5.1 DataReader – der schnelle Lesezugriff
780
14.5.2 DataSet – die Datenbank im Hauptspeicher
780
14.5.3 Objektrelationales Mapping – die Zukunft?
781
14.6 Praxisbeispiele
782
14.6.1 Im DataView sortieren und filtern
782
14.6.2 Suche nach Datensätzen
784
14.6.3 Ein DataSet in einen XML-String serialisieren
785
14.6.4 Untypisierte in typisierte DataSets konvertieren
790
14.6.5 Eine LINQ to SQL-Abfrage ausführen
795
15 Verteilen von Anwendungen
800
15.1 ClickOnce-Deployment
801
15.1.1 Übersicht/Einschränkungen
801
15.1.2 Die Vorgehensweise
802
15.1.3 Ort der Veröffentlichung
802
15.1.4 Anwendungsdateien
803
15.1.5 Erforderliche Komponenten
803
15.1.6 Aktualisierungen
804
15.1.7 Veröffentlichungsoptionen
805
15.1.8 Veröffentlichen
806
15.1.9 Verzeichnisstruktur
806
15.1.10 Der Webpublishing-Assistent
808
15.1.11 Neue Versionen erstellen
809
15.2 InstallShield
809
15.2.1 Installation
809
15.2.2 Aktivieren
810
15.2.3 Ein neues Setup-Projekt
810
15.2.4 Finaler Test
818
15.3 Hilfedateien programmieren
818
15.3.1 Der HTML Help Workshop
819
15.3.2 Bedienung am Beispiel
820
15.3.3 Hilfedateien in die VB-Anwendung einbinden
822
15.3.4 Eine alternative Hilfe-IDE verwenden
826
16 Weitere Techniken
828
16.1 Zugriff auf die Zwischenablage
828
16.1.1 Das Clipboard-Objekt
828
16.1.2 Zwischenablage-Funktionen für Textboxen
830
16.2 Arbeiten mit der Registry
830
16.2.1 Allgemeines
831
16.2.2 Registry-Unterstützung in .NET
832
16.3 .NET-Reflection
834
16.3.1 Übersicht
834
16.3.2 Assembly laden
834
16.3.3 Mittels GetType und Type Informationen sammeln
835
16.3.4 Dynamisches Laden von Assemblies
837
16.4 Praxisbeispiele
839
16.4.1 Zugriff auf die Registry
839
16.4.2 Dateiverknüpfungen erzeugen
841
16.4.3 Die Zwischenablage überwachen und anzeigen
843
16.4.4 Die WIA-Library kennenlernen
846
16.4.5 Auf eine Webcam zugreifen
858
16.4.6 Auf den Scanner zugreifen
860
16.4.7 OpenOffice.org Writer per OLE steuern
864
16.4.8 Nutzer und Gruppen des Systems ermitteln
872
16.4.9 Testen, ob Nutzer in einer Gruppe enthalten ist
873
16.4.10 Testen, ob der Nutzer ein Administrator ist
875
16.4.11 Die IP-Adressen des Computers bestimmen
876
16.4.12 Die IP-Adresse über den Hostnamen bestimmen
877
16.4.13 Diverse Systeminformationen ermitteln
878
16.4.14 Sound per MCI aufnehmen
887
16.4.15 Mikrofonpegel anzeigen
890
16.4.16 Pegeldiagramm aufzeichnen
892
16.4.17 Sound-und Video-Dateien per MCI abspielen
896
17 Konsolenanwendungen
904
17.1 Grundaufbau/Konzepte
904
17.1.1 Unser Hauptprogramm – Module1.vb
905
17.1.2 Rückgabe eines Fehlerstatus
906
17.1.3 Parameterübergabe
907
17.1.4 Zugriff auf die Umgebungsvariablen
908
17.2 Die Kommandozentrale: System.Console
909
17.2.1 Eigenschaften
909
17.2.2 Methoden/Ereignisse
910
17.2.3 Textausgaben
911
17.2.4 Farbangaben
912
17.2.5 Tastaturabfragen
913
17.2.6 Arbeiten mit Streamdaten
914
17.3 Praxisbeispiel: Farbige Konsolenanwendung
915
Teil III: Windows Apps
918
18 Erste Schritte
920
18.1 Grundkonzepte und Begriffe
920
18.1.1 Windows Runtime (WinRT)
920
18.1.2 Windows Store Apps
921
18.1.3 Fast and Fluid
922
18.1.4 Process Sandboxing und Contracts
923
18.1.5 .NET WinRT-Profil
925
18.1.6 Language Projection
925
18.1.7 Vollbildmodus – war da was?
927
18.1.8 Windows Store
927
18.1.9 Zielplattformen
928
18.2 Entwurfsumgebung
929
18.2.1 Betriebssystem
929
18.2.2 Windows-Simulator
929
18.2.3 Remote-Debugging
932
18.3 Ein (kleines) Einstiegsbeispiel
933
18.3.1 Aufgabenstellung
933
18.3.2 Quellcode
933
18.3.3 Oberflächenentwurf
936
18.3.4 Installation und Test
938
18.3.5 Touchscreen
940
18.3.6 Fazit
940
18.4 Weitere Details zu WinRT
942
18.4.1 Wo ist WinRT einzuordnen?
943
18.4.2 Die WinRT-API
944
18.4.3 Wichtige WinRT-Namespaces
946
18.4.4 Der Unterbau
947
18.5 Praxisbeispiel
949
18.5.1 WinRT in Desktop-Applikationen nutzen
949
19 App-Oberflächen entwerfen
954
19.1 Grundkonzepte
954
19.1.1 XAML (oder HTML 5) für die Oberfläche
955
19.1.2 Die Page, der Frame und das Window
956
19.1.3 Das Befehlsdesign
958
19.1.4 Die Navigationsdesigns
960
19.1.5 Achtung: Fingereingabe!
961
19.1.6 Verwendung von Schriftarten
961
19.2 Seitenauswahl und -navigation
962
19.2.1 Die Startseite festlegen
962
19.2.2 Navigation und Parameterübergabe
962
19.2.3 Den Seitenstatus erhalten
963
19.3 App-Darstellung
964
19.3.1 Vollbild quer und hochkant
964
19.3.2 Was ist mit Andocken und Füllmodus?
965
19.3.3 Reagieren auf die Änderung
965
19.4 Skalieren von Apps
967
19.5 Praxisbeispiele
969
19.5.1 Seitennavigation und Parameterübergabe
969
19.5.2 Die Fensterkopfzeile anpassen
971
20 Die wichtigsten Controls
974
20.1 Einfache WinRT-Controls
974
20.1.1 TextBlock, RichTextBlock
974
20.1.2 Button, HyperlinkButton, RepeatButton
977
20.1.3 CheckBox, RadioButton, ToggleButton, ToggleSwitch
979
20.1.4 TextBox, PasswordBox, RichEditBox
980
20.1.5 Image
984
20.1.6 ScrollBar, Slider, ProgressBar, ProgressRing
985
20.1.7 Border, Ellipse, Rectangle
987
20.2 Layout-Controls
988
20.2.1 Canvas
988
20.2.2 StackPanel
989
20.2.3 ScrollViewer
989
20.2.4 Grid
990
20.2.5 VariableSizedWrapGrid
991
20.2.6 SplitView
992
20.2.7 Pivot
996
20.2.8 RelativPanel
997
20.3 Listendarstellungen
999
20.3.1 ComboBox, ListBox
999
20.3.2 ListView
1003
20.3.3 GridView
1005
20.3.4 FlipView
1007
20.4 Sonstige Controls
1009
20.4.1 CaptureElement
1009
20.4.2 MediaElement
1010
20.4.3 Frame
1012
20.4.4 WebView
1012
20.4.5 ToolTip
1013
20.4.6 CalendarDatePicker
1015
20.4.7 DatePicker/TimePicker
1016
20.5 Praxisbeispiele
1016
20.5.1 Einen StringFormat-Konverter implementieren
1016
20.5.2 Besonderheiten der TextBox kennen lernen
1018
20.5.3 Daten in der GridView gruppieren
1021
20.5.4 Das SemanticZoom-Control verwenden
1026
20.5.5 Die CollectionViewSource verwenden
1031
20.5.6 Zusammenspiel ListBox/AppBar
1034
21 Apps im Detail
1038
21.1 Ein Windows App-Projekt im Detail
1038
21.1.1 Contracts und Extensions
1039
21.1.2 AssemblyInfo.vb
1039
21.1.3 Verweise
1041
21.1.4 App.xaml und App.xaml.vb
1041
21.1.5 Package.appxmanifest
1042
21.1.6 Application1_TemporaryKey.pfx
1047
21.1.7 MainPage.xaml & MainPage.xaml.vb
1047
21.1.8 Assets/Symbole
1048
21.1.9 Nach dem Kompilieren
1048
21.2 Der Lebenszyklus einer Windows App
1048
21.2.1 Möglichkeiten der Aktivierung von Apps
1050
21.2.2 Der Splash Screen
1052
21.2.3 Suspending
1052
21.2.4 Resuming
1053
21.2.5 Beenden von Apps
1054
21.2.6 Die Ausnahmen von der Regel
1055
21.2.7 Debuggen
1055
21.3 Daten speichern und laden
1059
21.3.1 Grundsätzliche Überlegungen
1059
21.3.2 Worauf und wie kann ich zugreifen?
1060
21.3.3 Das AppData-Verzeichnis
1060
21.3.4 Das Anwendungs-Installationsverzeichnis
1062
21.3.5 Das Downloads-Verzeichnis
1063
21.3.6 Sonstige Verzeichnisse
1064
21.3.7 Anwendungsdaten lokal sichern und laden
1065
21.3.8 Daten in der Cloud ablegen/laden (Roaming)
1067
21.3.9 Aufräumen
1068
21.3.10 Sensible Informationen speichern
1069
21.4 Praxisbeispiele
1070
21.4.1 Die Auto-Play-Funktion unterstützen
1070
21.4.2 Einen zusätzlichen Splash Screen einsetzen
1074
21.4.3 Eine Dateiverknüpfung erstellen
1076
22 App-Techniken
1082
22.1 Arbeiten mit Dateien/Verzeichnissen
1082
22.1.1 Verzeichnisinformationen auflisten
1082
22.1.2 Unterverzeichnisse auflisten
1085
22.1.3 Verzeichnisse erstellen/löschen
1087
22.1.4 Dateien auflisten
1088
22.1.5 Dateien erstellen/schreiben/lesen
1090
22.1.6 Dateien kopieren/umbenennen/löschen
1094
22.1.7 Verwenden der Dateipicker
1096
22.1.8 StorageFile-/StorageFolder-Objekte speichern
1100
22.1.9 Verwenden der Most Recently Used-Liste
1102
22.2 Datenaustausch zwischen Apps/Programmen
1103
22.2.1 Zwischenablage
1103
22.2.2 Teilen von Inhalten
1110
22.2.3 Eine App als Freigabeziel verwenden
1113
22.2.4 Zugriff auf die Kontaktliste
1114
22.3 Spezielle Oberflächenelemente
1116
22.3.1 MessageDialog
1116
22.3.2 ContentDialog
1119
22.3.3 Popup-Benachrichtigungen
1121
22.3.4 PopUp/Flyouts
1128
22.3.5 Das PopupMenu einsetzen
1132
22.3.6 Eine AppBar verwenden
1134
22.4 Datenbanken und Windows Store Apps
1138
22.4.1 Der Retter in der Not: SQLite!
1138
22.4.2 Verwendung/Kurzüberblick
1138
22.4.3 Installation
1140
22.4.4 Wie kommen wir zu einer neuen Datenbank?
1141
22.4.5 Wie werden die Daten manipuliert?
1145
22.5 Vertrieb der App
1146
22.5.1 Verpacken der App
1146
22.5.2 App-Installation per Skript
1148
22.6 Ein Blick auf die App-Schwachstellen
1150
22.6.1 Quellcodes im Installationsverzeichnis
1150
22.6.2 Zugriff auf den App-Datenordner
1152
22.7 Praxisbeispiele
1152
22.7.1 Ein Verzeichnis auf Änderungen überwachen
1152
22.7.2 Eine App als Freigabeziel verwenden
1155
22.7.3 ToastNotifications einfach erzeugen
1160
Anhang
1166
A Glossar
1168
B Wichtige Dateiextensions
1174
Index
1176
Download-Kapitel
30
© 2009-2024 ciando GmbH