einstieg in visual c# 2012 - s3-eu-west-1.amazonaws.com · einstieg in visual c# 2012. auf einen...

67
Thomas Theis Einstieg in Visual C# 2012

Upload: others

Post on 02-Sep-2019

9 views

Category:

Documents


0 download

TRANSCRIPT

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

5

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

Inhalt

6

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

Inhalt

7

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

Inhalt

8

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

Inhalt

9

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

Inhalt

10

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

Inhalt

11

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

Inhalt

12

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

Inhalt

13

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

Inhalt

14

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

Inhalt

15

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

17

1Kapitel 1

Einführung

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#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.

1.1 Aufbau dieses Buches

BeispieleDieses Buch vermittelt Ihnen zunächst einen einfachen Einstieg in die Pro-

grammierung 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 Wei-

termachen motivieren. In späteren Kapiteln werden Ihnen auch die kom-

plexen Themen vermittelt.

GrundlagenVon Anfang an wird mit anschaulichen Windows-Anwendungen gearbei-

tet. Die Grundlagen der Programmiersprache und die Standardelemente

einer Windows-Anwendung, wie Sie sie schon von anderen Windows-Pro-

grammen her kennen, werden gemeinsam vermittelt. Die Anschaulichkeit

einer Windows-Anwendung hilft dabei, den eher theoretischen Hinter-

grund der Programmiersprache leichter zu verstehen.

1 Einführung

18

1.2 Visual Studio 2012

Express Edition Es werden mehrere Express-Versionen von Visual Studio 2012 unter Win-

dows 7 mit Service Pack 1 und unter Windows 8 eingesetzt. Diese freien Ver-

sionen 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 komfor-

table Entwicklungsumgebung. Sie umfassen einen Editor zur Erstellung des

Programmcodes, einen Compiler zur Erstellung der ausführbaren Pro-

gramme, einen Debugger zur Fehlersuche und vieles mehr.

Auf dem Datenträger zum Buch finden Sie die folgenden Express-Versio-

nen von Visual Studio 2012, mit unterschiedlichen Einsatzbereichen:

� Visual Studio Express 2012 für Desktop zur Programmierung der Win-

dows 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 Inter-

net-Anwendungen mit C# in Kapitel 9.

� Visual Studio Express 2012 für Windows 8 zur Programmierung der Win-

dows-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 die-

ses 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 not-

wendig sind. Das Programm soll nach dem Aufruf zunächst aussehen wie in

Abbildung 1.1.

1.4 Visual C# 2012-Entwicklungsumgebung

19

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 Stu-

dio 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, die-

ser sollte geändert werden, zum Beispiel in MeinErstes.

Es erscheinen einige Elemente der Entwicklungsumgebung. Folgende Ele-

mente sind besonders wichtig:

Form� Das Benutzerformular (engl.: Form) enthält die Oberfläche für den

Benutzer des Programms (siehe Abbildung 1.3).

1 Einführung

20

Abbildung 1.3 Benutzerformular

Toolbox � Die Werkzeugsammlung (engl.: Toolbox) enthält die Steuerele-

mente für den Benutzer, mit denen er den Ablauf des Programms steu-

ern kann. Sie werden vom Programm-Entwickler in das Formular

eingefügt (siehe Abbildung 1.4).

Abbildung 1.4 Toolbox mit verschiedenen Kategorien von Steuerelementen

Eigenschaften-

fenster� 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.

Projektmappen-

Explorer� Der Projektmappen-Explorer (engl.: Solution Explorer) zeigt das

geöffnete Projekt und die darin vorhandenen Elemente (siehe Abbil-

dung 1.6).

1.4 Visual C# 2012-Entwicklungsumgebung

21

1

Abbildung 1.5 Eigenschaftenfenster

Abbildung 1.6 Projektmappen-Explorer

Sollten die Toolbox, das Eigenschaftenfenster oder der Projektmap-

pen-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 emp-

fiehlt sich, das Eigenschaftenfenster nach oben zu vergrößern.

