Einstieg in Visual C# 2012

Ähnliche Dokumente
Einstieg in Visual C# 2010 Galileo Press

1 Einführung Grundlagen Fehlerbehandlung Erweiterte Grundlagen Objektorientierte Programmierung 185

1 Einführung Grundlagen Fehlerbehandlung Erweiterte Grundlagen Objektorientierte Programmierung 191

Einstieg in Visual Basic 2015

Einstieg in Visual Basic 2008

Thomas Theis. Einstieg in Visual C# 2012

Einstieg in Visual Basic 2012

Auf einen Blick. 1 Einführung Grundlagen Fehlerbehandlung Erweiterte Grundlagen

Windows Forms Projekte mit C++ in Visual Studio 2017

Leseprobe. »Visual Studio 2017 installierenvariablen, Operatoren, SteuerelementeLösungen der Übungsaufgaben« Inhaltsverzeichnis. Index.

Leseprobe. »EinführungProgrammiergrundlagen für Visual BasicLösungen zu den Übungen« Inhaltsverzeichnis. Index. Der Autor. Leseprobe weiterempfehlen

Einstieg in VBA mit Excel Galileo Press

Formulare. Datenbankanwendung 113

Kapitel 1 Einführung. 1.1 Aufbau dieses Buchs

Schnellübersichten. Visual Basic 2015 Grundlagen Programmierung

Microsoft Access Arbeiten mit Tabellen. Anja Aue

Wichtige Standardaktionen durchführen

InDesign CS6. Grundlagen. Peter Wies, Linda York. 1. Ausgabe, 2. Aktualisierung, November 2013 INDCS6

Microsoft Access 2010 Bilder

Access Programmierung. Ricardo Hernández García. 1. Ausgabe, November 2013 ACC2013P

Einstieg in VBA mit Excel Galileo Press

1 Einführung Grundlagen von Objekten und Ereignissen Grundlagen der Programmierung mit VBA Fehlerbehandlung...

3.1 PowerPoint starten

Kurzanleitung für den MyDrive Client

Inhaltsverzeichnisse. 1. Überschriften zuweisen. 2. Seitenzahlen einfügen. 3. Einen Seitenwechsel einfügen

1 Einführung Grundlagen von Objekten und Ereignissen Grundlagen der Programmierung mit VBA Fehlerbehandlung 137

1 Einführung Erste Schritte Programmierkurs Datentypen Weiterführende Programmierung

Medizinische Statistik mit R und Excel

Arbeiten mit Acrobat. Vorstellung von Adobe Acrobat Bearbeitung des Dokuments Präsentationen erstellen Teamarbeit

DAS EINSTEIGERSEMINAR

Handbuch ECDL 2003 Modul 5: Datenbank Formulare anpassen

Datenbankprogrammierung mit MySQL 5 und PHP 5 Spona

Programmieren lernen in ASP.NET mit C#

Richtig einsteigen: Access 2010 VBA-Programmierung

Microsoft PowerPoint 2016 Tabellen animieren

Inhalt. Dokument Beschreibung. Bentley Technical Support ProStructures.Net - Zusatzprogrammierung Visual Basic Express PST_Bearbeitung_Dialog

Microsoft PowerPoint 2016 Tabellen animieren

1 Einführung Was macht eine Datenbank? Entwickler und Benutzer Warum sollten Sie mit Datenbanken arbeiten?

Kopf-/Fußzeilen und Seitenzahlen

Microsoft 2010 Express/Beispiel für Grafische Oberflächen

2.3.2 Fenster verschieben Fenster überlappen

ProMaSoft.de WordPDFFormular Version (1.083) Seite 1 von 7

Microsoft Visual Studio Community 2015

Access Verbrecherdatenbank Teil 1

Microsoft Access Abfragen: Informationen anzeigen und sortieren

Netzlaufwerk-Verbindung auf den Server se-1ug w2k.makro.privat. im Computerraum für die Daten der Chemikaliendatenbank

Visual Basic.NET mit Methode

Microsoft PowerPoint 2013 Layouts

Office 2016 für Mac Das Profibuch

Richtig einsteigen: Access 2007 VBA-Programmierung

Programmieren lernen mit Perl

Erstellen von speziellen Ereignissen in C#

Anleitung zur Pflege der Homepage über den Raiffeisen-Homepage-Manager

PowerPoint Unterrichtsskript WIHOGA Dortmund. 1 Einführung und Formatierung Verschiedenes Folienmaster Animationen...

Desktop Schultz Informatik 1

Hochschulrechenzentrum Justus-Liebig-Universität Gießen. CorelDRAW X7. Zoomen

Trainingsmanagement Gutschein Management. Beschreibung

Hilfe zur Dokumentenverwaltung

Word für Windows 2010

Windows mit Gesten steuern

Rezepte in der Klammer-Strich-Methode schreiben

C# - Einführung in die Programmiersprache Arrays, Enumeration und Collections. Leibniz Universität IT Services Anja Aue

Das Grundlagenbuch zu FileMaker Pro 7- Datenbanken erfolgreich anlegen und verwalten

Kurzanleitung Hama Photokalender v

jetzt lerne ich тш^шш Visual C# 2008 Das komplette Starterkit für den erfolgreichen Einstieg Markt+Technik

Arbeitsmappe. Die Arbeitsblatt-Register. 31 Die Arbeitsblatt-Register 32 Der Umgang mit Arbeitsmappen 34 Mustervorlagen. ADer Einstieg in Excel 2000

Werkzeuge für die Dateneingabe

Objekte zeichnen, formatieren, anordnen

zur Verfügung gestellt durch das OpenOffice.org Dokumentations-Projekt

Bedienungsanleitung für MEEM-Kabel-Desktop-App Mac

Informatik für Elektrotechnik und Informationstechnik

PowerPoint Kapitel 1 Lektion 2 Benutzeroberfläche

Kennen, können, beherrschen lernen was gebraucht wird

Aufgabe 2 (Musterlösung) CorelDRAW

3.4.1 Anlegen zusätzlicher Worte

3 Geoverarbeitung mit dem ModelBuilder

Der Serienbrief bzw. Seriendruck

manchen Situationen bei der Fehlersuche und bei der Erzeugung von Anwendungen mit C# und.net helfen wird.

Wichtige Standardaktionen durchführen

Aufgabe 3 Word 2013 (Musterlösung)

bea Client-Security herunterladen und installieren unter Windows

Thomas Theis. Einstieg in Visual Basic 2012

10.2 Grafische QM-Verfahren 1

Bedienungsanleitung der Wissensdatenbank

In diesem ersten Kapitel erhalten Sie einen Überblick über das Programm Microsoft PowerPoint 2003.

Kennen, können, beherrschen lernen was gebraucht wird

Kennen, können, beherrschen lernen was gebraucht wird

Auf einen Blick. Vorwort Einführung Sprachgrundlagen von VBScript Objektorientierte Programmierung mit. dem Windows Script Host 115

Information zur Konzeptberatungs-Schnittstelle

Inhaltsverzeichnis. jetzt lerne ich

Transkript:

Galileo Computing Einstieg in Visual C# 2012 Ideal für Programmieranfänger geeignet. Inkl. Windows Store Apps Bearbeitet von Thomas Theis erweitert 2012. Taschenbuch. 581 S. Paperback ISBN 978 3 8362 1960 0 Format (B x L): 17,2 x 23 cm Weitere Fachgebiete > EDV, Informatik > Programmiersprachen: Methoden > Microsoft Programmierung schnell und portofrei erhältlich bei Die Online-Fachbuchhandlung beck-shop.de ist spezialisiert auf Fachbücher, insbesondere Recht, Steuern und Wirtschaft. Im Sortiment finden Sie alle Medien (Bücher, Zeitschriften, CDs, ebooks, etc.) aller Verlage. Ergänzt wird das Programm durch Services wie Neuerscheinungsdienst oder Zusammenstellungen von Büchern zu Sonderpreisen. Der Shop führt mehr als 8 Millionen Produkte.

Thomas Theis Einstieg in Visual C# 2012

Auf einen Blick Auf einen Blick 1 Einführung... 17 2 Grundlagen... 41 3 Fehlerbehandlung... 115 4 Erweiterte Grundlagen... 127 5 Objektorientierte Programmierung... 187 6 Wichtige Klassen in.net... 233 7 Weitere Elemente eines Windows-Programms... 291 8 Datenbank-Anwendungen mit ADO.NET... 343 9 Internet-Anwendungen mit ASP.NET... 409 10 Zeichnen mit GDI+... 441 11 Beispielprojekte... 457 12 Windows Presentation Foundation... 483 13 Windows Store-Apps für Windows 8... 511

Inhalt Inhalt 1 Einführung 17 1.1 Aufbau dieses Buches... 17 1.2 Visual Studio 2012... 18 1.3 Mein erstes Windows-Programm... 18 1.4 Visual C# 2012-Entwicklungsumgebung... 19 1.4.1 Ein neues Projekt... 19 1.4.2 Einfügen von Steuerelementen... 21 1.4.3 Arbeiten mit dem Eigenschaftenfenster... 23 1.4.4 Speichern eines Projekts... 25 1.4.5 Das Codefenster... 25 1.4.6 Schreiben von Programmcode... 28 1.4.7 Kommentare... 29 1.4.8 Starten, Ausführen und Beenden des Programms... 30 1.4.9 Ausführbares Programm... 31 1.4.10 Projekt schließen, Projekt öffnen... 31 1.4.11 Übung... 31 1.4.12 Empfehlungen für Zeilenumbrüche... 32 1.5 Arbeiten mit Steuerelementen... 32 1.5.1 Steuerelemente formatieren... 32 1.5.2 Steuerelemente kopieren... 34 1.5.3 Eigenschaften zur Laufzeit ändern... 35 1.5.4 Vergabe und Verwendung von Namen... 37 1.5.5 Verknüpfung von Texten, mehrzeilige Texte... 38 1.5.6 Eigenschaft BackColor, Farben allgemein... 39 2 Grundlagen 41 2.1 Variablen und Datentypen... 41 2.1.1 Namen, Werte... 41 2.1.2 Deklarationen... 42 2.1.3 Datentypen... 42 5

Inhalt 2.1.4 Gültigkeitsbereich... 45 2.1.5 Konstanten... 48 2.1.6 Enumerationen... 49 2.2 Operatoren... 51 2.2.1 Rechenoperatoren... 52 2.2.2 Vergleichsoperatoren... 54 2.2.3 Logische Operatoren... 55 2.2.4 Verkettungsoperator... 56 2.2.5 Zuweisungsoperatoren... 57 2.2.6 Rangfolge der Operatoren... 58 2.3 Einfache Steuerelemente... 59 2.3.1 Panel... 59 2.3.2 Zeitgeber... 61 2.3.3 Textfelder... 65 2.3.4 Zahlenauswahlfeld... 68 2.4 Verzweigungen... 69 2.4.1 if else... 70 2.4.2 switch case... 76 2.4.3 Übungen... 79 2.5 Verzweigungen und Steuerelemente... 80 2.5.1 Kontrollkästchen... 80 2.5.2 Optionsschaltfläche... 83 2.5.3 Mehrere Ereignisse in einer Methode behandeln... 85 2.5.4 Mehrere Gruppen von Optionsschaltflächen... 87 2.5.5 Methode ohne Ereignis, Modularisierung... 90 2.6 Schleifen... 91 2.6.1 for-schleife... 92 2.6.2 while und do-while-schleife... 95 2.6.3 Übungen... 98 2.7 Schleifen und Steuerelemente... 101 2.7.1 Listenfeld... 101 2.7.2 Listenfeld füllen... 101 2.7.3 Wichtige Eigenschaften... 102 2.7.4 Wechsel der Auswahl... 104 2.7.5 Wichtige Methoden... 105 2.7.6 Mehrfachauswahl... 109 2.7.7 Kombinationsfelder... 110 6

Inhalt 3 Fehlerbehandlung 115 3.1 Fehlerarten... 115 3.2 Syntaxfehler und IntelliSense... 115 3.3 Laufzeitfehler und Exception Handling... 118 3.3.1 Programm mit Laufzeitfehlern... 118 3.3.2 Einfaches Exception-Handling... 120 3.3.3 Erweitertes Exception Handling... 121 3.4 Logische Fehler und Debugging... 123 3.4.1 Einzelschrittverfahren... 123 3.4.2 Haltepunkte... 125 3.4.3 Überwachungsfenster... 125 4 Erweiterte Grundlagen 127 4.1 Steuerelemente aktivieren... 127 4.1.1 Ereignis Enter... 127 4.1.2 Eigenschaften Enabled und Visible... 130 4.2 Bedienung per Tastatur... 133 4.2.1 Eigenschaften TabIndex und TabStop... 133 4.2.2 Tastenkombination für Steuerelemente... 134 4.3 Ereignisgesteuerte Programmierung... 135 4.3.1 Eine Ereigniskette... 135 4.3.2 Endlose Ereignisketten... 137 4.3.3 Textfelder koppeln... 139 4.4 Datenfelder... 141 4.4.1 Eindimensionale Datenfelder... 141 4.4.2 Ein Feld durchsuchen... 143 4.4.3 Weitere Feld-Operationen... 145 4.4.4 Mehrdimensionale Datenfelder... 147 4.4.5 Datenfelder initialisieren... 151 4.4.6 Verzweigte Datenfelder... 153 4.4.7 Datenfelder sind dynamisch... 155 4.5 Datenstruktur ArrayList... 157 7

