Visual Basic 2015 – Grundlagen, Profiwissen und Rezepte (eBook)
1195 Seiten
Hanser, Carl (Verlag)
978-3-446-44605-2 (ISBN)
- Für Einsteiger, Fortgeschrittene und Profis
- Übungs- und Nachschlagewerk mit genialen Rezepten zu jedem Thema
- EXTRA: 700 Seiten Bonuskapitel zur GUI-Entwicklung mit WPF und Windows Forms
- Im Internet: Bonuskapitel sowie alle Beispiele aus dem Buch
Dieser Klassiker der Visual Basic-/.NET-Programmierung bietet Ihnen Informationen und Rezepte, nach denen Sie anderswo vergeblich suchen. Einsteiger erhalten ein umfangreiches Praktikum zu den Grundlagen der .NET-Programmierung mit Visual Basic 2015, dem Profi liefert es fortgeschrittene Programmiertechniken zu allen wesentlichen Einsatzgebieten der Windowsprogrammierung. Zum sofortigen Ausprobieren finden Sie am Ende eines jeden Kapitels hochwertige Lösungen für nahezu jedes Problem.
Mit diesem Buch haben Sie den idealen Begleiter für Ihre tägliche Arbeit und zugleich - dank der erfrischenden und unterhaltsamen Sprache - eine durchaus spannende Lektüre auch für die Zeit nach der Arbeit.
Die Themenkomplexe im Buch:
Teil I: Grundlagen der Programmierung mit Visual Basic 2015
Teil II: Technologien
Teil III: Windows Apps
Die Themenkomplexe im Internet:
Teil IV: WPF-Anwendungen
Teil V: Windows Forms
AUS DEM INHALT //
Grundlagen der Sprache // OOP-Konzepte // Einführung in LINQ // Dateien & Dateisystem // XML-Dateien // Asynchrone Programmierung & Task Parallel Library // Fehlersuche und Behandlung // Datenbankzugriff mit ADO.NET // Verteilen von Anwendungen // App-Oberflächen entwerfen // Apps im Detail // GUI-Entwicklung mit WPF und Windows Forms
Walter Doberenz und Thomas Gewinnus haben sich als Entwickler, Dozenten und Fachbuchautoren für Microsoft- und Borland- Entwicklerwerkzeuge einen Namen gemacht, ihre Fachbücher sind seit Jahren als Standardwerke etabliert.
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
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
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
Erscheint lt. Verlag | 7.9.2015 |
---|---|
Verlagsort | München |
Sprache | deutsch |
Themenwelt | Informatik ► Programmiersprachen / -werkzeuge ► Visual Basic |
Schlagworte | App-Programmierung • Grafikprogrammierung • LINQ • .NET 5.0 • OOP • Visual Studio 2015 • WinRT • WPF |
ISBN-10 | 3-446-44605-2 / 3446446052 |
ISBN-13 | 978-3-446-44605-2 / 9783446446052 |
Informationen gemäß Produktsicherheitsverordnung (GPSR) | |
Haben Sie eine Frage zum Produkt? |
Größe: 37,7 MB
DRM: Digitales Wasserzeichen
Dieses eBook enthält ein digitales Wasserzeichen und ist damit für Sie personalisiert. Bei einer missbräuchlichen Weitergabe des eBooks an Dritte ist eine Rückverfolgung an die Quelle möglich.
Dateiformat: PDF (Portable Document Format)
Mit einem festen Seitenlayout eignet sich die PDF besonders für Fachbücher mit Spalten, Tabellen und Abbildungen. Eine PDF kann auf fast allen Geräten angezeigt werden, ist aber für kleine Displays (Smartphone, eReader) nur eingeschränkt geeignet.
Systemvoraussetzungen:
PC/Mac: Mit einem PC oder Mac können Sie dieses eBook lesen. Sie benötigen dafür einen PDF-Viewer - z.B. den Adobe Reader oder Adobe Digital Editions.
eReader: Dieses eBook kann mit (fast) allen eBook-Readern gelesen werden. Mit dem amazon-Kindle ist es aber nicht kompatibel.
Smartphone/Tablet: Egal ob Apple oder Android, dieses eBook können Sie lesen. Sie benötigen dafür einen PDF-Viewer - z.B. die kostenlose Adobe Digital Editions-App.
Zusätzliches Feature: Online Lesen
Dieses eBook können Sie zusätzlich zum Download auch online im Webbrowser lesen.
Buying eBooks from abroad
For tax law reasons we can sell eBooks just within Germany and Switzerland. Regrettably we cannot fulfill eBook-orders from other countries.