1.4.2 Einfügen von Steuerelementen

Label, ButtonZunä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

1 Einführung

22

Texte auf der Benutzeroberfläche anzuzeigen. In diesem Programm soll das

Label einen Text anzeigen. Ein Button dient zum Starten bestimmter Pro-

grammteile 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

SteuerelementeUm ein Steuerelement einzufügen, ziehen Sie es mithilfe der Maus von der

Toolbox an die gewünschte Stelle im Formular. Alle Steuerelemente fin-

den 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ählenEin 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.

1.4 Visual C# 2012-Entwicklungsumgebung

23

11.4.3 Arbeiten mit dem Eigenschaftenfenster

Die eingefügten Steuerelemente haben zunächst einheitliche Namen und

Aufschriften, diese sollten Sie allerdings zur einfacheren Programment-

wicklung ändern. Es haben sich bestimmte Namenskonventionen einge-

bürgert, die die Lesbarkeit erleichtern. Diese Namen beinhalten den Typ

(mit drei Buchstaben abgekürzt) und die Aufgabe des Steuerelements (mit

großem Anfangsbuchstaben).

cmd, txt, lbl, ...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 (Optionsschalt-

fläche/RadioButton), frm (Formular/Form) und chk (Kontrollkästchen/

CheckBox).

Zur Änderung des Namens eines Steuerelements muss es zunächst ausge-

wählt werden. Das können Sie entweder durch Anklicken des Steuerele-

ments auf dem Formular oder durch Auswahl aus der Liste am oberen Ende

des Eigenschaftenfensters tun.

Eigenschaften-

fensterIm 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.

Abbildung 1.9 Button, nach der Namensänderung

TextDie 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

1 Einführung

24

und die Aufschrift des Formulars sollten geändert werden. Im Folgenden

sind die gewünschten Eigenschaften für die Steuerelemente dieses Pro-

gramms in Tabellenform angegeben, siehe Tabelle 1.1.

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 gege-

benenfalls 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

SteuerelementeSie 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 Steuer-

elemente des gleichen Typs stehen direkt untereinander.

Typ Eigenschaft Einstellung

Formular Text Mein erstes Programm

Button Name cmdHallo

Text Hallo

Button Name cmdEnde

Text Ende

Label Name lblAnzeige

Text (leer)

BorderStyle FixedSingle

Tabelle 1.1 Steuerelemente mit Eigenschaften

1.4 Visual C# 2012-Entwicklungsumgebung

25

1

Abbildung 1.10 Label, nach der Änderung von Name und BorderStyle

1.4.4 Speichern eines Projekts

Alles speichernDie 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 regel-

mäßigen Abständen durchführen, damit keine Änderungen verloren

gehen können.

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

EreignisDer 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 Programm-

code und ordnet diesen Code dem Ereignis zu. Der Code wird in einer Ereig-

nismethode abgelegt.

EreignismethodeZum Schreiben einer Ereignismethode führen Sie am besten einen Dop-

pelklick auf das betreffende Steuerelement aus. Es erscheint das Codefens-

ter. Zwischen der Formularansicht und der Codeansicht können Sie

1 Einführung

26

anschließend über die Menüpunkte Ansicht • Code bzw. Ansicht • Desi-

gner 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 Code-

fenster 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.

1.4 Visual C# 2012-Entwicklungsumgebung

27

1� Zunächst das Wichtigste: Innerhalb der geschweiften Klammern { } der

Ereignismethode cmdHallo_Click() wird später Ihr eigener Programm-

code hinzugefügt.

Zu den anderen Bestandteilen (die für das eigene Programmieren erst spä-

ter wichtig sind):

Namensraum� C# ist eine objektorientierte Sprache. Ein wichtiges Element objektorien-

tierter Sprachen sind Klassen. Klassen eröffnen weitere Programmier-

möglichkeiten. Namensräume beinhalten zusammengehörige Klassen.

using� 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.

namespace� Dieses erste Projekt verfügt über einen eigenen Namensraum (engl.

namespace), daher namespace MeinErstes.