Inhalt 4.6 foreach-schleife... 160 4.7 Methoden... 161 4.7.1 Einfache Methoden... 161 4.7.2 Übergabe per Referenz... 164 4.7.3 Methoden mit Rückgabewerten... 168 4.7.4 Optionale Argumente... 170 4.7.5 Benannte Argumente... 171 4.7.6 Beliebig viele Argumente... 173 4.7.7 Rekursiver Aufruf... 174 4.7.8 Übungen zu Methoden... 177 4.8 Konsolenanwendung... 177 4.8.1 Anwendung erzeugen... 178 4.8.2 Ein- und Ausgabe von Text... 179 4.8.3 Eingabe einer Zahl... 180 4.8.4 Erfolgreiche Eingabe einer Zahl... 181 4.8.5 Ausgabe formatieren... 183 4.8.6 Aufruf von der Kommandozeile... 184 5 Objektorientierte Programmierung 187 5.1 Was ist Objektorientierung?... 187 5.2 Klasse, Eigenschaft, Methode, Objekt... 188 5.3 Eigenschaftsmethode... 192 5.4 Konstruktor... 194 5.5 Referenzen, Vergleiche und Typen... 197 5.5.1 Objekte vergleichen... 199 5.5.2 Typ eines Objekts ermitteln... 201 5.5.3 Typ eines Objekts durch Vergleich ermitteln... 202 5.6 Delegates... 202 5.7 Statische Elemente... 205 5.8 Vererbung... 208 5.9 Konstruktoren bei Vererbung... 212 5.10 Polymorphie... 215 8

Inhalt 5.11 Schnittstellen... 218 5.12 Strukturen... 222 5.13 Mehrere Formulare... 226 6 Wichtige Klassen in.net 233 6.1 Klasse String für Zeichenketten... 233 6.1.1 Eigenschaften der Klasse String... 234 6.1.2 Trimmen... 236 6.1.3 Splitten... 237 6.1.4 Suchen... 239 6.1.5 Einfügen... 242 6.1.6 Löschen... 243 6.1.7 Teilzeichenkette ermitteln... 245 6.1.8 Zeichen ersetzen... 247 6.1.9 Ausgabe formatieren... 248 6.2 Datum und Uhrzeit... 250 6.2.1 Eigenschaften von DateTime... 250 6.2.2 Rechnen mit Datum und Uhrzeit... 253 6.2.3 DateTimePicker... 255 6.3 Dateien und Verzeichnisse... 258 6.3.1 Lesen aus einer Textdatei... 259 6.3.2 Schreiben in eine Textdatei... 261 6.3.3 Sicheres Lesen aus einer Textdatei... 262 6.3.4 Sicheres Schreiben in eine Textdatei... 265 6.3.5 Die Klassen File und Directory... 266 6.3.6 Das aktuelle Verzeichnis... 267 6.3.7 Eine Liste der Dateien... 268 6.3.8 Eine Liste der Dateien und Verzeichnisse... 269 6.3.9 Informationen über Dateien und Verzeichnisse... 270 6.3.10 Bewegen in der Verzeichnishierarchie... 272 6.4 Rechnen mit der Klasse Math... 273 6.5 Zugriff auf MS Office... 280 6.5.1 MS Word Datei erstellen... 281 6.5.2 MS Excel Datei erstellen... 284 9

Inhalt 6.6 Formular drucken... 285 6.6.1 Druck und Seitenvorschau... 286 6.6.2 Druckeinstellungen... 287 7 Weitere Elemente eines Windows-Programms 291 7.1 Hauptmenü... 291 7.1.1 Erstellung des Hauptmenüs... 291 7.1.2 Code des Hauptmenüs... 293 7.1.3 Klasse Font... 296 7.1.4 Schriftart... 296 7.1.5 Schriftgröße... 298 7.1.6 Schriftstil... 299 7.2 Kontextmenü... 300 7.2.1 Erstellung des Kontextmenüs... 300 7.2.2 Code des Kontextmenüs... 301 7.3 Symbolleiste... 303 7.3.1 Erstellung der Symbolleiste... 303 7.3.2 Code der Symbolleiste... 304 7.4 Statusleiste... 307 7.4.1 Erstellung der Statusleiste... 307 7.4.2 Code der Statusleiste... 308 7.5 Eingabe-Dialogfeld... 310 7.6 Ausgabe-Dialogfeld... 314 7.7 Standard-Dialogfelder... 320 7.7.1 Datei öffnen... 320 7.7.2 Datei speichern unter... 323 7.7.3 Verzeichnis auswählen... 324 7.7.4 Farbe auswählen... 326 7.7.5 Schrifteigenschaften auswählen... 327 7.8 Steuerelement ListView... 329 7.9 Steuerelement Chart... 332 7.10 Steuerelement DataGridView... 336 10

Inhalt 8 Datenbank-Anwendungen mit ADO.NET 343 8.1 Was sind relationale Datenbanken?... 343 8.1.1 Beispiel»Lager«... 343 8.1.2 Indizes... 347 8.1.3 Relationen... 348 8.1.4 Übungen... 353 8.2 Anlegen einer Datenbank in Microsoft Access... 354 8.2.1 Aufbau von Access... 354 8.2.2 Datenbank-Entwurf in Access 2010... 356 8.2.3 Übungen... 360 8.3 Datenbankzugriff mit Visual C#... 361 8.3.1 Beispieldatenbank... 361 8.3.2 Ablauf eines Zugriffs... 362 8.3.3 Verbindung... 362 8.3.4 SQL-Befehl... 362 8.3.5 OleDb... 363 8.3.6 Auswahlabfrage... 364 8.3.7 Aktionsabfrage... 366 8.4 SQL-Befehle... 368 8.4.1 Auswahl mit select... 368 8.4.2 Ändern mit update... 373 8.4.3 Löschen mit delete... 374 8.4.4 Einfügen mit insert... 374 8.4.5 Typische Fehler in SQL... 374 8.5 Ein Verwaltungsprogramm... 376 8.5.1 Initialisierung... 376 8.5.2 Alle Datensätze sehen... 378 8.5.3 Datensatz einfügen... 380 8.5.4 Datensatz ändern... 382 8.5.5 Datensatz löschen... 386 8.5.6 Datensatz suchen... 388 8.6 Abfragen über mehrere Tabellen... 389 8.7 Verbindung zu MySQL... 394 8.7.1.NET-Treiber... 395 11

Inhalt 8.8 Arbeiten mit DataSets... 396 8.8.1 Tabelle in Detailansicht... 397 8.8.2 Schließen ohne Speichern verhindern... 401 8.8.3 Programmcode des DataSets... 402 8.8.4 Tabelle in DataGrid-Ansicht... 403 8.8.5 Mehrere Tabellen mit Relationen... 404 9 Internet-Anwendungen mit ASP.NET 409 9.1 Grundlagen von Internet-Anwendungen... 409 9.1.1 Statische Internet-Anwendungen... 409 9.1.2 Dynamische Internet-Anwendungen... 410 9.1.3 Vorteile von ASP.NET... 411 9.2 Ein lokaler Webserver... 411 9.2.1 Eine erste Internet-Anwendung... 412 9.3 Eine erste ASP.NET Anwendung... 414 9.3.1 Fehlerhafte Programmierung... 416 9.4 Formatierung von Internetseiten... 417 9.5 Senden und Auswerten von Formulardaten... 419 9.6 Kontrolle der Benutzer-Eingaben... 422 9.7 Weitere Formularelemente... 425 9.8 Ein Kalenderelement... 428 9.9 ASP.NET und ADO.NET... 431 9.10 Datenbank im Internet ändern... 434 10 Zeichnen mit GDI+ 441 10.1 Grundlagen von GDI+... 441 10.2 Linie, Rechteck, Polygon und Ellipse zeichnen... 441 10.2.1 Grundeinstellungen... 442 10.2.2 Linie... 443 10.2.3 Rechteck... 444 12

Inhalt 10.2.4 Polygon... 445 10.2.5 Ellipse... 446 10.2.6 Dicke und Farbe ändern, Zeichnung löschen... 446 10.3 Text schreiben... 447 10.4 Bilder darstellen... 450 10.5 Dauerhaft zeichnen... 452 10.6 Zeichnen einer Funktion... 454 11 Beispielprojekte 457 11.1 Spielprogramm Tetris... 457 11.1.1 Spielablauf... 457 11.1.2 Programmbeschreibung... 458 11.1.3 Steuerelemente... 459 11.1.4 Initialisierung des Programms... 460 11.1.5 Erzeugen eines neuen Panels... 462 11.1.6 Der Zeitgeber... 463 11.1.7 Panels löschen... 465 11.1.8 Panels seitlich bewegen... 469 11.1.9 Panels nach unten bewegen... 470 11.1.10 Pause... 470 11.2 Lernprogramm Vokabeln... 471 11.2.1 Benutzung des Programms... 471 11.2.2 Erweiterung des Programms... 473 11.2.3 Initialisierung des Programms... 474 11.2.4 Ein Test beginnt... 475 11.2.5 Zwei Hilfsmethoden... 477 11.2.6 Die Antwort prüfen... 479 11.2.7 Das Benutzermenü... 480 12 Windows Presentation Foundation 483 12.1 Layout... 484 12.2 Steuerelemente... 487 13

Inhalt 12.3 Frame-Anwendung... 490 12.4 Datenbindung... 493 12.5 Zweidimensionale Grafik... 496 12.6 Dreidimensionale Grafik... 499 12.7 Animation... 503 12.8 WPF und Windows Forms... 506 12.8.1 Windows Forms in WPF... 506 12.8.2 WPF in Windows Forms... 508 13 Windows Store-Apps für Windows 8 511 13.1 Projektvorlagen für Windows Store-Apps... 511 13.2 Projektvorlage Blank... 513 13.3 Steuerelemente... 515 13.4 Seitenvorlagen für Windows Store-Apps... 518 13.5 Eine Reihe von Seiten... 519 13.6 Eine geteilte Seite... 522 13.7 Seitenvorlage Standardseite... 524 13.8 Projektvorlage Grid... 526 13.9 Projektvorlage Split... 529 13.10 Prüfen einer App... 531 Anhang 533 A Installation und technische Hinweise... 535 A.1 Inhalt des Datenträgers zu diesem Buch... 535 A.2 Installation der Express-Versionen von Visual Studio 2012... 535 A.3 Arbeiten mit einer Formularvorlage... 536 A.4 Arbeiten mit einer Projektvorlage... 537 14

Inhalt A.5 Weitergabe eigener Windows-Programme... 538 A.6 Konfigurationsdaten... 539 A.7 Datenbankzugriff unter Vista 64-Bit-Version... 541 B Lösungen der Übungsaufgaben... 543 B.1 Lösung der Übungsaufgabe aus Kapitel 1... 543 B.2 Lösungen der Übungsaufgaben aus Kapitel 2... 544 B.3 Lösungen der Übungsaufgaben aus Kapitel 4... 558 B.4 Lösungen der Übungsaufgaben aus Kapitel 8... 562 C Der Autor... 565 Index... 567 15

Kapitel 1 Einführung 1 In diesem Kapitel erlernen Sie anhand eines ersten Projekts den Umgang mit der Entwicklungsumgebung und den Steuerelementen. Anschließend werden Sie in der Lage sein, Ihr erstes eigenes Windows-Programm zu erstellen. C# ist eine objektorientierte Programmiersprache, die von Microsoft im Zusammenhang mit dem.net-framework eingeführt wurde. Mithilfe der Entwicklungsumgebung Visual Studio 2012 können Sie unter anderem in der Sprache C# programmieren. Visual Studio 2012 ist der Nachfolger von Visual Studio 2010. Innerhalb von Visual Studio stehen Ihnen noch weitere Sprachen zur Programmentwicklung zur Verfügung. C# 1.1 Aufbau dieses Buches Dieses Buch vermittelt Ihnen zunächst einen einfachen Einstieg in die Programmierung mit Visual C# 2012. Die Bearbeitung der Beispiele und das selbstständige Lösen der vorliegenden Übungsaufgaben helfen dabei. Dadurch werden Sie schnell erste Erfolgserlebnisse haben, die Sie zum Weitermachen motivieren. In späteren Kapiteln werden Ihnen auch die komplexen Themen vermittelt. Von Anfang an wird mit anschaulichen Windows-Anwendungen gearbeitet. Die Grundlagen der Programmiersprache und die Standardelemente einer Windows-Anwendung, wie Sie sie schon von anderen Windows-Programmen her kennen, werden gemeinsam vermittelt. Die Anschaulichkeit einer Windows-Anwendung hilft dabei, den eher theoretischen Hintergrund der Programmiersprache leichter zu verstehen. Beispiele Grundlagen 17

1 Einführung 1.2 Visual Studio 2012 Express Edition Es werden mehrere Express-Versionen von Visual Studio 2012 unter Windows 7 mit Service Pack 1 und unter Windows 8 eingesetzt. Diese freien Versionen von Visual Studio 2012 liegen dem Buch bei, Sie können sie aber auch bei Microsoft herunterladen. Die Express-Versionen von Visual Studio 2012 bieten jeweils eine komfortable Entwicklungsumgebung. Sie umfassen einen Editor zur Erstellung des Programmcodes, einen Compiler zur Erstellung der ausführbaren Programme, einen Debugger zur Fehlersuche und vieles mehr. Auf dem Datenträger zum Buch finden Sie die folgenden Express-Versionen von Visual Studio 2012, mit unterschiedlichen Einsatzbereichen: Visual Studio Express 2012 für Desktop zur Programmierung der Windows Forms-Anwendungen sowie der Konsolen-Anwendungen, die Sie in Kapitel 1 bis 8 sowie 10 und 11 sehen werden. Außerdem dient diese Version zur Umsetzung der WPF-Anwendungen in Kapitel 12. Mit der Desktop-Version werden wir beginnen. Visual Studio Express 2012 für das Web zur Programmierung der Internet-Anwendungen mit C# in Kapitel 9. Visual Studio Express 2012 für Windows 8 zur Programmierung der Windows-Store-Apps, die nur in Windows 8 laufen und die Sie in Kapitel 13 sehen werden. Zur Installation der Express-Versionen verweise ich auf den Anhang. Noch eine Anmerkung in eigener Sache: Für die Hilfe bei der Erstellung dieses Buches bedanke ich mich beim Team von Galileo Press, besonders bei Anne Scheibe. Thomas Theis 1.3 Mein erstes Windows-Programm Anhand eines ersten Projekts werden Sie die Schritte durchlaufen, die zur Erstellung eines einfachen Programms mithilfe von Visual C# 2012 notwendig sind. Das Programm soll nach dem Aufruf zunächst aussehen wie in Abbildung 1.1. 18

1.4 Visual C# 2012-Entwicklungsumgebung 1 Abbildung 1.1 Erstes Programm nach dem Aufruf Nach Betätigung des Buttons Hallo soll sich der Text in der obersten Zeile verändern, siehe Abbildung 1.2. Abbildung 1.2 Nach Betätigung des Buttons»Hallo«1.4 Visual C# 2012-Entwicklungsumgebung Während der Projekterstellung lernen Sie Schritt für Schritt die Visual Studio 2012-Entwicklungsumgebung kennen. 1.4.1 Ein neues Projekt Nach dem Aufruf des Programms Visual Studio Express 2012 für Windows Desktop müssen Sie zur Erstellung eines neuen C#-Projekts den Menüpunkt Datei Neues Projekt Installiert Vorlagen Visual C# Windows Forms-Anwendung auswählen. Als Projektname bietet die Entwicklungsumgebung den Namen WindowsFormsApplication1 an, dieser sollte geändert werden, zum Beispiel in MeinErstes. Es erscheinen einige Elemente der Entwicklungsumgebung. Folgende Elemente sind besonders wichtig: Das Benutzerformular (engl.: Form) enthält die Oberfläche für den Benutzer des Programms (siehe Abbildung 1.3). Form 19

1 Einführung Abbildung 1.3 Benutzerformular Toolbox Die Werkzeugsammlung (engl.: Toolbox) enthält die Steuerelemente für den Benutzer, mit denen er den Ablauf des Programms steuern kann. Sie werden vom Programm-Entwickler in das Formular eingefügt (siehe Abbildung 1.4). Abbildung 1.4 Toolbox mit verschiedenen Kategorien von Steuerelementen Eigenschaftenfenster Projektmappen- Explorer Das Eigenschaftenfenster (engl.: Properties Window) dient zum Anzeigen und Ändern der Eigenschaften von Steuerelementen innerhalb des Formulars durch den Programm-Entwickler (siehe Abbildung 1.5). Ich empfehle Ihnen, sich die Eigenschaften in alphabetischer Reihenfolge anzeigen zu lassen. Dazu einfach das zweite Symbol von links, unter Form1, betätigen. Der Projektmappen-Explorer (engl.: Solution Explorer) zeigt das geöffnete Projekt und die darin vorhandenen Elemente (siehe Abbildung 1.6). 20

1.4 Visual C# 2012-Entwicklungsumgebung 1 Abbildung 1.5 Eigenschaftenfenster Abbildung 1.6 Projektmappen-Explorer Sollten die Toolbox, das Eigenschaftenfenster oder der Projektmappen-Explorer einmal nicht sichtbar sein, so können Sie das betreffende Element über das Menü Ansicht einblenden. Sollte das Formular einmal nicht sichtbar sein, so können Sie es über einen Doppelklick auf den Namen (Form1.cs) im Projektmappen-Explorer einblenden. Anfangs schreiben Sie nur einfache Programme mit wenigen Elementen, daher benötigen Sie den Projektmappen-Explorer noch nicht. Es empfiehlt sich, das Eigenschaftenfenster nach oben zu vergrößern. 1.4.2 Einfügen von Steuerelementen Zunächst sollen drei Steuerelemente in das Formular eingefügt werden: ein Bezeichnungsfeld (Label) und zwei Befehlsschaltflächen (Buttons). Ein Bezeichnungsfeld dient im Allgemeinen dazu, feste oder veränderliche Label, Button 21

1 Einführung Texte auf der Benutzeroberfläche anzuzeigen. In diesem Programm soll das Label einen Text anzeigen. Ein Button dient zum Starten bestimmter Programmteile oder, allgemeiner ausgedrückt, zum Auslösen von Ereignissen. In diesem Programm sollen die Buttons dazu dienen, den Text anzuzeigen bzw. das Programm zu beenden. Allgemeine Steuerelemente Um ein Steuerelement einzufügen, ziehen Sie es mithilfe der Maus von der Toolbox an die gewünschte Stelle im Formular. Alle Steuerelemente finden sich in der Toolbox unter Alle Windows Forms. Übersichtlicher ist der Zugriff über Allgemeine Steuerelemente (engl.: Common Controls), siehe Abbildung 1.7. Abbildung 1.7 Toolbox, Allgemeine Steuerelemente Steuerelement auswählen Ein Doppelklick auf ein Steuerelement in der Toolbox fügt es ebenfalls in die Form ein. Anschließend können Ort und Größe noch verändert werden. Dazu wählen Sie das betreffende Steuerelement vorher durch Anklicken aus, siehe Abbildung 1.8. Ein überflüssiges Steuerelement können Sie durch Auswählen und Drücken der Taste (Entf) entfernen. Abbildung 1.8 Ausgewählter Button Die Größe und andere Eigenschaften des Formulars selbst können Sie auch verändern. Dazu wählen Sie es vorher durch Anklicken auf einer freien Stelle aus. 22

1.4 Visual C# 2012-Entwicklungsumgebung 1.4.3 Arbeiten mit dem Eigenschaftenfenster Die eingefügten Steuerelemente haben zunächst einheitliche Namen und Aufschriften, diese sollten Sie allerdings zur einfacheren Programmentwicklung ändern. Es haben sich bestimmte Namenskonventionen eingebürgert, die die Lesbarkeit erleichtern. Diese Namen beinhalten den Typ (mit drei Buchstaben abgekürzt) und die Aufgabe des Steuerelements (mit großem Anfangsbuchstaben). 1 Ein Button (eigentlich: Command Button), der die Anzeige der Zeit auslösen soll, wird beispielsweise mit cmdzeit bezeichnet. Weitere Vorsilben sind txt (Textfeld/TextBox), lbl (Bezeichnungsfeld/Label), opt (Optionsschaltfläche/RadioButton), frm (Formular/Form) und chk (Kontrollkästchen/ CheckBox). cmd, txt, lbl,... Zur Änderung des Namens eines Steuerelements muss es zunächst ausgewählt werden. Das können Sie entweder durch Anklicken des Steuerelements auf dem Formular oder durch Auswahl aus der Liste am oberen Ende des Eigenschaftenfensters tun. Im Eigenschaftenfenster werden alle Eigenschaften des ausgewählten Steuerelements angezeigt. Die Liste ist zweispaltig: In der linken Spalte steht der Name der Eigenschaft, in der rechten Spalte ihr aktueller Wert. Die Eigenschaft (Name) steht am Anfang der Liste der Eigenschaften. Die betreffende Zeile wählen Sie durch Anklicken aus und geben hier den neuen Namen ein. Nach Bestätigung mit der Taste ( ) ist die Eigenschaft geändert, siehe Abbildung 1.9. Eigenschaftenfenster Abbildung 1.9 Button, nach der Namensänderung Die Aufschrift von Buttons, Labels und Formularen ist in der Eigenschaft Text angegeben. Sobald diese Eigenschaft verändert wird, erscheint die veränderte Aufschrift in dem betreffenden Steuerelement. Auch der Name Text 23

1 Einführung und die Aufschrift des Formulars sollten geändert werden. Im Folgenden sind die gewünschten Eigenschaften für die Steuerelemente dieses Programms in Tabellenform angegeben, siehe Tabelle 1.1. Typ Eigenschaft Einstellung Formular Text Mein erstes Programm Button Name cmdhallo Text Hallo Button Name cmdende Text Ende Label Name lblanzeige Text BorderStyle (leer) FixedSingle Tabelle 1.1 Steuerelemente mit Eigenschaften Startzustand Zu diesem Zeitpunkt legen Sie den Startzustand fest, also die Eigenschaften, die die Steuerelemente zu Beginn des Programms bzw. eventuell während des gesamten Programms haben sollen. Viele Eigenschaften können Sie auch während der Laufzeit des Programms durch den Programmcode verändern. Bei einem Label ergibt die Einstellung der Eigenschaft BorderStyle auf FixedSingle einen Rahmen. Zur Änderung auf FixedSingle klappen Sie die Liste bei der Eigenschaft auf und wählen den betreffenden Eintrag aus, siehe Abbildung 1.10. Zur Änderung einiger Eigenschaften müssen Sie gegebenenfalls ein Dialogfeld aufrufen. Im Label soll zunächst der Text (leer) erscheinen. Hierzu wählen Sie den vorhandenen Text durch Anklicken aus und ändern ihn. Liste der Steuerelemente Sie finden alle in diesem Formular vorhandenen Steuerelemente in der Liste, die sich am oberen Ende des Eigenschaftenfensters öffnen lässt. Dabei zeigt sich ein Vorteil der einheitlichen Namensvergabe: Die Steuerelemente des gleichen Typs stehen direkt untereinander. 24

1.4 Visual C# 2012-Entwicklungsumgebung 1 Abbildung 1.10 Label, nach der Änderung von Name und BorderStyle 1.4.4 Speichern eines Projekts Die Daten eines Visual C#-Projekts werden in verschiedenen Dateien gespeichert. Zum Speichern des gesamten Projekts verwenden Sie den Menüpunkt Datei Alle Speichern. Diesen Vorgang sollten Sie in regelmäßigen Abständen durchführen, damit keine Änderungen verloren gehen können. Alles speichern Die in diesem Skript angegebenen Namen dienen als Empfehlung, um die eindeutige Orientierung und das spätere Auffinden von alten Programmen zu erleichtern. 1.4.5 Das Codefenster Der Ablauf eines Windows-Programms wird im Wesentlichen durch das Auslösen von Ereignissen durch den Benutzer gesteuert. Er löst z. B. die Anzeige des Texts Hallo aus, indem er auf den Button Hallo klickt. Der Entwickler muss dafür sorgen, dass aufgrund dieses Ereignisses der gewünschte Text angezeigt wird. Zu diesem Zweck schreibt er Programmcode und ordnet diesen Code dem Ereignis zu. Der Code wird in einer Ereignismethode abgelegt. Zum Schreiben einer Ereignismethode führen Sie am besten einen Doppelklick auf das betreffende Steuerelement aus. Es erscheint das Codefenster. Zwischen der Formularansicht und der Codeansicht können Sie Ereignis Ereignismethode 25

1 Einführung anschließend über die Menüpunkte Ansicht Code bzw. Ansicht Designer hin- und herschalten. Dies ist auch über die Registerkarten oberhalb des Formulars bzw. des Codefensters möglich, siehe Abbildung 1.11. Abbildung 1.11 Registerkarten Nach erfolgtem Doppelklick auf den Button Hallo erscheinen im Codefenster folgende Einträge: using System; using System.Drawing; using System.Windows.Forms; namespace MeinErstes public partial class Form1 : Form public Form1() InitializeComponent(); private void cmdhallo_click( object sender, EventArgs e) Listing 1.1 Projekt»MeinErstes«, Button»Hallo«, ohne Code Zur Erläuterung: Sie sollten sich nicht von der Vielzahl der automatisch erzeugten Zeilen und den noch unbekannten Inhalten verwirren lassen. 26

1.4 Visual C# 2012-Entwicklungsumgebung Zunächst das Wichtigste: Innerhalb der geschweiften Klammern der Ereignismethode cmdhallo_click() wird später Ihr eigener Programmcode hinzugefügt. 1 Zu den anderen Bestandteilen (die für das eigene Programmieren erst später wichtig sind): C# ist eine objektorientierte Sprache. Ein wichtiges Element objektorientierter Sprachen sind Klassen. Klassen eröffnen weitere Programmiermöglichkeiten. Namensräume beinhalten zusammengehörige Klassen. In obigem Listing können Sie erkennen, dass einige Programmzeilen, die mit using beginnen, bereits entfernt wurden. Das Schlüsselwort using dient zum Einbinden von Namensräumen in das aktuelle Projekt. Da wir die Klassen in diesen Namensräumen nicht benötigen, wurden die betreffenden Zeilen entfernt. Dieses erste Projekt verfügt über einen eigenen Namensraum (engl. namespace), daher namespace MeinErstes. Alle Elemente des aktuellen Formulars Form1 stehen innerhalb der öffentlich zugänglichen Klasse Form1, daher public class Form1. Ein Teil der Elemente steht in dieser Datei, ein anderer Teil, der ebenfalls automatisch erzeugt wurde, steht in einer anderen, hier nicht sichtbaren Datei; daher der Zusatz partial (dt. teilweise). Die Methode InitializeComponent() beinhaltet Programmzeilen, die für das Aussehen und Verhalten der Steuerelemente des Programms sorgen. Der Zusatz private bedeutet, dass die Ereignismethode cmdhallo- Click() nur in dieser Klasse bekannt ist. Mit void wird gekennzeichnet, dass diese Methode nur etwas ausführt, aber kein Ergebnis zurückliefert. Auf weitere Einzelheiten dieser automatisch erzeugten Bestandteile wird zu einem späteren Zeitpunkt eingegangen, da es hier noch nicht notwendig ist und eher verwirren würde. Namensraum using namespace public partial class private void Wie bereits erwähnt: Die Ereignismethode für den Klick auf den Button Hallo heißt cmdhallo_click(). Der Kopf der Methode ist sehr lang, daher wurde er für den Druck in diesem Buch auf mehrere Zeilen verteilt, wodurch auch die Lesbarkeit von Programmen erhöht wird: private void cmdhallo_click( object sender, EventArgs e) 27