public partial class� 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 auto-

matisch 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 sor-

gen.

private void� 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.

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)

1 Einführung

28

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 Pro-

grammcodes 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 Ver-

stä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 Der Inhalt einer Methode setzt sich aus einzelnen Anweisungen zusam-

men, die nacheinander ausgeführt werden. Die vorliegende Methode ent-

hält nur eine Anweisung; in ihr wird mithilfe des Gleichheitszeichens eine

Zuweisung durchgeführt.

Zuweisung Bei einer Zuweisung wird der Ausdruck rechts vom Gleichheitszeichen aus-

gewertet und der Variablen, der Objekt-Eigenschaft oder der Steuer-

element-Eigenschaft links vom Gleichheitszeichen zugewiesen. Die Zei-

chenkette Hallo wird der Eigenschaft Text des Steuerelements lblAnzeige

mithilfe der Schreibweise Steuerelement.Eigenschaft = Wert zugewiesen.

Dies führt zur Anzeige des Werts.

1.4 Visual C# 2012-Entwicklungsumgebung

29

1Nach dem Wechsel auf die Formularansicht können Sie das nächste Steuer-

element auswählen, für das eine Ereignismethode geschrieben werden soll.

Code editierenInnerhalb des Codefensters kann Text mit den gängigen Methoden der

Textverarbeitung editiert, kopiert, verschoben und gelöscht werden.

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«

Close()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.

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 Eigen-

schaftenfenster 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äu-

tert, damit Sie selbst oder auch ein anderer Programmierer sie später leich-

ter verstehen. Alle Zeichen innerhalb eines Kommentars werden nicht

übersetzt oder ausgeführt.

/* Kommentar */Ein Kommentar beginnt mit der Zeichenkombination /*, endet mit der Zei-

chenkombination */ und kann sich über mehrere Zeilen erstrecken.

// KommentarEine andere Möglichkeit ergibt sich durch die Zeichenkombination //. Ein

solcher Kommentar erstreckt sich nur bis zum Ende der Zeile.

Der folgende Programmcode wurde um einen Kommentar ergänzt:

1 Einführung

30

private void cmdEnde_Click(object sender, EventArgs e)

{/* Diese Anweisung beendet

das Programm */Close();

}

Listing 1.4 Projekt »MeinErstes«, Button »Ende«, mit Kommentar

Code

auskommentierenEin kleiner Trick: Sollen bestimmte Programmzeilen für einen Test des Pro-

gramms kurzfristig nicht ausgeführt werden, können Sie sie auskommentie-

ren, 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 Nach dem Einfügen der Steuerelemente und dem Erstellen der Ereignisme-

thoden 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.

Programm beenden Zur regulären Beendigung eines Programms ist der Button mit der Auf-

schrift 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.

Fehler Tritt während der Ausführung eines Programms ein Fehler auf, so werden Sie

hierauf hingewiesen, und das Codefenster zeigt die entsprechende Ereignis-

methode sowie die fehlerhafte Zeile an. In diesem Fall beenden Sie das Pro-

gramm, korrigieren Sie den Code und starten Sie das Programm wieder.

1.4 Visual C# 2012-Entwicklungsumgebung

31

1Programm testenEs ist empfehlenswert, das Programm bereits während der Entwicklung

mehrmals durch Aufruf zu testen und nicht erst, wenn das Programm voll-

ständig erstellt worden ist. Geeignete Zeitpunkte sind zum Beispiel:

� nach dem Einfügen der Steuerelemente und dem Zuweisen der Eigen-

schaften, die Sie zu Programmbeginn benötigen

� nach dem Erstellen jeder Ereignismethode

1.4.9 Ausführbares Programm

.exe-DateiNach 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.

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

Projekt schließenSie können ein Projekt schließen über den Menüpunkt Datei • Projekt-

mappe schliessen. Falls Sie Veränderungen vorgenommen haben, wer-

den Sie gefragt, ob Sie diese Änderungen speichern möchten.

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.