1 Einführung Der anfänglich ausgeführte Doppelklick führt immer zu dem Ereignis, das am häufigsten mit dem betreffenden Steuerelement verbunden wird. Click Dies ist beim Button natürlich das Ereignis Click. Zu einem Steuerelement gibt es aber auch noch andere mögliche Ereignisse. Bei den nachfolgenden Programmen werden nicht mehr alle Teile des Programmcodes im Buch abgebildet, sondern nur noch die Teile, die vom Entwickler per Code-Eingabe erzeugt werden, und die Teile des automatisch erzeugten Codes, die wichtig für das Verständnis sind. Den vollständigen Programmcode können Sie jederzeit betrachten, wenn Sie die Beispiel-Projekte laden bzw. ausprobieren. 1.4.6 Schreiben von Programmcode In der Methode cmdhallo_click() soll eine Befehlszeile eingefügt werden, so dass sie anschließend wie folgt aussieht: private void cmdhallo_click( object sender, EventArgs e) lblanzeige.text = "Hallo"; Listing 1.2 Projekt»MeinErstes«, Button»Hallo«, mit Code Der Text muss in Anführungszeichen gesetzt werden, da C# sonst annimmt, dass es sich um eine Variable mit dem Namen Hallo handelt. Anweisung Zuweisung Der Inhalt einer Methode setzt sich aus einzelnen Anweisungen zusammen, die nacheinander ausgeführt werden. Die vorliegende Methode enthält nur eine Anweisung; in ihr wird mithilfe des Gleichheitszeichens eine Zuweisung durchgeführt. Bei einer Zuweisung wird der Ausdruck rechts vom Gleichheitszeichen ausgewertet und der Variablen, der Objekt-Eigenschaft oder der Steuerelement-Eigenschaft links vom Gleichheitszeichen zugewiesen. Die Zeichenkette Hallo wird der Eigenschaft Text des Steuerelements lblanzeige mithilfe der Schreibweise Steuerelement.Eigenschaft = Wert zugewiesen. Dies führt zur Anzeige des Werts. 28

1.4 Visual C# 2012-Entwicklungsumgebung Nach dem Wechsel auf die Formularansicht können Sie das nächste Steuerelement auswählen, für das eine Ereignismethode geschrieben werden soll. 1 Innerhalb des Codefensters kann Text mit den gängigen Methoden der Textverarbeitung editiert, kopiert, verschoben und gelöscht werden. Code editieren In der Ereignismethode cmdende_click() soll der folgende Code stehen: private void cmdende_click( object sender, EventArgs e) Close(); Listing 1.3 Projekt»MeinErstes«, Button»Ende«Die Methode Close() dient zum Schließen eines Formulars. Da es sich um das einzige Formular dieses Projekts handelt, wird dadurch das Programm beendet und die gesamte Windows-Anwendung geschlossen. Close() Dies waren Beispiele zur Änderung der Eigenschaften eines Steuerelements zur Laufzeit des Programms durch Programmcode. Sie erinnern sich: Zu Beginn hatten wir die Start-Eigenschaften der Steuerelemente im Eigenschaftenfenster eingestellt. 1.4.7 Kommentare Bei längeren Programmen mit vielen Anweisungen gehört es zum guten Programmierstil, Kommentarzeilen zu schreiben. In diesen Zeilen werden einzelne Anweisungen oder auch längere Blöcke von Anweisungen erläutert, damit Sie selbst oder auch ein anderer Programmierer sie später leichter verstehen. Alle Zeichen innerhalb eines Kommentars werden nicht übersetzt oder ausgeführt. Ein Kommentar beginnt mit der Zeichenkombination /*, endet mit der Zeichenkombination */ und kann sich über mehrere Zeilen erstrecken. Eine andere Möglichkeit ergibt sich durch die Zeichenkombination //. Ein solcher Kommentar erstreckt sich nur bis zum Ende der Zeile. /* Kommentar */ // Kommentar Der folgende Programmcode wurde um einen Kommentar ergänzt: 29

1 Einführung private void cmdende_click( object sender, EventArgs e) /* Diese Anweisung beendet das Programm */ Close(); Listing 1.4 Projekt»MeinErstes«, Button»Ende«, mit Kommentar Code auskommentieren Ein kleiner Trick: Sollen bestimmte Programmzeilen für einen Test des Programms kurzfristig nicht ausgeführt werden, können Sie sie auskommentieren, indem Sie die Zeichenkombination // vor die betreffenden Zeilen setzen. Dies geht sehr schnell, indem Sie die betreffende(n) Zeile(n) markieren und anschließend das entsprechende Symbol im linken Bereich der Symbolleiste anklicken, siehe Abbildung 1.12. Rechts daneben befindet sich das Symbol, das die Auskommentierung nach dem Test wieder rückgängig macht. Abbildung 1.12 Kommentar ein/aus 1.4.8 Starten, Ausführen und Beenden des Programms Programm starten Programm beenden Fehler Nach dem Einfügen der Steuerelemente und dem Erstellen der Ereignismethoden ist das Programm fertig und kann gestartet werden. Dazu betätigen Sie den Start-Button in der Symbolleiste (dreieckiger Pfeil nach rechts). Alternativ starten Sie das Programm über die Funktionstaste (F5) oder den Menüpunkt Debuggen Debugging Starten. Das Formular erscheint, das Betätigen der Buttons führt zum programmierten Ergebnis. Zur regulären Beendigung eines Programms ist der Button mit der Aufschrift Ende vorgesehen. Möchten Sie ein Programm während des Verlaufs abbrechen, können Sie auch den End-Button in der Symbolleiste (Quadrat) betätigen. Tritt während der Ausführung eines Programms ein Fehler auf, so werden Sie hierauf hingewiesen, und das Codefenster zeigt die entsprechende Ereignismethode sowie die fehlerhafte Zeile an. In diesem Fall beenden Sie das Programm, korrigieren Sie den Code und starten Sie das Programm wieder. 30

1.4 Visual C# 2012-Entwicklungsumgebung Es ist empfehlenswert, das Programm bereits während der Entwicklung mehrmals durch Aufruf zu testen und nicht erst, wenn das Programm vollständig erstellt worden ist. Geeignete Zeitpunkte sind zum Beispiel: Programm testen 1 nach dem Einfügen der Steuerelemente und dem Zuweisen der Eigenschaften, die Sie zu Programmbeginn benötigen nach dem Erstellen jeder Ereignismethode 1.4.9 Ausführbares Programm Nach erfolgreichem Test des Programms können Sie die ausführbare Datei (.exe-datei) auch außerhalb der Entwicklungsumgebung aufrufen. Haben Sie an den Grundeinstellungen nichts verändert und die vorgeschlagenen Namen verwendet, so findet sich die zugehörige.exe-datei des aktuellen Projekts im Verzeichnis Eigene Dateien\Visual Studio 2012\Projects\Mein- Erstes\MeinErstes\bin\Debug. Das Programm kann also im Windows- Explorer direkt über Doppelklick gestartet werden..exe-datei Die Weitergabe eines eigenen Windows-Programms auf einen anderen PC ist etwas aufwendiger. Der Vorgang wird in Abschnitt A.5 beschrieben. 1.4.10 Projekt schließen, Projekt öffnen Sie können ein Projekt schließen über den Menüpunkt Datei Projektmappe schliessen. Falls Sie Veränderungen vorgenommen haben, werden Sie gefragt, ob Sie diese Änderungen speichern möchten. Projekt schließen Möchten Sie die Projektdaten sicherheitshalber zwischendurch speichern, so ist dies über den Menüpunkt Datei Alle speichern möglich. Dies ist bei längeren Entwicklungsphasen sehr zu empfehlen. Zum Öffnen eines vorhandenen Projekts wählen Sie den Menüpunkt Datei Projekt öffnen. Im darauf folgenden Dialogfeld Projekt öffnen wählen Sie zunächst das gewünschte Projektverzeichnis aus und anschließend die gleichnamige Datei mit der Endung.sln. Projekt öffnen 1.4.11 Übung Erstellen Sie ein Windows-Programm mit einem Formular, das zwei Buttons und ein Label beinhaltet, siehe Abbildung 1.13. Bei Betätigung des ers- Übung ÜName 31

1 Einführung ten Buttons erscheint im Label Ihr Name. Bei Betätigung des zweiten Buttons wird das Programm beendet. Namensvorschläge: Projektname ÜName, Buttons cmdmyname und cmdende, Label lblmyname. Abbildung 1.13 Übung ÜName 1.4.12 Empfehlungen für Zeilenumbrüche Zeilenumbruch Zeilenumbrüche erhöhen die Lesbarkeit des Programmcodes. Sie können nicht an jeder Stelle einer Anweisung durchgeführt werden. Nachfolgend werden einige Stellen empfohlen: nach einer öffnenden Klammer, wie bereits gezeigt vor einer schließenden Klammer nach einem Komma nach den meisten Operatoren, also auch nach dem Zuweisungsoperator (=) hinter lblanzeige.text, siehe Abschnitt 2.2 nach einem Punkt hinter einem Objektnamen, also auch nach dem Punkt hinter dem Objektnamen lblanzeige Auf keinen Fall dürfen Sie einen Zeilenumbruch innerhalb einer Zeichenkette durchführen. 1.5 Arbeiten mit Steuerelementen 1.5.1 Steuerelemente formatieren Hilfslinien Zur besseren Anordnung der Steuerelemente auf dem Formular können Sie sie mithilfe der Maus nach Augenmaß verschieben. Dabei erscheinen automatisch Hilfslinien, falls das aktuelle Element horizontal oder vertikal parallel zu einem anderen Element steht. 32

1.5 Arbeiten mit Steuerelementen Weitere Möglichkeiten bieten die Menüpunkte im Menü Format. In vielen Fällen müssen vorher mehrere Steuerelemente auf einmal markiert werden, siehe Abbildung 1.14. Mehrere Steuerelemente markieren 1 Abbildung 1.14 Mehrere markierte Elemente Dies geschieht entweder durch Umrahmung der Elemente mit einem Rechteck, nachdem Sie zuvor das Steuerelement Zeiger ausgewählt haben, oder durch Mehrfachauswahl, indem Sie ab dem zweiten auszuwählenden Steuerelement die (ª)-Taste (wie für Großbuchstaben) oder die (Strg)- Taste gedrückt halten. Über das Menü Format haben Sie anschließend folgende Möglichkeiten zur Anpassung der Steuerelemente: Menü»Format«Die ausgewählten Steuerelemente können horizontal oder vertikal zueinander ausgerichtet werden (Menü Format Ausrichten). Die horizontalen und/oder vertikalen Dimensionen der ausgewählten Steuerelemente können angeglichen werden (Menü Format Grösse angleichen). Die horizontalen und vertikalen Abstände zwischen den ausgewählten Steuerelementen können angeglichen, vergrößert, verkleinert oder entfernt werden (Menü Format Horizontaler Abstand/Vertikaler Abstand). Die Steuerelemente können horizontal oder vertikal innerhalb des Formulars zentriert werden (Menü Format auf Formular zentrieren). Einheitliche Abstände 33

1 Einführung Sollten sich die Steuerelemente teilweise überlappen, können Sie einzelne Steuerelemente in den Vorder- bzw. Hintergrund schieben (Menü Format Reihenfolge). Sie können alle Steuerelemente gleichzeitig gegen versehentliches Verschieben absichern (Menü Format Steuerelemente Sperren). Diese Sperrung gilt nur während der Entwicklung des Programms. Abbildung 1.15 zeigt ein Formular mit drei Buttons, die alle links ausgerichtet sind und im gleichen vertikalen Abstand voneinander stehen. Abbildung 1.15 Nach der Formatierung Übung Laden Sie das Projekt MeinErstes aus Abschnitt 1.3, markieren Sie darin mehrere Steuerelemente, und testen Sie die einzelnen Möglichkeiten des Format-Menüs. 1.5.2 Steuerelemente kopieren Steuerelemente kopieren Zur schnelleren Erzeugung eines Projekts können vorhandene Steuerelemente einschließlich aller ihrer Eigenschaften kopiert werden. Markieren Sie hierzu die gewünschten Steuerelemente und kopieren Sie sie entweder über das Menü Bearbeiten Kopieren und das Menü Bearbeiten Einfügen oder mit den Tasten (Strg) + (C) und (Strg) + (V). Anschließend sollten Sie die neu erzeugten Steuerelemente direkt umbenennen und an der gewünschten Stelle anordnen. 34

1.5 Arbeiten mit Steuerelementen Übung Laden Sie das Projekt MeinErstes aus Abschnitt 1.3 und kopieren Sie einzelne Steuerelemente. Kontrollieren Sie anschließend die Liste der vorhandenen Steuerelemente im Eigenschaftenfenster auf einheitliche Namensgebung. 1 1.5.3 Eigenschaften zur Laufzeit ändern Steuerelemente haben die Eigenschaften Size (mit den Komponenten Width und Height) und Location (mit den Komponenten X und Y) zur Angabe von Größe und Position. X und Y geben die Koordinaten der oberen linken Ecke des Steuerelements an, gemessen von der oberen linken Ecke des umgebenden Elements (meist das Formular). Alle Werte werden in Pixeln gemessen. Size, Location Alle diese Eigenschaften können sowohl während der Entwicklungszeit als auch während der Laufzeit eines Projekts verändert werden. Zur Änderung während der Entwicklungszeit können Sie die Eigenschaftswerte wie gewohnt im Eigenschaftenfenster eingeben. Als Beispiel für Änderungen während der Laufzeit soll das folgende Programm (Projekt Steuerelemente) dienen, siehe Abbildung 1.16. Abbildung 1.16 Position und Größe bestimmen Es wird nachfolgend generell nur der Teil des Programmcodes angezeigt, der verändert wurde: private void cmdpositionrel_click(...) cmdtest.location = new Point( cmdtest.location.x + 20, 35

1 Einführung cmdtest.location.y); private void cmdpositionabs_click(...) cmdtest.location = new Point(100, 200); private void cmdgrößerel_click(...) cmdtest.size = new Size( cmdtest.size.width + 20, cmdtest.size.height); private void cmdgrößeabs_click(...) cmdtest.size = new Size(50, 100); Listing 1.5 Projekt»Steuerelemente«Zur Erläuterung: Verkürzte Darstellung Der Kopf der einzelnen Methoden wurde aus Gründen der Übersichtlichkeit jeweils in verkürzter Form abgebildet. Dies wird bei den meisten nachfolgenden Beispielen ebenfalls so sein, außer wenn es genau auf die Inhalte des Methodenkopfs ankommt. Das Formular enthält fünf Buttons. Die oberen vier Buttons dienen zur Veränderung von Position und Größe des fünften Buttons. Die Position eines Elements kann relativ zur aktuellen Position oder auf absolute Werte eingestellt werden. Das Gleiche gilt für die Größe eines Elements. Bei beiden Angaben handelt es sich um Wertepaare (X/Y bzw. Breite/ Höhe). new Point Zur Einstellung der Position dient die Struktur Point. Ein Objekt dieser Struktur liefert ein Wertepaar. In diesem Programm wird mit new jeweils ein neues Objekt der Struktur Point erzeugt, um das Wertepaar bereitzustellen. 36

1.5 Arbeiten mit Steuerelementen Bei Betätigung des Buttons Position Abs wird die Position des fünften Buttons auf die Werte X=100 und Y=200 gestellt, gemessen von der linken X, Y 1 oberen Ecke des Formulars. Bei Betätigung des Buttons Position Rel wird die Position des fünften Buttons auf die Werte X = cmdtest.location.x + 20 und Y = cmdtest.location.y gestellt. Bei X wird also der alte Wert der Komponente X um 20 erhöht, das Element bewegt sich nach rechts. Bei Y wird der alte Wert der Komponente Y nicht verändert, das Element bewegt sich nicht nach oben oder unten. Zur Einstellung der Größe dient die Struktur Size. Size Bei Betätigung des Buttons Grösse Abs wird die Größe des fünften But- Width, Height tons auf die Werte Width = 50 und Height = 100 gestellt. Bei Betätigung des Buttons Grösse Rel wird die Größe des fünften Buttons auf die Werte Width = cmdtest.size.width + 20 und Height = cmdtest. Size.Height gestellt. Bei Width wird also der alte Wert der Komponente Width um 20 erhöht, das Element wird breiter. Bei Height wird der alte Wert der Komponente Height nicht verändert, das Element verändert seine Höhe nicht. Nach einigen Klicks sieht das Formular aus wie in Abbildung 1.17. Abbildung 1.17 Veränderung von Eigenschaften zur Laufzeit 1.5.4 Vergabe und Verwendung von Namen Beachten Sie in allen Programmen, dass jedes Steuerelement seinen eigenen, eindeutigen Namen hat und immer mit diesem Namen angesprochen werden muss. Es passiert erfahrungsgemäß besonders am Anfang häufig, dass ein Programm nicht zum gewünschten Erfolg führt, weil ein nicht vor- 37

1 Einführung handener Name verwendet wurde. In diesem Zusammenhang weise ich noch einmal auf die Namenskonventionen hin: Buttons sollten Namen, wie z. B. cmdende, cmdanzeigen, cmdberechnen usw., haben. Labels sollten Namen, wie z. B. lblanzeige, lblname, lbluhrzeit, lbl- BeginnDatum, haben. Diese Namen liefern eine eindeutige Information über Typ und Funktion des Steuerelements. Falls Sie beim Schreiben von Programmcode anschließend diese Namen z. B. vollständig in Kleinbuchstaben eingeben, werden sie nach Verlassen der Zeile darauf aufmerksam gemacht. Sie können schnell erkennen, ob Sie tatsächlich ein vorhandenes Steuerelement verwendet haben. 1.5.5 Verknüpfung von Texten, mehrzeilige Texte + und \n Es können mehrere Texte in einer Ausgabe mithilfe des Zeichens + miteinander verknüpft werden. Falls Sie eine mehrzeilige Ausgabe wünschen, können Sie einen Zeilenvorschub mithilfe des Textes "\n" (für new line) erzeugen. Nachfolgend wird das Projekt Steuerelemente ergänzt um ein Label, in dem die aktuelle Position und Größe des Buttons angezeigt werden. Dies soll nach Betätigung des Buttons Anzeige geschehen: private void cmdanzeige_click(...) lblanzeige.text = "Position: X: " + cmdtest.location.x + ", Y: " + cmdtest.location.y + "\n" + "Größe: Breite: " + cmdtest.size.width + ", Höhe: " + cmdtest.size.height; Listing 1.6 Projekt»Steuerelemente«, mit Anzeige Nach einigen Klicks und der Betätigung des Buttons Anzeige sieht das Formular aus wie in Abbildung 1.18. 38

1.5 Arbeiten mit Steuerelementen 1 Abbildung 1.18 Anzeige der Eigenschaften 1.5.6 Eigenschaft BackColor, Farben allgemein Die Hintergrundfarbe eines Steuerelements wird mit der Eigenschaft Back- Color festgelegt. Dabei können Sie die Farbe zur Entwicklungszeit leicht mithilfe einer Farbpalette oder aus Systemfarben auswählen. Hintergrundfarben und andere Farben können Sie auch zur Laufzeit einstellen. Dabei bedienen Sie sich der Farbwerte, die Sie über die Struktur Color auswählen. BackColor Color Ein Beispiel, ebenfalls im Projekt Steuerelemente: private void cmdfarbe_click(...) BackColor = Color.Yellow; lblanzeige.backcolor = Color.FromArgb(192, 255, 0); Listing 1.7 Projekt»Steuerelemente«, mit Farben Zur Erläuterung: Diese Struktur bietet vordefinierte Farbnamen als Eigenschaften, z. B. Yellow. Der Wert kann der Eigenschaft BackColor des Steuerelements zugewiesen werden, hier ist dies das Formular selbst. Außerdem bietet die Struktur die Methode FromArgb(). Diese können Sie auf verschiedene Arten aufrufen. Eine dieser Arten erwartet genau drei Parameter, nämlich die Werte für Rot, Grün und Blau, jeweils zwischen 0 und 255. FromArgb() Das Formular sieht nach der Änderung der Eigenschaft Farbe aus wie in Abbildung 1.19. 39

1 Einführung Abbildung 1.19 Nach Änderung der Eigenschaft»Farbe«40

Kapitel 11 Beispielprojekte Als weiterführende Übungsaufgaben werden in diesem Kapitel zwei lauffähige Beispielprojekte vorgeführt. Haben Sie den geschilderten Aufbau verstanden, können Sie später eigene Verbesserungen oder Erweiterungen einbringen. Bei den beiden Beispielprojekten handelt es sich zum einen um das bekannte Tetris-Spiel und zum anderen um einen Vokabeltrainer. 11 11.1 Spielprogramm Tetris Im Folgenden wird das bekannte Spielprogramm Tetris in einer vereinfachten, nachvollziehbaren Version für Visual C# realisiert und erläutert. Das Programm beinhaltet: ein zweidimensionales Feld einen Timer einen Zufallsgenerator die Erzeugung und Löschung von Steuerelementen zur Laufzeit die Zuordnung von Ereignismethoden zu Steuerelementen, die erst zur Laufzeit erzeugt werden Abbildung 11.1 zeigt die Benutzeroberfläche des Programms. 11.1.1 Spielablauf Nach Programmstart fällt ein Steuerelement vom Typ Panel in einer von acht möglichen Farben so weit herunter, bis es auf den Rand des Spielfelds oder auf ein anderes Panel trifft. Es kann mithilfe der drei Buttons»Links«(Li),»Rechts«(Re) und»drop«(dr) bewegt werden.»drop«bewirkt ein sofortiges Absenken des Panels auf die unterste mögliche Position. Panel fällt herunter 457

11 Beispielprojekte Abbildung 11.1 Tetris Nächstes Level Ende Falls sich drei gleichfarbige Panels untereinander oder nebeneinander befinden, so verschwinden sie. Panels, die sich eventuell darüber befinden, rutschen nach. Anschließend wird die Fallgeschwindigkeit der Panels erhöht, das heißt, die Schwierigkeitsstufe wird gesteigert, man gelangt zum nächsten Level. Sobald ein Panel nur noch in der obersten Zeile platziert werden kann, ist das Spiel zu Ende. Ziel des Spiels ist es, so viele Panels wie möglich zu platzieren. Mit dem Button Pause kann das Spiel unterbrochen werden, eine erneute Betätigung des Buttons lässt das Spiel weiterlaufen. 11.1.2 Programmbeschreibung Hilfsfeld Der Kasten, in dem sich die fallenden Panels befinden, ist 8 Spalten breit und 13 Zeilen hoch. Als Hilfskonstruktion steht das zweidimensionale Feld F mit 10 Spalten und 15 Zeilen zur Verfügung, in dem jedes existierende Panel mit seiner laufenden Nummer vermerkt ist. 458

11.1 Spielprogramm Tetris Ze / Sp 0 1 2 3 4 5 6 7 8 9 1 2 1 1 1 1 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 3 2 1 1 1 1 1 1 1 1 2 4 2 1 1 1 1 1 1 1 1 2 5 2 1 1 1 1 1 1 1 1 2 6 2 1 1 1 1 1 1 1 1 2 7 2 1 1 1 1 1 1 1 1 2 8 2 1 1 1 1 1 1 1 1 2 9 2 1 1 1 1 1 1 1 1 2 11 10 2 1 1 1 1 1 1 1 1 2 11 2 1 1 1 11 1 1 1 1 2 12 2 1 1 1 3 8 9 1 1 2 13 2 1 0 10 2 4 5 1 1 2 14 2 2 2 2 2 2 2 2 2 2 Tabelle 11.1 Spielfeld Im Beispiel in Tabelle 11.1 wird der Inhalt des Felds F nach den Panels 0 bis 11, also nach zwölf gefallenen Panels angezeigt. Die Panels 1, 6 und 7 hatten die gleiche Farbe, standen über- oder nebeneinander und sind deshalb schon verschwunden. Die Randelemente werden zu Spielbeginn mit dem Wert der Konstanten Rand=-2 besetzt. Alle Elemente des Felds F, die kein Panel enthalten, also leer sind, haben den Wert der Konstanten Leer=-1. 11.1.3 Steuerelemente Es gibt zu Beginn des Programms folgende Steuerelemente: vier Buttons für Links, Rechts, Drop und Pause drei Panels als Begrenzungslinien des Spielfelds 459

11 Beispielprojekte Timer einen Timer, der das aktuelle Panel automatisch weiter fallen lässt (Startwert für den Zeitintervall: 500ms) Im Verlauf des Programms werden weitere Steuerelemente vom Typ Panel hinzugefügt bzw. wieder entfernt. 11.1.4 Initialisierung des Programms Sie müssen die Namensräume System.Collections (für eine ArrayList) und System.Drawing (für Positionsänderungen von Steuerelementen) einbinden. Zu Beginn des Programms werden die klassenweit gültigen Variablen und Konstanten vereinbart und die Form1_Load-Methode durchlaufen: public partial class Form1 : Form... /* Index des aktuellen Panels */ int PX; /* Gesamtes Spielfeld inkl. Randfelder */ int[,] F = new int[15, 10]; /* Zeile und Spalte des aktuellen Panels */ int PZ, PS; /* Schwierigkeitsstufe */ int Stufe; /* Eine zunächst leere Liste von Spiel-Panels */ ArrayList PL = new ArrayList(); /* Ein Feld von Farben für die Panels */ Color[] FarbenFeld = Color.Red, Color.Yellow, Color.Green, Color.Blue, Color.Cyan, Color.Magenta, Color.Black, Color.White; /* Konstanten für Status eines Feldpunktes */ const int Leer = 1; const int Rand = 2; 460

11.1 Spielprogramm Tetris /* Zufallsgenerator erzeugen und initialisieren */ Random r = new Random(); private void Form1_Load(...) int Z, S; /* Feld besetzen */ for (Z=1; Z<14; Z++) F[Z, 0] = Rand; for (S=1; S<9; S++) F[Z, S] = Leer; F[Z, 9] = Rand; 11 for (S=0; S<10; S++) F[14, S] = Rand;... /* Initialisierung */ Stufe = 1; NächstesPanel(); Listing 11.1 Projekt»Tetris«, Variablen, Konstanten, Start Zur Erläuterung der klassenweit gültigen Variablen und Konstanten: Die laufende Nummer (der Index) des aktuell fallenden Panels wird in der Variablen PX festgehalten. Das gesamte Spielfeld, das in Abschnitt 11.1.2 schematisch dargestellt wurde, wird im zweidimensionalen Feld F gespeichert. Die Variablen PZ und PS beinhalten die Zeilen- und Spalten-Position des aktuell fallenden Panels innerhalb des Spielfelds. Die Variable Stufe kennzeichnet den Schwierigkeitsgrad des Spiels. Jedes Mal, wenn drei Panels, die untereinander oder nebeneinander lagen, gelöscht wurden, wird die Stufe um 1 erhöht. Dies sorgt für ein kürzeres Timer-Intervall, die Panels werden schneller. Hilfsfeld Level 461

11 Beispielprojekte Liste von Panels PL ist eine ArrayList von Steuerelementen vom Typ Panel. ArrayLists können beliebige Objekte enthalten. Dies können Variablen, Objekte eigener Klassen oder, wie hier, Steuerelemente, also Objekte vorhandener Klassen, sein. Zu Beginn ist die ArrayList leer. Das Feld FarbenFeld enthält insgesamt acht Farben. Die Farben der Panels werden per Zufallsgenerator ermittelt. Die Konstanten Leer und Rand werden erzeugt. Die Namen der Konstanten sind im Programm leichter lesbar als die Werte 1 bzw. 2. Für die Farbauswahl wird der Zufallsgenerator bereitgestellt. Zur Erläuterung der Form1_Load-Methode: Die Elemente des oben beschriebenen Hilfsfelds F werden mit Leer bzw. Rand besetzt. Die Schwierigkeitsstufe wird auf 1 gesetzt. Erstes Panel Es wird die Methode NächstesPanel() aufgerufen. Sie ist in diesem Fall für die Erzeugung des ersten fallenden Panels zuständig. 11.1.5 Erzeugen eines neuen Panels Die Methode NächstesPanel() dient zur Erzeugung eines neuen fallenden Panels. Dies geschieht zu Beginn des Spiels und nachdem ein Panel auf dem unteren Rand des Spielfelds oder auf einem anderen Panel zum Stehen gekommen ist. Der Code lautet: private void NächstesPanel() int Farbe; Panel p = new Panel(); /* Neues Panel zur ArrayList hinzufügen */ PL.Add(p); /* Neues Panel platzieren */ p.location = new Point(100, 80); p.size = new Size(20, 20); /* Farbauswahl für neues Panel */ Farbe = r.next(0,8); p.backcolor = FarbenFeld[Farbe]; 462