Projekt öffnenZum Öffnen eines vorhandenen Projekts wählen Sie den Menüpunkt

Datei • Projekt öffnen. Im darauf folgenden Dialogfeld Projekt öff-

nen wählen Sie zunächst das gewünschte Projektverzeichnis aus und

anschließend die gleichnamige Datei mit der Endung .sln.

1.4.11 Übung

Übung ÜNameErstellen Sie ein Windows-Programm mit einem Formular, das zwei But-

tons und ein Label beinhaltet, siehe Abbildung 1.13. Bei Betätigung des ers-

1 Einführung

32

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 Zeichen-

kette 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 auto-

matisch Hilfslinien, falls das aktuelle Element horizontal oder vertikal pa-

rallel zu einem anderen Element steht.

1.5 Arbeiten mit Steuerelementen

33

1Mehrere Steuer-

elemente markierenWeitere Möglichkeiten bieten die Menüpunkte im Menü Format. In vielen

Fällen müssen vorher mehrere Steuerelemente auf einmal markiert wer-

den, siehe Abbildung 1.14.

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.

Menü »Format«Über das Menü Format haben Sie anschließend folgende Möglichkeiten

zur Anpassung der Steuerelemente:

� 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).

Einheitliche

Abstände� Die horizontalen und vertikalen Abstände zwischen den ausgewählten

Steuerelementen können angeglichen, vergrößert, verkleinert oder ent-

fernt werden (Menü Format • Horizontaler Abstand/Vertikaler

Abstand).

� Die Steuerelemente können horizontal oder vertikal innerhalb des For-

mulars zentriert werden (Menü Format • auf Formular zentrieren).

1 Einführung

34

� Sollten sich die Steuerelemente teilweise überlappen, können Sie ein-

zelne Steuerelemente in den Vorder- bzw. Hintergrund schieben (Menü

Format • Reihenfolge).

� Sie können alle Steuerelemente gleichzeitig gegen versehentliches Ver-

schieben 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 ausgerich-

tet 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

kopierenZur schnelleren Erzeugung eines Projekts können vorhandene Steuerele-

mente 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 umbe-

nennen und an der gewünschten Stelle anordnen.

1.5 Arbeiten mit Steuerelementen

35

1Übung

Laden Sie das Projekt MeinErstes aus Abschnitt 1.3 und kopieren Sie

einzelne Steuerelemente. Kontrollieren Sie anschließend die Liste der vor-

handenen Steuerelemente im Eigenschaftenfenster auf einheitliche

Namensgebung.

1.5.3 Eigenschaften zur Laufzeit ändern

Size, LocationSteuerelemente 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.

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 Änderun-

gen während der Laufzeit soll das folgende Programm (Projekt Steuerele-

mente) 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,

1 Einführung

36

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 Übersichtlich-

keit 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 bereitzu-

stellen.

1.5 Arbeiten mit Steuerelementen

37

1X, Y� 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

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.Loca-

tion.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.

Size� Zur Einstellung der Größe dient die Struktur Size.

Width, Height� Bei Betätigung des Buttons Grösse Abs wird die Größe des fünften But-

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 But-

tons 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 eige-

nen, 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-

1 Einführung

38

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 ver-

wendet haben.

1.5.5 Verknüpfung von Texten, mehrzeilige Texte

+ und \n Es können mehrere Texte in einer Ausgabe mithilfe des Zeichens + mitein-

ander 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 For-

mular aus wie in Abbildung 1.18.

1.5 Arbeiten mit Steuerelementen

39

1

Abbildung 1.18 Anzeige der Eigenschaften

1.5.6 Eigenschaft BackColor, Farben allgemein

BackColorDie 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.

ColorHintergrundfarben und andere Farben können Sie auch zur Laufzeit ein-

stellen. Dabei bedienen Sie sich der Farbwerte, die Sie über die Struktur

Color auswählen.

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.

FromArgb()� 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.

Das Formular sieht nach der Änderung der Eigenschaft Farbe aus wie in

Abbildung 1.19.

1 Einführung

40