11.1 Spielprogramm Tetris /* Neues Panel zum Formular hinzufügen */ Controls.Add(p); /* Index für späteren Zugriff ermitteln */ PX = PL.Count 1; /* Aktuelle Zeile, Spalte */ PZ = 1; PS = 5; Listing 11.2 Projekt»Tetris«, Methode NächstesPanel Zur Erläuterung: Es wird ein Objekt vom Typ Panel neu erzeugt. 11 Damit darauf auch außerhalb der Methode zugegriffen werden kann, wird ein Verweis auf dieses Panel mithilfe der Methode Add() der Array- List PL hinzugefügt. Es werden die Eigenschaften Ort, Größe und Farbe des neuen Panels bestimmt. Das Panel wird mithilfe der Methode Add() zu der Collection Controls hinzugefügt. Dies ist eine Liste der Steuerelemente des Formulars. Dadurch wird das Panel sichtbar. Seine laufende Nummer (der Index) wird mithilfe der Eigenschaft Count ermittelt. Diese Nummer wird für den späteren Zugriff benötigt. Die Variablen PZ und PS, die die Position des aktuell fallenden Panels im Spielfeld F angeben, werden gesetzt. Neues Listenelement Neues Steuerelement 11.1.6 Der Zeitgeber In regelmäßigen Zeitabständen wird das Timer-Ereignis erzeugt und damit die Ereignismethode timt_tick() aufgerufen. Diese sorgt dafür, dass sich das aktuelle Panel nach unten bewegt, falls dies noch möglich ist: private void timt_tick(...) /* Falls es nicht mehr weiter geht */ if (F[PZ + 1, PS]!= Leer) 463

11 Beispielprojekte /* Oberste Zeile erreicht */ if (PZ == 1) timt.enabled = false; MessageBox.Show("Das war's"); return; F[PZ, PS] = PX; // Belegen AllePrüfen(); NächstesPanel(); else /* Falls es noch weiter geht */ Panel p = (Panel) PL[PX]; p.top = p.top + 20; PZ = PZ + 1; Listing 11.3 Projekt»Tetris«, Zeitgeber Zur Erläuterung: Zunächst wird geprüft, ob sich unterhalb des aktuellen Panels noch ein freies Feld befindet. Ist dies nicht der Fall, so hat das Panel seine Endposition erreicht. Endposition Befindet sich diese Endposition in der obersten Zeile, so ist das Spiel zu Ende. Der Timer wird deaktiviert, anderenfalls würden weitere Panels erzeugt. Es erscheint eine Meldung, und die Methode wird unmittelbar beendet. Will der Spieler erneut beginnen, so muss er das Programm beenden und neu starten. Befindet sich die Endposition nicht in der obersten Zeile, so wird die Panelnummer im Feld F mit der aktuellen Zeile und Spalte vermerkt. Dies dient zur Kennzeichnung eines belegten Feldelements. Prüfen Die Methode AllePrüfen() wird aufgerufen (siehe unten), um festzustellen, ob es drei gleichfarbige Panels über- oder nebeneinander gibt. Anschließend wird das nächste Panel erzeugt. 464

11.1 Spielprogramm Tetris Befindet sich unterhalb des Panels noch ein freies Feld, so kann das Panel weiter fallen. Seine Koordinaten und die aktuelle Zeilennummer werden verändert. Weiter fallen 11.1.7 Panels löschen Die Methode AllePrüfen() ist eine rekursive Methode, mit deren Hilfe festgestellt wird, ob es drei gleichfarbige Panels nebeneinander oder übereinander gibt. Ist dies der Fall, werden diese Panels entfernt und die darüberliegenden Panels rutschen nach. Rekursive Methode Möglicherweise befinden sich nun wieder drei gleichfarbige Panels nebeneinander oder übereinander, es muss also wiederum geprüft werden. Dies geschieht so lange, bis keine drei gleichfarbigen Panels nebeneinander oder übereinander gefunden werden. 11 Die Methode AllePrüfen() bedient sich intern der beiden Methoden Neben- Prüfen() und ÜberPrüfen(): private void AllePrüfen() int Z, S; bool Neben, Über; Neben = false; Über = false; /* Drei gleiche Panels nebeneinander? */ for(z=13; Z>0; Z--) for(s=1; S<7; S++) Neben = NebenPrüfen(Z, S); if (Neben) break; if (Neben) break; /* Drei gleiche Panels übereinander? */ for(z=13; Z>2; Z--) for(s=1; S<9; S++) 465

11 Beispielprojekte Über = ÜberPrüfen(Z, S); if (Über) break; if (Über) break; if (Neben Über) /* Schneller */ Stufe = Stufe + 1; timt.interval = 5000 / (Stufe + 9); /* Eventuell kann jetzt noch eine Reihe entfernt werden */ AllePrüfen(); /* Falls 3 Felder nebeneinander besetzt */ private bool NebenPrüfen(int Z, int S) int ZX, SX; bool ergebnis = false; if (F[Z, S]!= Leer && F[Z, S + 1]!= Leer && F[Z, S + 2]!= Leer) Panel p = (Panel) PL[F[Z, S]]; Panel p1 = (Panel) PL[F[Z, S + 1]]; Panel p2 = (Panel) PL[F[Z, S + 2]]; /* Falls drei Farben gleich */ if (p.backcolor == p1.backcolor && p.backcolor == p2.backcolor) for(sx=s; SX<S+3; SX++) /* PL aus dem Formular löschen */ Control c = (Control) PL[F[Z, SX]]; Controls.Remove(c); 466

11.1 Spielprogramm Tetris /* Feld leeren */ F[Z, SX] = Leer; /* Panels oberhalb des entladenen Panels absenken */ ZX=Z 1; while (F[ZX, SX]!= Leer) Panel px = (Panel) PL[F[ZX, SX]]; px.top = px.top + 20; /* Feld neu besetzen */ F[ZX + 1, SX] = F[ZX, SX]; F[ZX, SX] = Leer; ZX = ZX 1; 11 ergebnis = true; return ergebnis; /* Falls drei Felder übereinander besetzt */ private bool ÜberPrüfen(int Z, int S) int ZX; bool ergebnis = false; if (F[Z, S]!= Leer && F[Z 1, S]!= Leer && F[Z 2, S]!= Leer) Panel p = (Panel) PL[F[Z, S]]; Panel p1 = (Panel) PL[F[Z 1, S]]; Panel p2 = (Panel) PL[F[Z 2, S]]; /* Falls drei Farben gleich */ if (p.backcolor == p1.backcolor && p.backcolor == p2.backcolor) 467

11 Beispielprojekte /* 3 Panels entladen */ for (ZX=Z; ZX>Z-3; ZX--) /* PL aus dem Formular löschen */ Control c = (Control) PL[F[ZX, S]]; Controls.Remove(c); /* Feld leeren */ F[ZX, S] = Leer; ergebnis = true; return ergebnis; Listing 11.4 Projekt»Tetris«, Panels löschen Zur Erläuterung: Die Variablen Neben und Über kennzeichnen die Tatsache, dass drei gleichfarbige Panels neben- oder übereinander gefunden wurden. Sie werden zunächst auf false gesetzt. Nebeneinander Zunächst wird geprüft, ob sich drei gleichfarbige Panels nebeneinander befinden. Dies geschieht, indem für jedes einzelne Feldelement in der Methode NebenPrüfen() geprüft wird, ob es selbst und seine beiden rechten Nachbarn mit einem Panel belegt sind, und ob diese Panels gleichfarbig sind. Die Prüfung beginnt beim Panel unten links und setzt sich bis zum drittletzten Panel der gleichen Zeile fort. Anschließend werden die Panels in der Zeile darüber geprüft usw. Panels löschen Sobald eine Reihe gleichfarbiger Panels gefunden wurde, werden alle drei Panels mithilfe der Methode Remove() aus der Collection der Steuerelemente des Formulars gelöscht, d. h., sie verschwinden aus dem Formular. Ihre Position im Feld F wird mit 1 (= Leer) besetzt. Nun müssen noch alle Panels, die sich eventuell oberhalb der drei Panels befinden, um eine Position abgesenkt werden. Die Variable Neben wird auf true gesetzt. Die doppelte Schleife wird sofort verlassen. Übereinander Analog wird nun in der Methode ÜberPrüfen() geprüft, ob sich drei gleichfarbige Panels übereinander befinden. Ist dies der Fall, so werden 468

11.1 Spielprogramm Tetris sie aus der Collection der Steuerelemente des Formulars gelöscht. Ihre Positionen im Feld F werden mit 1 besetzt. Über den drei Panels können sich keine weiteren Panels befinden, die entfernt werden müssten. Falls durch eine der beiden Prüfungen eine Reihe gefunden und entfernt wurde, so wird die Schwierigkeitsstufe erhöht und das Timer-Intervall verkürzt. Nun muss geprüft werden, ob sich durch das Nachrutschen von Panels wiederum ein Bild mit drei gleichfarbigen Panels über- oder nebeneinander ergeben hat. Die Methode AllePrüfen() ruft sich also so lange selbst auf (rekursive Methode), bis keine Reihe mehr gefunden wird. Rekursiv 11.1.8 Panels seitlich bewegen Mithilfe der beiden Ereignismethoden cmdlinks_click() und cmdrechts_ Click() werden die Panels nach links bzw. rechts bewegt, falls dies möglich ist: private void cmdlinks_click(...) if (F[PZ, PS 1] == Leer) Panel p = (Panel) PL[PX]; p.left = p.left 20; PS = PS 1; private void cmdrechts_click(...) if (F[PZ, PS + 1] == Leer) Panel p = (Panel) PL[PX]; p.left = p.left + 20; PS = PS + 1; 11 Listing 11.5 Projekt»Tetris«, Panels seitlich bewegen Zur Erläuterung: Es wird geprüft, ob sich links bzw. rechts vom aktuellen Panel ein freies Feldelement befindet. Ist dies der Fall, so wird das Panel nach links bzw. rechts verlegt und die aktuelle Spaltennummer verändert. Seitlich 469

11 Beispielprojekte 11.1.9 Panels nach unten bewegen Die Ereignismethode cmdunten_click() dient zur wiederholten Bewegung der Panels nach unten, falls dies möglich ist. Diese Bewegung wird so lange durchgeführt, bis das Panel auf die Spielfeldbegrenzung oder auf ein anderes Panel stößt. Der Code lautet: private void cmdunten_click(...) while (F[PZ + 1, PS] == Leer) Panel p = (Panel) PL[PX]; p.top = p.top + 20; PZ = PZ + 1; F[PZ, PS] = PX; // Belegen AllePrüfen(); NächstesPanel(); Listing 11.6 Projekt»Tetris«, Panels nach unten bewegen Zur Erläuterung: Nach unten Es wird geprüft, ob sich unter dem aktuellen Panel ein freies Feldelement befindet. Ist dies der Fall, so wird das Panel nach unten verlegt und die aktuelle Zeilennummer verändert. Dies geschieht so lange, bis das Panel auf ein Hindernis stößt. Anschließend wird das betreffende Feldelement belegt. Es wird geprüft, ob nun eine neue Reihe von drei gleichfarbigen Panels existiert und das nächste Panel wird erzeugt. 11.1.10 Pause Spiel anhalten Abhängig vom aktuellen Zustand wird durch Betätigen des Buttons Pause in den Zustand Pause geschaltet oder wieder zurück: 470

11.2 Lernprogramm Vokabeln private void cmdpause_click(...) timt.enabled =!timt.enabled; Listing 11.7 Projekt»Tetris«, Pause Zur Erläuterung: Der Zustand des Timers wechselt zwischen Enabled = true und Enabled = false. 11.2 Lernprogramm Vokabeln In diesem Abschnitt wird ein kleines, erweiterungsfähiges Vokabel-Lernprogramm (Projekt Vokabeln) vorgestellt. Es beinhaltet: 11 eine Datenbank als Basis ein Hauptmenü die Nutzung einer ArrayList einen Zufallsgenerator eine Benutzerführung, abhängig vom Programmzustand Lesen einer Textdatei 11.2.1 Benutzung des Programms Nach dem Start erscheint die Benutzeroberfläche, siehe Abbildung 11.2. Abbildung 11.2 Projekt»Vokabeln«, Benutzeroberfläche 471

Index Index!... 55 -... 52 --... 52!=... 54 #... 184, 250 %... 52, 371 %=... 58 &... 56, 134, 293 &&... 55, 74 (int)... 51, 71 *... 52 *=... 57 +... 38, 52, 56 ++... 52 +=... 57, 58 /... 52 /*... 29 //... 29 /=... 58 <... 54, 370 <=... 54, 370 <>... 370 -=... 57 =... 57, 370 ==... 54 >... 54, 370 >=... 54, 370 @... 265 [ ]... 142 [ ] [ ]... 154 [,]... 148 ^... 55, 75, 300 _... 371... 27... 56, 300... 55, 74 1:1-Relation... 348 1:n-Relation... 346, 348 3D-Körper... 499 64-bit-Version... 362, 541 A Abfrage... 355 accdb... 356 Access... 354 2007... 356 2007, ConnectionString... 366 Acos()... 274 Add() ArrayList... 159, 380, 463 Columns... 331 Controls... 463 Datum und Uhrzeit... 253 Documents... 282 Items... 331 Listenfeld... 101 Paragraphs... 282 Series... 334 SubItems... 331 Tables... 283 Worksheets... 284 AddHours()... 253 Addition... 52 AddMilliseconds()... 253 AddMinutes()... 253 AddMonths()... 253 AddSeconds()... 253 AddXY() Points... 334 AddYears()... 253 ADO.NET... 343 Aktionsabfrage... 366 Aktivierungsreihenfolge... 133 Alt-Taste... 134 and... 370 Anführungszeichen... 45 Angle LabelStyle... 335 Animation... 503 Anweisung... 28 im Block... 70 mehrfach durchlaufen... 91 Anwendung abbrechen... 183 567

Index Anwendung (Forts.) weitergeben... 538 Anwendungskonfigurationsdatei... 539 App.config... 539 Append... 260 appsettings... 540 ArcSegment... 498 Arcus Cosinus... 274 Arcus Sinus... 274 Arcus Tangens... 274 args... 185 Argument... 162 beliebig viele... 173 benannt... 171 optional... 170 ArgumentOutOfRangeException... 242 Array, Klasse... 145, 155 ArrayList... 157, 377, 462 füllen... 380 leeren... 380 as... 231 Asin()... 274 asp Calendar... 430 asp Label... 418 ASP.NET... 409 Development Server... 411 Programmierfehler... 416 Atan()... 274 Attached Event... 486 Attached Property... 486 Aufzählung... 49 Ausgabe Dialogfeld... 314 formatieren... 183 mehrzeilig... 38 Auskommentierung... 30 Austauschformat... 237 Auswahlabfrage... 364 Axis... 335 AxisX ChartArea... 335 AxisY ChartArea... 335 B BackColor... 39 base... 210 base()... 214 Basisklasse... 209 Methode erreichen... 210 Bedingung... 69 Befehlsschaltfläche... 21 Bericht... 355 Bezeichnungsfeld... 21 Beziehung... 343, 346 erstellen... 359 Bézier-Kurve... 497 Bild in Zeichnung... 450 Bildlaufleiste... 65 BindingNavigator... 400 BindingSource... 400 Bitmap... 332 body... 414 Bookmarks Document... 283 bool... 42 Border Style... 24 Borders Table... 283 break... 77, 92, 96 Breakpoint... 125 Browser... 409 Brush... 441 Button... 21 byte... 42 C Calendar... 430 Cancel, Eigenschaft... 402 Canvas... 486 Canvas.Left... 486 Canvas.Top... 486 Cascading Style Sheets... 410 case... 77 Cast... 51, 71, 221, 231 catch... 120 Ceiling()... 274 Cell Table... 283 Cells... 340 Worksheet... 285 char... 42, 236 Chart... 332 568

Index ChartAreas Chart... 335 ChartImageFormat... 336 ChartType Series... 334 CheckBox... 80, 425, 488 Checked... 81, 83 in Menü... 295 CheckedChanged... 80, 83 class... 188 Clear()... 380, 447 Series... 334 ClickOnce-Verteilung... 538 Clone()... 146, 219 Close()... 29, 229, 261, 362, 401 Document... 284 Workbook... 285 Code Ansicht... 25 auskommentieren... 30 editieren... 29 Code-Ansicht... 485 Collection... 463 Color... 39, 326, 327, 447 ColorDialog... 326 ColumnIndex... 341 Columns... 338 ListView... 331 COM-Anwendung... 282 Combobox... 110 CommandText... 363 Common Controls... 22 ConfigurationManager... 541 Connection... 363 ConnectionString... 362, 366, 396, 433 Connector/NET... 395 Console... 179 Container... 59, 413 ContextMenuStrip... 300 continue... 92, 96 Controls... 230, 463 Add()... 204 Remove()... 205 ControlToValidate... 425 Convert ToDouble()... 66 ToInt32()... 313 Copies PrinterSettings... 288 Cos()... 274 Cosinus... 274 Count Items... 102 count()... 391 Create... 260, 262 CreateGraphics()... 441 cs-datei... 189 CSS... 410 CSV-Datei... 237 D Data Source... 362, 396 DataBind()... 433 DataContext... 495 DataGrid... 433, 493 DataGridView... 336, 403 Konfigurationsmenü... 405 DataGridViewCellEventArgs... 341 DataGridViewColumnCollection... 338 DataGridViewRowCollection... 338 DataSet... 396 füllen... 402 wurde geändert... 401 zurückschreiben... 402 DataSource... 433 DataTable... 495 Datei... 258 Änderungszeitpunkt... 267 Erzeugungszeitpunkt... 267 Information über... 263, 266 lesen... 259 öffnen... 260 öffnen, Dialog... 320 schließen... 261 speichern, Dialog... 323 Zugriffszeitpunkt... 267 Daten speichern... 258 Datenbank... 343, 493 Anzahl Datensätze... 391 Datensätze gruppieren... 393 erstellen... 356 Navigations-Symbolleiste... 399 Summe über Datensätze... 393 verknüpfte Abfrage... 389, 404 569

Index Datenbankdatei... 355 Datenbanksystem... 346 Datenbindung... 493 Datenfeld... 141 Dimensionsgröße... 148 durchsuchen... 143, 146 dynamisch verändern... 155 eindimensional... 141 initialisieren... 151 Klasse... 145 kopieren... 146 mehrdimensional... 147 nicht rechteckig... 153 Referenz auf... 157 sortieren... 146 übergeben... 164 Verweis auf... 142 verzweigt... 153 Datenkapselung... 189, 212 Datenpuffer... 396 Datenpunkt... 334 Datenquellen anzeigen... 398 Datenreihe... 334 Datensatz... 345 ändern... 373 auswählen... 368 einfügen... 374 löschen... 374 sortieren... 372 Datenträger zum Buch... 535 Datentyp... 42 benutzerdefiniert... 222 DateTimePicker... 255 DateTimePickerFormat... 256 Datum... 250 berechnen... 253 Bestandteil... 251 Datum und Uhrzeit eingeben... 255 Day... 251 DayOfWeek... 51, 251 DayOfYear... 251 Debug... 123 beenden... 67, 119 Debug-Modus... 531 decimal... 42, 71 DecimalPlaces... 68 default... 77 default.aspx... 414 DefaultPageSettings PrinterSettings... 289 Deklaration in Schleife... 95 Delegate... 202 delete... 363 delete from... 374 DeleteCommand... 403 desc... 372 Description... 324 Design-Ansicht... 484 Desktop... 511 Detailtabelle... 348 Dezimaltrennzeichen... 382 Diagramm... 332 DialogResult... 315, 320 DialogResultOk... 322 Directory... 266 Display... 425 DivideByZeroException... 119 Klasse... 122 Division... 52 do while... 95 Documents Application... 282 Doppelklick... 28 double... 42 DrawEllipse()... 446 DrawImage()... 450 DrawLine()... 444 DrawPolygon()... 445 DrawRectangle()... 444 DrawString()... 450 dreidimensionale Grafik... 499 DropDown... 110 DropDownList... 110 DropDownStyle... 110 Druck Einstellungen... 287 Drucken Formular... 285 570

Index E E... 274 Eigenschaft... 188 ändern... 20, 35 statisch... 205 Eigenschaftenfenster... 20, 23, 86 Eigenschaftsmethode... 192 Ein- und Ausgabe nur Text... 179 Eingabe... 65 Dialogfeld... 310 einer Zahl... 180 Eingabeformular... 419 Eingabekontrolle... 422 Einzelschrittverfahren... 123 ElementHost... 508 ElementPosition... 334 Ellipse... 446 else... 70 Enabled... 61, 130, 471 endofdoc Textmarke... 283 Enter... 127 Enumeration... 49 Environment... 326 Equals()... 199 Ereignis... 22, 25 Ansicht... 86 mehrere... 85 Ereigniskette... 135 endlos... 137 Ereignismethode Verweis auf... 202 Ereignisprozedur erzeugen... 486 Eulersche Zahl... 274 Event Routing... 486 Event Trigger... 503 Exception Klasse... 121 Exception Handling... 118 ExecuteNonQuery()... 363, 368 ExecuteReader()... 363 exe-datei... 31, 186 Exists()... 263, 267 Exp()... 274 extensible Application Markup Language... 483 F F11-Taste... 123 F5-Taste... 30 F9-Taste... 125 false... 45 Farbe wählen, Dialog... 326 Fehler... 115 logische... 123 Feld Datenbank... 345 siehe Datenfeld... 141 Feldname... 345 f-format... 44 File... 263, 266 FileMode... 260 FileNames... 321 FileStream... 259 FileSystemEntries()... 267 Fill()... 402 FillEllipse()... 446 FillPolygon()... 445 FillRectangle()... 444 Filter... 320 firma.mdb... 361 Fixed Single... 24 float... 42 Floor()... 274 FolderBrowserDialog... 324 Font... 249, 296, 327 Font.Style... 300 FontDialog... 327 FontFamily... 299 FontStyle.Bold... 300 FontStyle.Italic... 300 for... 92 foreach... 160 Form... 19 PrintForm... 287 form... 422 Form_Activated... 129 Form_Load... 101 Format DateTimePicker... 255 Format()... 248 571

Index FormatException... 119 Klasse... 122 Formatvorlage... 410 FormClosing... 401 FormClosingEventArgs... 401 Formular... 19, 355 aktivieren... 129 anzeigen... 229 drucken... 285 hinzufügen... 227 löschen... 536 mehrere... 226 schließen... 401 wird geladen... 101 Formularansicht... 25 Formularvorlage... 536 Fortschrittsbalken... 308 Frame Navigate()... 520 Page... 520, 523 Frames... 490 FromArgb()... 39 FromFile()... 450 Bitmap... 332 FromPage PrinterSettings... 288 FullRowSelect ListView... 331 Funktion zeichnen... 454 Funktion, mathematische... 273 G GDI+... 441 get-accessor... 193 GetCreationTime()... 267 GetCurrentDirectory()... 267 GetFiles()... 267 GetLastAccessTime()... 267 GetLastWriteTime()... 267 GetType()... 201 GetUpperBound()... 148 Gleich... 54, 370 Gleichheitszeichen... 28, 57 goto case... 77 Grafik... 496, 499 Graphics... 441 Grid... 492 Größer als... 54, 370 group by... 393 Groupbox... 88 Gültigkeitsbereich... 45, 163 H Haltepunkt... 125 entfernen... 125 HasChanges()... 401 Hauptmenü... 291, 471 head... 413 Headertext... 339 Height... 35 Hilfslinien... 32 Hilfstabelle... 347 Hoch... 274 Hour... 251 HTML... 409 html... 413 HTML-Markierung... 413 Hyperlink... 493 I ICloneable... 219 id... 415 if... 70 IIS... 411 Image... 303, 331, 450 ImageList... 331 Implementation... 218 Imports... 281, 286 Increment... 68 Index... 142 Datenbank... 343, 347 eindeutig... 347 index.htm... 412 IndexOf()... 146, 239 IndexOfAny()... 239 IndexOutOfRangeException... 143 Initial Catalog... 396 InitialDirectory... 320 InitializeComponent()... 27 Inkonsistenz... 345 input... 422 InputBox()... 310 572

Index insert... 363 insert into... 374 Insert()... 105, 242 ArrayList... 159 InsertCommand... 403 InsertParagraphAfter() Range... 282 InsideLineStyle Borders... 283 Installationsdatei... 535 Installationsprogramm... 538 Instanziierung... 191 int... 42 Integrität referentielle... 360 IntelliSense... 116 Interaction... 311 Interface... 218, 219 Internet Information Services... 411 Internet-Anwendung... 409 Daten senden... 419 dynamisch... 410 erstellen... 412 Internet-Datenbank... 431 ändern... 434 Internetseite formatieren... 417 Interval... 62, 309 is... 202 IsLoaded... 490 IsPostBack... 421 IsValid... 425 Item Bookmarks... 283 Items... 101 ListView... 331 ItemsSource... 494 Iterator... 161 J Jahr... 251 JavaScript... 410 K Kachel... 511 Kalender... 428 Kamera... 501 Klammer geschweift... 27, 70, 92 rund... 58 Klasse... 27 abgeleitet... 209 Definition... 188 ermitteln... 201, 202 statisches Element... 205 Klassenhierarchie... 208 Kleiner als... 54, 370 Kombinationsfeld... 110 in Menü... 293 Kommandozeile... 186 Kommandozeilenparameter... 184 Kommentarzeile... 29 Konfigurationsdaten... 539 Konfigurations-Manager... 531 Konsolenanwendung... 178 Konstante... 48 integriert... 48 Konstruktor... 194, 212 Kontextmenü... 300 Kontrollkästchen... 80 in Menü... 293 Kontrollstruktur... 69 Koordinatensystem... 499 Kreiszahl... 274 L Label... 21, 488 LabelStyle Axis... 335 LargeImageList ListView... 331 LastIndexOf()... 239 Laufbedingung... 92 Laufzeitfehler... 118 Layout... 484 Legends Chart... 334 Length... 234 Licht... 501 like... 371 LineSegment... 498 Linie... 444 ListBox... 101, 489 573