Abbildung 1.19 Nach Änderung der Eigenschaft »Farbe«

457

11

Kapitel 11

Beispielprojekte

Als weiterführende Übungsaufgaben werden in diesem Kapitel zwei lauf-

fä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.1 Spielprogramm Tetris

Im Folgenden wird das bekannte Spielprogramm Tetris in einer vereinfach-

ten, 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

Panel fällt herunterNach 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.

11 Beispielprojekte

458

Abbildung 11.1 Tetris

Nächstes Level 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.

Ende 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 plat-

zieren. 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.

11.1 Spielprogramm Tetris

459

11

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

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

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

11 Beispielprojekte

460

Timer � einen Timer, der das aktuelle Panel automatisch weiter fallen lässt (Start-

wert 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;

11.1 Spielprogramm Tetris

461

11

/* 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;

}

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.

Hilfsfeld� 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.

Level� 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.

11 Beispielprojekte

462

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 vorhande-

ner 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 Konstan-

ten 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];

11.1 Spielprogramm Tetris

463

11

/* 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.

Neues Listen-

element� 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.

Neues Steuer-

element� 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.

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)

11 Beispielprojekte

464

{/* Oberste Zeile erreicht */if (PZ == 1){

timT.Enabled = false;MessageBox.Show("Das war's");return;

}

F[PZ, PS] = PX; // BelegenAllePrü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 festzustel-

len, ob es drei gleichfarbige Panels über- oder nebeneinander gibt.

Anschließend wird das nächste Panel erzeugt.

11.1 Spielprogramm Tetris

465

11

Weiter fallen� Befindet sich unterhalb des Panels noch ein freies Feld, so kann das Panel

weiter fallen. Seine Koordinaten und die aktuelle Zeilennummer werden

verändert.

11.1.7 Panels löschen

Rekursive MethodeDie Methode AllePrüfen() ist eine rekursive Methode, mit deren Hilfe fest-

gestellt wird, ob es drei gleichfarbige Panels nebeneinander oder überein-

ander gibt. Ist dies der Fall, werden diese Panels entfernt und die

darüberliegenden Panels rutschen nach.

Möglicherweise befinden sich nun wieder drei gleichfarbige Panels neben-

einander oder übereinander, es muss also wiederum geprüft werden. Dies

geschieht so lange, bis keine drei gleichfarbigen Panels nebeneinander oder

übereinander gefunden werden.

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++){

11 Beispielprojekte

466

Ü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 Reiheentfernt 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);

11.1 Spielprogramm Tetris

467

11

/* Feld leeren */F[Z, SX] = Leer;

/* Panels oberhalb des entladenenPanels 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;

}

}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)

11 Beispielprojekte

468

{

/* 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 rech-

ten Nachbarn mit einem Panel belegt sind, und ob diese Panels gleichfar-

big 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 Steuer-

elemente des Formulars gelöscht, d. h., sie verschwinden aus dem For-

mular. 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

11.1 Spielprogramm Tetris

469

11

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.

Rekursiv� 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.

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;

}}

Listing 11.5 Projekt »Tetris«, Panels seitlich bewegen

Zur Erläuterung:

Seitlich� 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.

11 Beispielprojekte

470

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 ande-

res 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; // BelegenAllePrü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:

11.2 Lernprogramm Vokabeln

471

11

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-Lern-

programm (Projekt Vokabeln) vorgestellt. Es beinhaltet:

� 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

Index

567

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

Index

568

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

Index

569

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

Index

570

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

Index

571

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

Index

572

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

Index

573

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

Index

574

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

Index

575

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

Index

576

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

Index

577

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

Index

578

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

Index

579

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

Index

580

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

Index

581

Zeile

lesen ........................................................ 261

Zeilenumbruch .......................................... 38

Regeln ....................................................... 32

Zeit ............................................................... 250

Zeitgeber ....................................................... 61

Zeitintervall .............................................. 253

Zufallsgenerator ........... 96, 142, 457, 471

Zuweisung .................................................... 28

Zweidimensionale Grafik ................... 496