Index ListBoxItem... 490 Listenansicht mit Bild... 329 Listenfeld... 101 ListView... 329 ListViewItem... 331 localhost... 413 Location... 35, 60 Log()... 274 Log10()... 274 Logarithmus... 274 Lokal... 45 long... 42 M m:n-relation... 349 Main()... 178 MainPage... 514, 524 MainWindow.xaml... 484 MainWindow.xaml.cs... 487 Margin... 486 Markierungssprache... 409 Mastertabelle... 348 Material... 501 Math... 273 MaxDate DateTimePicker... 257 Maximum... 68, 143, 309 MaxLength... 65 MaxSize... 327 Me... 287 Mehrfachauswahl... 33, 76, 109 Mehrfachvererbung... 218 Menü... 291 MenuStrip... 291 MeshGeometry3D... 501 Message... 121 MessageBox... 314 MessageBoxButtons... 315 MessageBoxIcon... 315 Methode... 161, 188 gekapselt... 27 mit Rückgabewert... 168 ohne Ereignis... 90 ohne Rückgabewert... 27 statisch... 205 überladen... 196 Methode (Forts.) verdecken... 210 verlassen... 162 m-format... 44 Microsoft.ACE.OLEDB.12.0... 362 Microsoft.Interop.Excel... 280 Microsoft.Interop.Word... 280 Microsoft.VisualBasic... 310 Microsoft.VisualBasic.PowerPacks. Printing... 286 Microsoft.VisualBasic.PowerPacks.Vs... 285 Millisecond... 251 Millisekunde... 251 MinDate DateTimePicker... 257 Minimum... 68, 143, 309 MinSize... 327 Minute... 251 Modal... 229 Modularisierung... 91, 161 Modulo... 52 Monat... 251 Month... 251 MS Excel Arbeitsmappe erstellen... 284 MS Office... 280 MS Word Dokument erstellen... 281 MultiExtended... 109 MultiLine... 65 Multiplikation... 52 MultiSelect... 320 MySQL... 394 MySQL.Data... 395 MySqlClient... 396 MySqlCommand... 396 MySqlConnection... 396 MySqlDataReader... 396 N Nachkommastellen... 44, 68 Name... 23 Namenskonvention... 23, 38 Namensraum... 27 importieren... 281, 286 namespace... 27 574

Index NameValueCollection... 541 Navigate() Frame... 520 NavigationWindow... 491 NET-Treiber... 395 new... 36, 142, 191, 210 new line... 38 Next()... 96 NextDouble()... 154 Nicht-Operator... 55 Nicht-proportionale Schriftart... 248 not... 370 Now... 250 NumericUpDown... 68 O object... 42, 199, 307 Objekt... 191 erzeugen... 194 identisch... 200 Verweis auf... 142 Objekthierarchie MS Office... 280 Objektorientierung... 187 Objektverweis... 197 dasselbe Objekt... 198 vergleichen... 368 Oder-Operator... 55 Öffnungsmodus... 260 OleDb... 363 OleDbAdapter... 495 OleDbCommand... 363 OleDbCommandBuilder... 495 OleDbConnection... 362, 495 OleDbReader... 363 OnSelectionChanged... 431 Open... 260 Open()... 362 OpenFileDialog... 320 Operator... 51 für Berechnungen... 52 logisch... 55, 370 Priorität... 58 Rangfolge... 58 Vergleich... 54 Zuweisung... 57 option... 428 Optionsschaltfläche... 83 mehrere Gruppen... 87 or... 370 order by... 372 out... 164 OutsideLineStyle Borders... 283 override... 216 P Page... 415, 491, 514 Frame... 520, 523 Page_Load... 415 Page-Direktive... 415 Paint-Ereignis... 452 PaintEventArgs... 453 Panel... 59, 457 PaperSize DefaultPageSettings... 289 Paragraphs Document... 282 Parameter... 162 beliebig viele... 173 benannt... 171 optional... 170 params... 173 partial... 27 PasswordChar... 65 Passwort-Abfrage... 65 Path... 498 PathFigure... 496 PathGeometry... 496 Peek()... 261 Pen... 441 Pfadangabe relativ... 265 Pfadgeometrie... 496 PI... 274 Pinsel... 441 Farbe... 447 Pixel... 35 Platzhalter... 371 Point... 36, 445, 455 Points Series... 334 Polygon... 445 Polymorphie... 215 575

Index Position Legends... 334 Pow()... 274 Primärindex... 347 Primärschlüssel erstellen... 358 Print() PrintForm... 287 Printing... 336 PrintAction PrintForm... 287 PrinterName PrinterSettings... 289 PrinterSettings PrintForm... 288 PrintForm... 287 Printing Chart... 336 PrintingManager Chart... 336 PrintPreview() Printing... 336 private... 27, 46 Program.cs... 178 Programm beenden... 30 starten... 30 testen... 31 Programmierung clientseitig... 410 ereignisgesteuert... 135 serverseitig... 410 ProgressBar... 308 Projekt Datenbank hinzufügen... 397 neu erzeugen... 484 neues... 19, 512 öffnen... 31 schließen... 31 speichern... 25 Verweis hinzufügen... 395 Projektmappen-Explorer... 20 Alles anzeigen... 280 Projektvorlage... 512, 537 Blank... 513 Grid... 526 Split... 529 Properties Window... 20 property... 193 protected... 212 Provider... 362 public... 27, 46, 190, 212 Q Quit() Application... 284, 285 R Radio-Button... 83, 425 Random... 96 Range Document... 282 Rangfolge... 54 Read()... 366 Reader... 363 ReadLine()... 179, 261 Rechenoperator... 52 Rechteck... 444 Rectangle... 444 Redundanz... 345 ref... 157, 164, 197 ReferenceEquals()... 198, 307, 368 Referenztyp... 198 Rekursion... 175 Relation... 346 erstellen... 359 relational... 343 Release-Modus... 531 Remove()... 243, 468 ArrayList... 159 RemoveAt()... 105, 479 ArrayList... 159 Replace()... 247, 382 RequiredFieldValidator... 425 Resize() Array... 155 Ressource... 503 return... 162 mit Rückgabewert... 168 Ringtausch... 165 RootFolder... 324 Rotationstransformation... 503 Round()... 274 RowIndex... 341 576

Index Rows... 338 Rückgabewert... 168 runat... 415 runden... 274 S SampleDataSource.cs... 528 SaveAs() Document... 284 Workbook... 285 SaveFileDialog... 323 SaveImage() Chart... 336 Schalter... 80 Schleife... 91 Endlos-... 95, 98 geschachtelt... 148 mit Bedingung... 96 nächster Durchlauf... 92 verlassen... 92 Schleifenvariable... 92 Schnittstelle... 218 Schrift... 296 auswählen... 327 Schriftart... 296 nicht-proportional... 248 Schriftgröße... 298 Schriftstil... 299 Schrittweite... 68 script... 415 Scrollbalken... 101 ScrollBars... 65, 302 Second... 251 Seiten in Frames... 490 Seitenvorlage... 518 Elementdetails... 527 Elemente... 530 Geteilte Seite... 530 Gruppendetails... 526 Gruppierte Elemente... 526 Standardseite... 524 Sekundärindex... 347 Sekunde... 251 select... 363, 365, 368, 428 SelectAll()... 140 Selected DataGridView... 339 SelectedDate... 430 SelectedIndex... 102, 299 SelectedIndexChanged... 104 SelectedIndices... 109 SelectedItem... 102 SelectedItems... 109 SelectedPath... 325 SelectionMode... 109, 110 Semikolon... 237 sender... 307 Separator... 293 Series Chart... 334 SeriesChartType... 334 Server-Steuerelement... 417, 428 set-accessor... 193 SetCurrentDirectory()... 267 Setup-Datei... 535 short... 42 Show()... 314 ShowColor... 327 ShowDialog()... 229, 320 ShowNewFolderButton... 324 Simple... 110 Sin()... 274 Sinus... 274 Size... 35, 37, 297 Slider... 489 sln-datei... 31 SmallImageList ListView... 331 SolidBrush... 443 Solution Explorer... 20 Sort()... 146 SpecialFolder... 326 Spin-Button... 257 SplashScreen... 513 Split()... 237 SQL... 362 typische Fehler... 374 Sqrt()... 274 StackPanel... 486 Startausdruck... 92 Startbildschirm... 511 Startformular... 537 Startmethode... 178 577

Index Startparameter... 184 Startzustand... 24 static... 206 Statusleiste... 307 StatusStrip... 307 Steuerelement Abstand einstellen... 33 aktivieren... 61, 130 ausrichten... 33 auswählen... 22 Collection von... 230 einfügen... 21 Größe... 35 Hintergrundfarbe... 39 Kontextmenü... 300 kopieren... 34 Liste von... 463 markieren... 33 Position... 35, 60 sichtbar... 130 zur Laufzeit erzeugen... 202, 457 zur Laufzeit löschen... 457, 468 Steuerelemente... 487 Stift... 441 Dicke... 447 Farbe... 447 Storyboard... 503 StreamReader... 259 StreamWriter... 261 Strg+C... 183 Strg+F5... 180 String... 233 string... 42 struct... 223 Structured Query Language... 362 Struktur... 42, 222 Stunde... 251 Style... 297, 299 SubItems ListViewItem... 331 submit... 422 Substring()... 245 Subtract()... 255 Subtraktion... 52 sum()... 393 Summe berechnen... 97 SupportsColor PrinterSettings... 289 switch... 76 Symbolleiste... 303 Syntaxfehler... 115 System.Collections... 157 System.Collections.Specialized... 541 System.Configuration... 540 System.Data.OleDb... 433 System.Drawing... 460 System.Drawing.Printing... 286 System.IO... 259, 474 Systemton... 316, 319, 320 T Tabelle... 355 darstellen... 336 Tabellenausgabe... 248 Tabellenentwurf... 357 TabIndex... 133 TableAdapter... 400 TableAdapterManager... 400 Tables Document... 283 Tablet-PC... 511 TabStop... 134 Tag der Woche... 251 Tag des Jahres... 251 Tag des Monats... 251 Tan()... 274 Tangens... 274 Tastaturbedienung... 133 Tasten-Key... 503 Tastenkombination... 134 Tetris... 457 Text... 23, 65, 235 in Zeichnung... 449 mehrzeilig... 65 Range... 282 umwandeln... 66 verketten... 56 TextBox... 488 TextBox in Menü... 293 TextChanged... 132, 243, 299 Textfeld... 65 alles auswählen... 140 Änderung... 132 kopieren... 65 koppeln... 139 578

Index this... 190, 229 TimeOfDay... 251 Timer... 61, 309, 457 TimeSpan... 253 Title (C#)... 320 title (HTML)... 413 TitleAlignment Axis... 335 Today... 250 TodayDayStyle... 431 ToDouble()... 66 ToInt32()... 313 Toolbox... 20 ToolStrip... 303 ToPage PrinterSettings... 288 ToShortDateString()... 380, 430 Touchscreen... 511 Transformation... 503 Trennzeichen... 237 Trim()... 236 TrimEnd()... 236 TrimStart()... 236 true... 45 Truncate()... 274 try... 120 Typ ermitteln... 201, 202 Type Converter... 485 typeof... 201 typeof()... 520 U Übergabe Ausgabeparameter... 164 per Referenz... 164, 198 per Wert... 163 Überladen... 196 Überschreiben... 216 Überwachungsfenster... 125 Uhrzeit... 250, 251 berechnen... 253 UID... 396 Umwandlung in ganze Zahl... 313 in Zahl... 66 Und-Operator... 55 Ungleich... 54, 370 Unterformular... 226 Untermenü... 291 Unterstrich (Platzhalter)... 371 update... 363, 368, 373 Update()... 402 UpdateCommand... 403 Up-Down-Button... 257 using... 27, 363 V Validate()... 425 Validierung... 422 Value... 68, 309, 340, 421 DateTimePicker... 257 value... 193 ValueChanged... 68 DateTimePicker... 258 values... 374 Variable... 41 ausblenden... 46 Gültigkeitsbereich... 41 Kontrolle... 125 Name... 41 öffentlich... 46 Startwert... 47 Verbindung Datenbank... 362 Vererbung... 208 Vergleichsoperator... 370 Verknüpfung... 346 erstellen... 359 Verweis... 191 auf Ereignismethode... 202 hinzufügen... 280, 285 umwandeln... 231 Verweistyp... 164 Verzeichnis Datei- und Verzeichnisliste... 267 Dateiliste... 267 ermitteln... 267 Existenz... 267 Information über... 266 setzen... 267 wählen, Dialog... 324 wechseln... 272 Verzweigung... 69 579

Index Vieleck... 445 Vielgestaltigkeit... 215 View ListView... 329 virtual... 216 Visible... 130 Application... 282, 284 Vista... 362, 541 void... 27 Vokabel-Lernprogramm... 471 Vorlage WPF-Anwendung... 484 W Wahrheitswert... 82 WdLineStyle... 283 WdWindowState... 282 Webserver... 410 lokaler... 411 WeekendDayStyle... 431 Werkzeugsammlung... 20 Wertebereich... 44 Werttyp... 164, 198 Struktur... 222 where... 369 while... 95 Width... 35, 447 Window... 485 Windows 8... 483, 511 Windows App Cert Kit... 531 Windows Forms in WPF... 506 Windows Phone... 511 Windows Presentation Foundation 483 Windows Store-App beenden... 513 Navigation... 519, 522 prüfen... 531 Styles... 515 Windows Store-Apps... 511 WindowsFormsHost... 506 WindowState Application... 282, 284 Wochentag... 251 Worksheets Application... 284 WPF... 483 WPF in Windows Forms... 508 WPF-Buch... 484 WrapPanel... 488 Write()... 179, 262 WriteLine()... 179, 184, 262 Wurzel... 274 X x Class... 485 Name... 486 X (Location)... 35 XAML... 483 mit Programmiercode... 484 XlWindowState... 284 XML-Datei... 539 xmlns x=http... 485 Y Y (Location)... 35 Year... 251 Z Zahlenauswahlfeld... 68, 243 Zeichen prüfen... 261 Zeichenkette... 42, 233 durchsuchen... 239 einfügen... 242 ersetzen... 247 Index... 236 Länge... 234 löschen... 244 mit Backslash... 265 Teilzeichenkette... 245 trimmen... 236 zerlegen... 237 Zeichnen... 441 dauerhaft... 452 Zeichnung löschen... 447 580

Index Zeile lesen... 261 Zeilenumbruch... 38 Regeln... 32 Zeit... 250 Zeitgeber... 61 Zeitintervall... 253 Zufallsgenerator... 96, 142, 457, 471 Zuweisung... 28 Zweidimensionale Grafik... 496 581