Wissen, wie’s geht. Leseprobe Wenn Sie auf schnelle und praktische Weise lernen möchten, wie Sie Windows-Programme mit C# entwickeln, sind Sie hier genau richtig. Dieser Buchauszug zeigt, wie Sie Visual Studio installieren und für Ihre Projekte einrichten. Außerdem machen Sie sich mit Variablen und Operatoren vertraut. »Visual Studio 2017 installieren« »Variablen, Operatoren, Steuerelemente« »Lösungen der Übungsaufgaben« Inhaltsverzeichnis Index Der Autor Leseprobe weiterempfehlen Thomas Theis Einstieg in C# mit Visual Studio 2017 – Ideal für Programmiereinsteiger 549 Seiten, broschiert, 5. Auflage 2017 29,90 Euro, ISBN 978-3-8362-4493-0 www.rheinwerk-verlag.de/4351 Kapitel 1 Einführung 1 In diesem Kapitel erlernen Sie anhand eines ersten Projekts den Umgang mit der Entwicklungsumgebung und den Steuerelementen. Anschließend werden Sie in der Lage sein, Ihr erstes eigenes Windows-Programm zu erstellen. C# ist eine objektorientierte Programmiersprache, die von Microsoft im Zusammenhang mit dem .NET Framework eingeführt wurde. Mithilfe der Entwicklungsumgebung Visual Studio 2017 können Sie u. a in der Sprache C# programmieren. Visual Studio 2017 ist der Nachfolger von Visual Studio 2015. Innerhalb von Visual Studio stehen Ihnen noch weitere Sprachen zur Programmentwicklung zur Verfügung. C# 1.1 Aufbau dieses Buchs Dieses Buch vermittelt Ihnen zunächst einen einfachen Einstieg in die Programmierung mit C# und Visual Studio 2017. Die Bearbeitung der Beispiele und das selbstständige Lösen der vorliegenden Übungsaufgaben helfen dabei. Dadurch werden Sie schnell erste Erfolgserlebnisse haben, die Sie zum Weitermachen motivieren. In späteren Kapiteln werden Ihnen anschließend auch komplexere Themen vermittelt. Beispiele Von Anfang an wird mit anschaulichen Windows-Anwendungen gearbeitet. Die Grundlagen der Programmiersprache und die Standardelemente einer Windows-Anwendung, wie Sie sie bereits von anderen Windows-Programmen her kennen, werden gemeinsam vermittelt. Die Anschaulichkeit einer Windows-Anwendung hilft dabei, den eher theoretischen Hintergrund der Programmiersprache leichter zu verstehen. Grundlagen 15 1 1.4 Einführung Visual Studio-Entwicklungsumgebung 1.2 Visual Studio 2017 Community-Version Für dieses Buch wird die frei verfügbare Entwicklungsumgebung Visual Studio Community 2017 eingesetzt. Sie können sie unter Windows 7 bis einschließlich Windows 10 nutzen. Diese Version von Visual Studio können Sie bei Microsoft herunterladen (www.visualstudio.com/de-de) und auf Ihrem PC installieren. Eine Installationsanleitung finden Sie im Anhang. Die Projekte in diesem Buch wurden unter Windows 10 bearbeitet. Auch die Screenshots sind unter dieser Windows-Version entstanden. Visual Studio 2017 bietet eine komfortable Entwicklungsumgebung. Sie umfasst einen Editor zur Erstellung des Programmcodes, einen Compiler zur Erstellung der ausführbaren Programme, einen Debugger zur Fehlersuche und vieles mehr. Noch eine Anmerkung in eigener Sache: Für die Hilfe bei der Erstellung dieses Buchs bedanke ich mich beim Team des Rheinwerk Verlags, besonders bei Anne Scheibe. Thomas Theis 1.3 Mein erstes Windows-Programm Anhand eines ersten Projekts werden Sie nun die verschiedenen Schritte durchlaufen, die zur Erstellung eines einfachen Programms mit C# in Visual Studio notwendig sind. Das Programm soll nach dem Aufruf zunächst so aussehen wie in Abbildung 1.1 gezeigt. 1 Abbildung 1.2 Nach einem Klick auf den Button »Hallo« 1.4 Visual Studio-Entwicklungsumgebung Während der Projekterstellung werden Sie die Visual Studio-Entwicklungsumgebung Schritt für Schritt kennenlernen. 1.4.1 Ein neues Projekt Nach dem Aufruf des Programms Visual Studio Community 2017 müssen Sie zur Erstellung eines neuen C#-Projekts den Menüpunkt Datei • Neu • Projekt ausführen. Anschließend wählen Sie in der Kategorie Installiert • Vorlagen • Visual C# die Vorlage Windows Forms-App aus. Als Projektname bietet die Entwicklungsumgebung den Namen WindowsFormsApp1 an, dieser sollte geändert werden, zum Beispiel in MeinErstes. Nach Betätigung der Schaltfläche OK erscheinen nun einige Elemente der Entwicklungsumgebung. Folgende sind besonders wichtig: 왘 Das Benutzerformular (engl. Form) enthält die Oberfläche für den Benutzer des Programms (siehe Abbildung 1.3). Form Abbildung 1.1 Erstes Programm nach dem Aufruf Abbildung 1.3 Benutzerformular Nach Betätigung des Buttons Hallo soll sich der Text in der obersten Zeile entsprechend verändern (siehe Abbildung 1.2). 16 왘 Der Werkzeugkasten (engl. Toolbox) enthält die Steuerelemente für den Benutzer, mit denen er den Ablauf des Programms steuern kann. Sie Toolbox 17 1 1.4 Einführung Visual Studio-Entwicklungsumgebung werden vom Programmentwickler in das Formular eingefügt (siehe Abbildung 1.4). Sollten in der Toolbox keine Steuerelemente angezeigt werden, klicken Sie einmal auf das Benutzerformular und anschließend wieder auf die Toolbox. Weitere Registerkarten, zum Beispiel ServerExplorer und Datenquellen, werden nicht benötigt und können jeweils über das Kreuz oben rechts ausgeblendet werden. 1 Abbildung 1.6 Projektmappen-Explorer Abbildung 1.4 Der »Werkzeugkasten« mit verschiedenen Kategorien von Steuerelementen EigenschaftenFenster 왘 Das Eigenschaften-Fenster (engl. Properties Window) dient dem Anzeigen und Ändern der Eigenschaften von Steuerelementen innerhalb des Formulars durch den Programmentwickler (siehe Abbildung 1.5). Ich empfehle Ihnen, sich die Eigenschaften in alphabetischer Reihenfolge anzeigen zu lassen. Betätigen Sie dazu einfach unter Form1 das zweite Symbol von links. Sollte der Werkzeugkasten, das Eigenschaften-Fenster oder der Projektmappen-Explorer nicht angezeigt werden, können Sie das betreffende Element über das Menü Ansicht einblenden. Ist das Formular nicht sichtbar, blenden Sie es einfach über einen Doppelklick auf den Namen (Form1.cs) im Projektmappen-Explorer ein. Sollten die Eigenschaften eines Steuerelements nicht im bereits sichtbaren Eigenschaften-Fenster angezeigt werden, markieren Sie zunächst den Namen der Formulardatei (Form1.cs) im Projektmappen-Explorer und anschließend das betreffende Steuerelement. Elemente anzeigen Anfangs schreiben Sie nur einfache Programme mit wenigen Elementen, daher benötigen Sie den Projektmappen-Explorer jetzt noch nicht. Es empfiehlt sich, das Eigenschaften-Fenster nach oben zu vergrößern. 1.4.2 Einfügen von Steuerelementen Abbildung 1.5 Eigenschaften-Fenster ProjektmappenExplorer 18 왘 Der Projektmappen-Explorer (engl. Solution Explorer) zeigt das geöffnete Projekt und die darin vorhandenen Elemente (siehe Abbildung 1.6). Zunächst sollen drei Steuerelemente in das Formular eingefügt werden: ein Bezeichnungsfeld (Label) und zwei Befehlsschaltflächen (Buttons). Ein Bezeichnungsfeld dient im Allgemeinen dazu, feste oder veränderliche Texte auf der Benutzeroberfläche anzuzeigen. In diesem Programm soll das Label einen Text anzeigen. Ein Button dient zum Starten bestimmter Programmteile oder, allgemeiner ausgedrückt, zum Auslösen von Ereignissen. In diesem Programm sollen die Buttons dazu dienen, den Text anzuzeigen bzw. das Programm zu beenden. Label, Button Um ein Steuerelement einzufügen, ziehen Sie es mithilfe der Maus aus dem Werkzeugkasten an die gewünschte Stelle im Formular. Alle Steuerelemente finden sich im Werkzeugkasten unter Alle Windows Forms. Allgemeine Steuerelemente 19 1 1.4 Einführung Übersichtlicher ist jedoch der Zugriff über Allgemeine Steuerelemente (engl. Common Controls), siehe Abbildung 1.7. Visual Studio-Entwicklungsumgebung fangsbuchstaben). Aus den Namen der Steuerelemente ergeben sich auch die Namen der sogenannten Ereignisprozeduren, ebenfalls mit großem Anfangsbuchstaben, siehe Abschnitt 1.4.5. Seit Visual Studio 2017 wird stärker auf die Einhaltung der Namenskonventionen geachtet. Ein Button (eigentlich Command Button), der die Anzeige der Zeit auslösen soll, wird beispielsweise mit CmdZeit bezeichnet. Weitere Vorsilben sind Txt (Textfeld/TextBox), Lbl (Bezeichnungsfeld/Label), Opt (Optionsschaltfläche/RadioButton), Frm (Formular/Form) und Chk (Kontrollkästchen/ CheckBox). Abbildung 1.7 »Allgemeine Steuerelemente« im »Werkzeugkasten« Steuerelement auswählen Ein Doppelklick auf ein Steuerelement im Werkzeugkasten fügt es ebenfalls in die Form ein. Position und Größe des Elements können anschließend 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. 1 Cmd, Txt, Lbl, ... Zur Änderung des Namens eines Steuerelements muss es zunächst ausgewählt werden. Das können Sie entweder durch Anklicken des Steuerelements auf dem Formular oder durch Auswahl desselben aus der Liste am oberen Ende des Eigenschaften-Fensters tun. Im Eigenschaften-Fenster werden alle Eigenschaften des ausgewählten Steuerelements angezeigt. Die Liste ist zweispaltig: In der linken Spalte steht der Name der Eigenschaft, in der rechten ihr aktueller Wert. Die Eigenschaft (Name) steht am Anfang der Liste der Eigenschaften. Die betreffende Zeile wählen Sie durch Anklicken aus und geben hier den neuen Namen ein. Nach Bestätigung mit der Taste (¢) ist die Eigenschaft geändert (siehe Abbildung 1.9). EigenschaftenFenster Abbildung 1.8 Ausgewählter Button Die Größe und andere Eigenschaften des Formulars selbst können Sie ebenfalls verändern. Dazu wählen Sie es vorher durch Anklicken einer freien Stelle im Formular aus. Abbildung 1.9 Button nach der Namensänderung 1.4.3 Arbeiten mit dem Eigenschaften-Fenster Die eingefügten Steuerelemente haben zunächst einheitliche Namen und Aufschriften, diese sollten Sie allerdings zur einfacheren Programmentwicklung ändern. Es gibt bestimmte Namenskonventionen, die die Lesbarkeit erleichtern: Die Namen beinhalten den Typ (mit drei Buchstaben abgekürzt) und die Aufgabe des Steuerelements (jeweils mit großem An- 20 Die Aufschrift von Buttons, Labels und Formularen ist in der Eigenschaft Text angegeben. Sobald diese Eigenschaft verändert wird, erscheint die veränderte Aufschrift in dem betreffenden Steuerelement. Auch der Name und die Aufschrift des Formulars sollten geändert werden. Im Folgenden sind die gewünschten Eigenschaften für die Steuerelemente dieses Programms in Tabellenform angegeben, siehe Tabelle 1.1. Text 21 1 1.4 Einführung Typ Eigenschaft Einstellung Formular Text Mein erstes Programm Button Name CmdHallo Text Hallo Name CmdEnde Text Ende Name LblAnzeige Text (leer) BorderStyle FixedSingle Button Label Tabelle 1.1 Steuerelemente mit Eigenschaften Startzustand Hiermit legen Sie den Startzustand fest, also die Eigenschaften, welche die Steuerelemente zu Beginn des Programms bzw. eventuell während des gesamten Programms haben sollen. Viele Eigenschaften können Sie auch noch während der Laufzeit des Programms durch den Programmcode verändern. Bei einem Label ergibt die Einstellung der Eigenschaft BorderStyle auf FixedSingle einen Rahmen. Zur Änderung auf FixedSingle klappen Sie die Liste bei der Eigenschaft auf und wählen den betreffenden Eintrag aus, siehe Abbildung 1.10. Zur Änderung einiger Eigenschaften müssen Sie gegebenenfalls ein Dialogfeld aufrufen. Visual Studio-Entwicklungsumgebung Im Label soll zunächst der Text (leer) erscheinen. Hierzu wählen Sie den vorhandenen Text durch Anklicken aus und ändern ihn. Sie finden alle in diesem Formular vorhandenen Steuerelemente in der Liste, die sich am oberen Ende des Eigenschaften-Fensters öffnen lässt. Dabei zeigt sich ein Vorteil der einheitlichen Namensvergabe: Die Steuerelemente des gleichen Typs stehen immer direkt untereinander. 1 Liste der Steuerelemente 1.4.4 Speichern eines Projekts Die Daten eines C#-Projekts werden innerhalb von Visual Studio in verschiedenen Dateien gespeichert. Zum Speichern des gesamten Projekts verwenden Sie den Menüpunkt Datei • Alles Speichern. Diesen Vorgang sollten Sie in regelmäßigen Abständen durchführen, damit keine Änderungen verloren gehen können. Alles speichern Die in diesem Skript angegebenen Namen erleichtern eine schnelle und eindeutige Orientierung und das spätere Auffinden von älteren Programmen. 1.4.5 Das Codefenster Der Ablauf eines Windows-Programms wird im Wesentlichen durch das Auslösen von Ereignissen durch den Benutzer gesteuert. Er löst z. B. die Anzeige des Texts Hallo aus, indem er auf den Button Hallo klickt. Der Entwickler muss dafür sorgen, dass aufgrund dieses Ereignisses auch tatsächlich der gewünschte Text angezeigt wird. Zu diesem Zweck schreibt er Programmcode und ordnet diesen Code dem Ereignis zu. Der Code wird in einer so genannten Ereignismethode abgelegt. Ereignis Zum Schreiben einer Ereignismethode führen Sie am besten einen Doppelklick auf dem betreffenden Steuerelement aus. Daraufhin erscheint das Codefenster. Zwischen der Formularansicht und der Codeansicht können Sie anschließend über die Menüpunkte Ansicht • Code bzw. Ansicht • Designer hin- und herschalten. Das ist auch über die Registerkarten oberhalb des Formulars bzw. des Codefensters möglich (siehe Abbildung 1.11). Ereignismethode Abbildung 1.10 Label nach der Änderung von Name und BorderStyle 22 23 1 1.4 Einführung Visual Studio-Entwicklungsumgebung Zu den anderen Bestandteilen (die erst später für das eigene Programmieren wichtig werden): Abbildung 1.11 Registerkarten Nach erfolgtem Doppelklick auf den Button Hallo erscheinen im Codefenster die folgenden Einträge: using System; 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: 왘 Grundsätzlich gilt, dass Sie sich nicht von der Vielzahl der automatisch erzeugten Zeilen und den noch unbekannten Inhalten abschrecken lassen sollten. 왘 Zunächst das Wichtigste: Innerhalb der geschweiften Klammern { } der Ereignismethode CmdHallo_Click() wird später Ihr eigener Programmcode hinzugefügt. 24 1 왘 C# ist eine objektorientierte Sprache. Ein wichtiges Element objektorientierter Sprachen sind die so genannten Klassen. Klassen eröffnen weitere Programmiermöglichkeiten. Namensräume wiederum beinhalten zusammengehörige Klassen. Namensraum 왘 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. using 왘 Seit der Version 2015 von Visual Studio werden solche überflüssigen Elemente in grauer Schriftfarbe dargestellt. Falls sich der Cursor in einer der betreffenden Zeilen befindet, erscheint links von der Zeile eine gelbe Glühbirne. Platzieren Sie den Mauszeiger über dieser Glühbirne, können Sie sich Hinweise dazu anzeigen lassen, wie die überflüssigen Elemente ganz entfernt werden können. 왘 Oberhalb von public partial class ... und von private void ... erscheinen außerdem seit Visual Studio 2015 automatisch weitere Informationen zur Klasse Form1 und ihren Elementen in kleiner grauer Schrift, wie zum Beispiel 0 references oder 3 references. Auch diese können wir zunächst noch ignorieren. namespace 왘 Dieses erste Projekt verfügt über einen eigenen Namensraum (engl. namespace), daher namespace MeinErstes. 왘 Alle Elemente des aktuellen Formulars Form1 stehen innerhalb der öffentlich zugänglichen Klasse Form1, daher public class Form1. Ein Teil der Elemente steht in dieser Datei, ein anderer Teil, der ebenfalls automatisch erzeugt wurde, steht in einer anderen, hier nicht sichtbaren Datei, daher der Zusatz partial (dt. teilweise). public partial class 왘 Die Methode InitializeComponent() beinhaltet Programmzeilen, die das Aussehen und Verhalten der Steuerelemente des Programms bestimmen. 왘 Der Zusatz private bedeutet, dass die Ereignismethode CmdHalloClick() nur in dieser Klasse bekannt ist. Mit void wird gekennzeichnet, dass diese Methode lediglich etwas ausführt, aber kein Ergebnis zurückliefert. private void 25 1 1.4 Einführung Click 왘 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. kette Hallo wird der Eigenschaft Text des Steuerelements LblAnzeige mittels folgender Schreibweise Steuerelement.Eigenschaft = Wert zugewiesen. Das führt zur Anzeige des Werts. Der anfänglich ausgeführte Doppelklick führt immer zu dem Ereignis, das am häufigsten mit dem betreffenden Steuerelement verbunden wird. Nach dem Wechsel auf die Formularansicht können Sie das nächste Steuerelement auswählen, für das eine Ereignismethode geschrieben werden soll. Das ist beim Button natürlich das Ereignis Click. Zu einem Steuerelement gibt es aber auch noch andere mögliche Ereignisse. Innerhalb des Codefensters kann Text mit den gängigen Methoden der Textverarbeitung editiert, kopiert, verschoben und gelöscht werden. Bei den nachfolgenden Programmen werden nicht mehr alle Teile des Programmcodes im Buch abgebildet, sondern nur noch In der Ereignismethode CmdEnde_Click() soll der folgende Code stehen: 왘 die Teile, die vom Entwickler per Codeeingabe erzeugt werden, 왘 und die Teile des automatisch erzeugten Codes, die wichtig für das allgemeine Verständnis sind. Den vollständigen Programmcode können Sie aber jederzeit betrachten, wenn Sie die Beispielprojekte laden bzw. ausprobieren. 1.4.6 Schreiben von Programmcode In der Methode CmdHallo_Click() soll eine Befehlszeile eingefügt werden, sodass sie anschließend wie folgt aussieht: private void CmdHallo_Click(object sender, EventArgs e) { LblAnzeige.Text = "Hallo"; } Listing 1.2 Projekt »MeinErstes«, Button »Hallo«, mit Code Der Text muss in Anführungszeichen gesetzt werden, da C# sonst annimmt, dass es sich um eine Variable mit dem Namen Hallo handelt. Anweisung Zuweisung 26 Visual Studio-Entwicklungsumgebung Der Inhalt einer Methode setzt sich aus einzelnen Anweisungen zusammen, die nacheinander ausgeführt werden. Die vorliegende Methode enthält nur eine Anweisung; in ihr wird mithilfe des Gleichheitszeichens eine Zuweisung durchgeführt. Bei einer Zuweisung wird der Ausdruck rechts vom Gleichheitszeichen ausgewertet und der Variablen, der Objekteigenschaft oder der Steuerelementeigenschaft links vom Gleichheitszeichen zugewiesen. Die Zeichen- 1 Code editieren private void CmdEnde_Click(object sender, EventArgs e) { Close(); } Listing 1.3 Projekt »MeinErstes«, Button »Ende« Die Methode Close() dient dem Schließen eines Formulars. Da es sich um das einzige Formular dieses Projekts handelt, wird dadurch das Programm beendet und die gesamte Windows-Anwendung geschlossen. Close() Dies waren einige Beispiele zur Änderung der Eigenschaften eines Steuerelements zur Laufzeit des Programms durch Programmcode. Sie erinnern sich: Zu Beginn hatten wir bereits die Starteigenschaften der Steuerelemente im Eigenschaften-Fenster eingestellt. 1.4.7 Kommentare Bei längeren Programmen mit vielen Anweisungen gehört es zum guten Programmierstil, Kommentarzeilen zu schreiben. In diesen Zeilen werden einzelne Anweisungen oder auch längere Blöcke von Anweisungen erläutert, damit Sie selbst oder auch ein anderer Programmierer sie später leichter nachvollziehen können. Alle Zeichen innerhalb eines Kommentars werden nicht übersetzt oder ausgeführt. Ein Kommentar beginnt mit der Zeichenkombination /*, endet mit der Zeichenkombination */ und kann sich über mehrere Zeilen erstrecken. /* Kommentar */ Eine andere Möglichkeit ergibt sich durch die Zeichenkombination //. Ein solcher Kommentar erstreckt sich nur bis zum Ende der Zeile. // Kommentar 27 1 1.4 Einführung Der folgende Programmcode wird um einen Kommentar ergänzt: private void CmdEnde_Click(object sender, EventArgs e) { /* Diese Anweisung beendet das Programm */ Close(); } Listing 1.4 Projekt »MeinErstes«, Button »Ende«, mit Kommentar Code auskommentieren Hier noch ein kleiner Trick: Sollen bestimmte Programmzeilen für einen Test des Programms kurzfristig nicht ausgeführt werden, können Sie sie auskommentieren, indem Sie die Zeichenkombination // vor die betreffenden Zeilen setzen. Das geht sehr schnell, indem Sie die betreffende(n) Zeile(n) markieren und anschließend das entsprechende Symbol in der Symbolleiste anklicken, siehe Abbildung 1.12. Rechts daneben befindet sich das Symbol, welches die Auskommentierung nach dem Test wieder rückgängig macht. Abbildung 1.12 Kommentar ein/aus Visual Studio-Entwicklungsumgebung Tritt während der Ausführung eines Programms ein Fehler auf, werden Sie hierauf hingewiesen, und das Codefenster zeigt die entsprechende Ereignismethode sowie die fehlerhafte Zeile an. In diesem Fall beenden Sie das Programm, korrigieren den Code und starten das Programm wieder. Fehler Es ist empfehlenswert, das Programm bereits während der Entwicklung mehrmals durch einen Aufruf zu testen und nicht erst, wenn das Programm vollständig erstellt worden ist. Ein geeigneter Zeitpunkt dazu ergibt sich zum Beispiel Programm testen 1 왘 nach dem Einfügen der Steuerelemente und dem Zuweisen der Eigenschaften, die Sie zu Programmbeginn benötigen, oder 왘 nach dem Erstellen jeder Ereignismethode. 1.4.9 Ausführbares Programm Nach erfolgreichem Test des Programms können Sie die ausführbare Datei (.exe-Datei) auch außerhalb der Entwicklungsumgebung aufrufen. Haben Sie an den Grundeinstellungen nichts verändert und die vorgeschlagenen Namen verwendet, findet sich die zugehörige .exe-Datei des aktuellen Projekts im Verzeichnis Dokumente\Visual Studio 2017\Projects\MeinErstes\MeinErstes\bin\Debug. Das Programm kann also ganz normal im Windows-Explorer direkt über Doppelklick gestartet werden. .exe-Datei Die Weitergabe eines eigenen Windows-Programms auf einen anderen PC ist etwas aufwendiger. Dieser Vorgang wird im Anhang beschrieben. 1.4.8 Starten, Ausführen und Beenden des Programms Programm starten Programm beenden 28 Nach dem Einfügen der Steuerelemente und dem Erstellen der Ereignismethoden ist das Programm fertig und kann gestartet werden. Dazu betätigen Sie den Start-Button in der Symbolleiste (dreieckiger grüner Pfeil nach rechts). Alternativ starten Sie das Programm über die Funktionstaste (F5) oder den Menüpunkt Debuggen • Debugging Starten. Das Formular erscheint, und das Betätigen der Buttons führt zum programmierten Ergebnis. Zur regulären Beendigung eines Programms ist der Button mit der Aufschrift Ende vorgesehen. Möchten Sie ein Programm während des Verlaufs vorzeitig abbrechen, können Sie auch den Ende-Button in der Symbolleiste (rotes Quadrat) betätigen. 1.4.10 Schließen und Öffnen eines Projekts Um ein Projekt zu schließen, wählen Sie den Menüpunkt Datei • Projektmappe schliessen. Falls Sie Veränderungen vorgenommen haben, werden Sie vorher gefragt, ob Sie diese Änderungen speichern möchten. Projekt schließen Wollen Sie die Projektdaten sicherheitshalber zwischendurch speichern, ist das über den Menüpunkt Datei • Alles speichern möglich. Das ist bei längeren Entwicklungsphasen sehr zu empfehlen. Zum Öffnen eines vorhandenen Projekts wählen Sie den Menüpunkt Datei • öffnen • Projekt. Im darauffolgenden Dialogfeld Projekt öffnen wählen Sie zunächst das gewünschte Projektverzeichnis aus und anschließend die gleichnamige Datei mit der Endung .sln. Projekt öffnen 29 1 1.5 Einführung Alle Beispielprojekte finden Sie auf www.rheinwerk-verlag.de/4351 unter »Materialien zum Buch« zum Download. Sollte eines der Projekte einmal nicht gestartet werden können, sollten Sie es über den Menüpunkt Erstellen • Projektmappe neu erstellen neu erstellen. 1.4.11 Übung Übung UName Erzeugen Sie ein Windows-Programm mit einem Formular, das zwei Buttons und ein Label beinhaltet (siehe Abbildung 1.13). Bei Betätigung des ersten Buttons erscheint im Label Ihr Name. Bei Betätigung des zweiten Buttons wird das Programm beendet. Namensvorschläge: Projektname UName, Buttons CmdMeinName und CmdEnde, Label LblMeinName. Arbeiten mit Steuerelementen 1.5 Arbeiten mit Steuerelementen 1 1.5.1 Steuerelemente formatieren Zur besseren Anordnung der Steuerelemente auf dem Formular können Sie sie mithilfe der Maus nach Augenmaß verschieben. Dabei erscheinen automatisch Hilfslinien, falls das aktuelle Element horizontal oder vertikal parallel zu einem anderen Element steht. Hilfslinien Weitere Möglichkeiten bieten die Menüpunkte im Menü Format. In vielen Fällen müssen vorher mehrere Steuerelemente auf einmal markiert werden (siehe Abbildung 1.14). Mehrere Steuerelemente markieren Abbildung 1.13 Übung UName Zeilenumbruch 1.4.12 Empfehlungen für Zeilenumbrüche Abbildung 1.14 Mehrere markierte Elemente Zeilenumbrüche erhöhen die Lesbarkeit des Programmcodes. Sie können jedoch nicht an jeder Stelle innerhalb einer Anweisung durchgeführt werden. Nachfolgend werden einige Stellen empfohlen: Das geschieht entweder 왘 nach einer öffnenden Klammer (wie bereits gezeigt), 왘 vor einer schließenden Klammer, 왘 nach einem Komma, 왘 nach einem Operator und 30 왘 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. 왘 nach einem Punkt hinter einem Objektnamen. Über das Menü Format haben Sie anschließend folgende Möglichkeiten zur Anpassung der Steuerelemente: Falls Sie einen Zeilenumbruch innerhalb einer Zeichenkette durchführen, werden seit Visual Studio 2017 zur Fehlervermeidung beide Teile der Zeichenkette automatisch durch Anführungszeichen begrenzt und durch den Verkettungsoperator + (siehe Abschnitt 2.2.4) miteinander verbunden. 왘 Die ausgewählten Steuerelemente können horizontal oder vertikal zueinander ausgerichtet werden (Menü Format • Ausrichten). Menü »Format« 왘 Auch die horizontalen und/oder vertikalen Dimensionen der ausgewählten Steuerelemente können angeglichen werden (Menü Format • Grösse angleichen). 31 1 1.5 Einführung Einheitliche Abstände Arbeiten mit Steuerelementen 왘 Zudem können die horizontalen und vertikalen Abstände zwischen den ausgewählten Steuerelementen angeglichen, vergrößert, verkleinert oder entfernt werden (Menü Format • Horizontaler Abstand/Vertikaler Abstand). 왘 über das Menü Bearbeiten • Kopieren und das Menü Bearbeiten • Einfügen oder 왘 Die Steuerelemente können außerdem horizontal oder vertikal innerhalb des Formulars zentriert werden (Menü Format • auf Formular zentrieren). Anschließend sollten Sie die neu erzeugten Steuerelemente direkt umbenennen und an den gewünschten Positionen anordnen. 왘 Sollten sich die Steuerelemente teilweise überlappen, können Sie einzelne Steuerelemente in den Vorder- bzw. Hintergrund schieben (Menü Format • Reihenfolge). 왘 Sie können alle Steuerelemente gleichzeitig gegen versehentliches Verschieben absichern (Menü Format • Steuerelemente Sperren). Diese Sperrung gilt nur während der Entwicklung des Programms. Abbildung 1.15 zeigt ein Formular mit drei Buttons, die alle linksbündig ausgerichtet sind und den gleichen vertikalen Abstand voneinander haben. Übung Laden Sie das Projekt MeinErstes aus Abschnitt 1.3, markieren Sie darin mehrere Steuerelemente, und testen Sie anschließend die einzelnen Möglichkeiten des Format-Menüs aus. 1 왘 mit den Tastenkombinationen (Strg) + (C) und (Strg) + (V). Übung Laden Sie das Projekt MeinErstes aus Abschnitt 1.3 und kopieren Sie einzelne Steuerelemente. Kontrollieren Sie anschließend die Liste der vorhandenen Steuerelemente im Eigenschaften-Fenster auf eine einheitliche Namensgebung. 1.5.3 Eigenschaften zur Laufzeit ändern Steuerelemente haben die Eigenschaften Size (mit den Komponenten Width und Height) und Location (mit den Komponenten X und Y) zur Angabe von Größe und Position. X und Y geben die Koordinaten der oberen linken Ecke des Steuerelements an, gemessen von der oberen linken Ecke des umgebenden Elements (meist das Formular). Sämtliche Werte werden in Pixeln angegeben. Size, Location Alle diese Eigenschaften können sowohl während der Entwicklungszeit als auch während der Laufzeit eines Projekts verändert werden. Zur Änderung während der Entwicklungszeit können Sie die Eigenschaftswerte wie gewohnt im Eigenschaften-Fenster eingeben. Als Beispiel für Änderungen während der Laufzeit soll hingegen das folgende Programm (Projekt Steuerelemente) dienen (siehe Abbildung 1.16). Abbildung 1.15 Nach der Formatierung 1.5.2 Steuerelemente kopieren Steuerelemente kopieren 32 Zur schnelleren Erzeugung eines Projekts können vorhandene Steuerelemente einschließlich aller ihrer Eigenschaften kopiert werden. Markieren Sie hierzu die gewünschten Steuerelemente, und kopieren Sie sie entweder Abbildung 1.16 Position und Größe bestimmen 33 1 1.5 Einführung Zunächst ein Hinweis zu den benötigten Namensräumen, die oberhalb der Klasse eingebunden werden: using System; using System.Drawing; using System.Windows.Forms; ... Listing 1.5 Projekt »Steuerelemente«, Namensräume Arbeiten mit Steuerelementen Zur Erläuterung: 왘 Der Kopfteil der einzelnen Methoden wird aus Gründen der Übersichtlichkeit jeweils in verkürzter Form abgebildet. Das wird bei den meisten nachfolgenden Beispielen ebenfalls so sein, außer wenn es genau auf die Inhalte des Methodenkopfs ankommt. 1 Verkürzte Darstellung 왘 Das Formular enthält fünf Buttons. Die oberen vier Buttons dienen der Veränderung von Position und Größe des fünften Buttons. wing hinzugekommen, der beim Zugriff auf Positions-, Größen- oder Farb- 왘 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. angaben benötigt wird. Die drei genannten Namensräume reichen bei vielen Projekten aus. 왘 Bei beiden Angaben handelt es sich um Wertepaare (X/Y bzw. Breite/ Höhe). Es wird nachfolgend generell nur der Teil des Programmcodes angezeigt, der verändert wurde: 왘 Zur Einstellung der Position dient die Struktur Point. Ein Objekt dieser Struktur liefert ein Wertepaar. In diesem Programm wird mit new jeweils ein neues Objekt der Struktur Point erzeugt, um das Wertepaar bereitzustellen. new Point 왘 Bei Betätigung des Buttons Position Abs wird die Position des fünften Buttons auf die Werte X=100 und Y=200 gestellt, jeweils gemessen von der linken oberen Ecke des Formulars. X, Y Gegenüber dem vorherigen Projekt ist noch der Namensraum System.Dra- private void CmdPositionRel_Click(...) { CmdTest.Location = new Point( CmdTest.Location.X + 20, CmdTest.Location.Y); } private void CmdPositionAbs_Click(...) { CmdTest.Location = new Point(100, 200); } private void CmdGroesseRel_Click(...) { CmdTest.Size = new Size( CmdTest.Size.Width + 20, CmdTest.Size.Height); } private void CmdGroesseAbs_Click(...) { CmdTest.Size = new Size(50, 100); } Listing 1.6 Projekt »Steuerelemente« 왘 Bei Betätigung des Buttons Position Rel wird die Position des fünften Buttons auf die Werte X = CmdTest.Location.X + 20 und Y = CmdTest.Location.Y gestellt. Bei X wird also der alte Wert der Komponente X um 20 erhöht, das Element bewegt sich nach rechts. Bei Y wird der alte Wert der Komponente Y nicht verändert, das Element bewegt sich somit nicht nach oben oder unten. 왘 Zur Einstellung der Größe dient die Struktur Size. Size 왘 Bei Betätigung des Buttons Grösse Abs wird die Größe des fünften Buttons auf die Werte Width = 50 und Height = 100 gestellt. Width, Height 왘 Bei Betätigung des Buttons Grösse Rel wird die Größe des fünften Buttons auf die Werte Width = CmdTest.Size.Width + 20 und Height = CmdTest.Size.Height gestellt. Bei Width wird also der alte Wert der Komponente Width um 20 erhöht, das Element wird breiter. Bei Height wird der frühere Wert der Komponente Height nicht verändert, das Element verändert seine Höhe daher nicht. Nach einigen Klicks sieht das Formular aus wie das in Abbildung 1.17. 34 35 1 1.5 Einführung Arbeiten mit Steuerelementen Falls Sie eine mehrzeilige Ausgabe wünschen, können Sie einen Zeilenvorschub mithilfe der Zeichenfolge "\n" (für new line) erzeugen. \n 1 Nachfolgend wird das Formular des Projekts Steuerelemente vergrößert, zum Beispiel auf 500 × 400. Anschließend wird es um ein Label ergänzt, in dem die aktuelle Position und Größe des Buttons angezeigt werden. Das soll nach Betätigung des Buttons Anzeige geschehen: Abbildung 1.17 Veränderung von Eigenschaften zur Laufzeit 1.5.4 Vergabe und Verwendung von Namen Beachten Sie in allen Programmen, dass jedes Steuerelement seinen eigenen, eindeutigen Namen hat und immer mit diesem Namen angesprochen werden muss. Besonders am Anfang passiert es erfahrungsgemäß häufig, dass ein Programm nur deshalb nicht zum gewünschten Erfolg führt, weil ein nicht vorhandener Name verwendet wird. In diesem Zusammenhang möchte ich noch einmal auf die Namenskonventionen hinweisen: 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.7 Projekt »Steuerelemente«, mit Anzeige Nach einigen Klicks und der Betätigung des Buttons Anzeige sieht das Formular aus wie das in Abbildung 1.18. 왘 Buttons sollten Namen wie z. B. CmdEnde, CmdAnzeigen, CmdBerechnen usw. haben. 왘 Labels sollten Namen wie z. B. LblAnzeige, LblName, LblUhrzeit, LblBeginnDatum 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 so schnell erkennen, ob Sie tatsächlich ein vorhandenes Steuerelement verwendet haben. Abbildung 1.18 Anzeige der Eigenschaften 1.5.6 Eigenschaft BackColor, Farben allgemein Die Hintergrundfarbe eines Steuerelements wird mit der Eigenschaft Back- BackColor Color festgelegt. Dabei können Sie die Farbe zur Entwicklungszeit leicht mithilfe einer Farbpalette oder aus Systemfarben auswählen. 1.5.5 Verknüpfung von Texten, mehrzeilige Texte + zur Verkettung 36 Mithilfe des Zeichens + können mehrere Texte miteinander verknüpft werden. Falls ein einzelner Zahlenwert zwischen den Texten steht, wird er vorher in einen Text umgewandelt. Aufgepasst: Falls mehrere Zahlenwerte direkt nacheinander mithilfe des Zeichens + verknüpft werden, werden sie zunächst mathematisch addiert. Hintergrundfarben und andere Farben können Sie auch zur Laufzeit einstellen. Dabei bedienen Sie sich der Farbwerte, die Sie über die Struktur Color auswählen. Color Ein Beispiel, ebenfalls im Projekt Steuerelemente: 37 1 Einführung private void CmdFarbe_Click(...) { BackColor = Color.Yellow; LblAnzeige.BackColor = Color.FromArgb(192, 255, 0); } Listing 1.8 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 aber handelt es sich um 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 das in Abbildung 1.19. Abbildung 1.19 Nach Änderung der Eigenschaft »Farbe« 38 Kapitel 2 Grundlagen 2 In diesem Kapitel erlernen Sie auf anschauliche Weise die Sprachgrundlagen von C# in Verbindung mit den gängigen Steuerelementen von Windows-Programmen. In den folgenden Abschnitten lernen Sie wichtige Elemente der Programmierung, wie Variablen, Operatoren, Verzweigungen und Schleifen, gemeinsam mit wohlbekannten, häufig verwendeten Steuerelementen kennen. 2.1 Variablen und Datentypen Variablen dienen der vorübergehenden Speicherung von Daten, die sich während der Laufzeit eines Programms ändern können. Eine Variable besitzt einen eindeutigen Namen, unter dem sie angesprochen werden kann. 2.1.1 Namen, Werte Für die Namen von Variablen gelten in C# die folgenden Regeln: Namensregeln 왘 Sie beginnen mit einem Buchstaben. 왘 Sie können nur aus Buchstaben, Zahlen und einigen wenigen Sonderzeichen (wie z. B. dem Unterstrich _) bestehen. 왘 Sie dürfen Umlaute oder auch das scharfe ß enthalten. Allerdings kann das zu Fehlern im Einsatz unter anderssprachigen Umgebungen führen. Daher rate ich davon ab. 왘 Innerhalb eines Gültigkeitsbereichs darf es keine zwei Variablen mit dem gleichen Namen geben (siehe Abschnitt 2.1.4). Variablen erhalten ihre Werte durch Zuweisung per Gleichheitszeichen. Falls eine Variable als Erstes auf der rechten Seite des Gleichheitszeichens genutzt wird, muss ihr vorher ein Wert zugewiesen werden. Anderenfalls wird ein Fehler gemeldet. 39 2 2.1 Grundlagen 2.1.2 Deklarationen Neben dem Namen besitzt jede Variable einen Datentyp, der die Art der Information bestimmt, die gespeichert werden kann. Der Entwickler wählt den Datentyp danach aus, ob er Texte, Zahlen ohne Nachkommastellen, Zahlen mit Nachkommastellen oder z. B. logische Werte speichern möchte. Auswahl des Datentyps Außerdem muss er sich noch Gedanken über die Größe des Bereichs machen, den die Zahl oder der Text annehmen könnte, und über die gewünschte Genauigkeit bei Zahlen. Im folgenden Abschnitt finden Sie eine Liste der gängigsten Datentypen. Variablen müssen in C# immer mit einem Datentyp deklariert werden. Das beugt Fehlern vor, die aufgrund einer falschen Verwendung der Variablen entstehen könnten. 2.1.3 Datentypen Die wichtigsten von C# unterstützten Datentypen können in einige große Gruppen unterteilt werden: Es gibt Datentypen zur Speicherung von ganzen Zahlen: 왘 den Datentyp byte, mit Werten von 0 bis 255 왘 den Datentyp short, mit Werten von –32.768 bis 32.767 int 왘 den Datentyp int, mit Werten von –2.147.483.648 bis 2.147.483.647 왘 und den Datentyp long, mit Werten von –9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807 Außerdem gibt es Datentypen zur Speicherung von Zahlen mit Nachkommastellen: 왘 den Datentyp float, mit einfacher Genauigkeit und Werten von ca. –3,4×1038 bis ca. 3,4×1038 double 왘 den Datentyp double, mit doppelter Genauigkeit und Werten von ca. –1,7×10308 bis ca. 1,7×10308 왘 und den Datentyp decimal, mit variabler Genauigkeit und Werten von ca. –7,9×1028 bis ca. 7.9×1028 Einige weitere nützliche Datentypen sind: 왘 der Datentyp bool, mit den Werten true oder false (wahr oder falsch) 40 Variablen und Datentypen 왘 der Datentyp char, für einzelne Zeichen 왘 der Datentyp string, für Zeichenketten mit variabler Länge string 2 Im folgenden Beispiel werden Variablen dieser Typen deklariert, mit Werten versehen und in einem Label angezeigt (Projekt Datentypen). private void CmdAnzeige_Click(...) { /* Ganze Zahlen */ byte By; short Sh; int It, Hex; long Lg; /* Zahlen mit Nachkommastellen */ float Fl; double Db1, Db2, Exp1, Exp2; decimal De; /* Boolesche Variable, Zeichen, Zeichenkette */ bool Bo; char Ch; string St; /* Ganze Zahlen */ By = 200; Sh = 30000; It = 2000000000; Lg = 3000000000; Hex = 0x3a; /* Zahlen mit Nachkommastellen */ Fl = 1.0f / 7; Db1 = 1 / 7; Db2 = 1.0 / 7; De = 1.0m / 7; Exp1 = 1.5e3; Exp2 = 1.5e-3; /* Boolesche Variable, Zeichen, Zeichenkette */ Bo = true; 41 2 2.1 Grundlagen Ch = 'a'; St = "Zeichenkette"; LblAnzeige.Text = "byte: " + By + "\n" + "short: " + Sh + "\n" + "int: " + It + "\n" + "long: " + Lg + "\n" + "(hexadezimale Zahl): " + Hex + "\n\n" + "float: " + Fl + "\n" + "double 1: " + Db1 + "\n" + "double 2: " + Db2 + "\n" + "decimal: " + De + "\n" + "(Exponent positiv): " + Exp1 + "\n" + "(Exponent negativ): " + Exp2 + "\n\n" + "bool: " + Bo + "\n" + "char: " + Ch + "\n" + "string: " + St; } Listing 2.1 Projekt »Datentypen« Nach Betätigung des Buttons stellt das Programm die Ausgabe wie in Abbildung 2.1 dar. Abbildung 2.1 Wichtige Datentypen Zur Erläuterung: Deklaration 42 왘 Variablen werden mithilfe der Anweisung <Datentyp> <Variablenname>; deklariert. Mehrere Variablen desselben Datentyps können, durch Kommata getrennt, innerhalb einer Anweisung deklariert werden (z. B. int x, y;). Variablen und Datentypen 왘 Variablen können bereits bei der Deklaration einen Wert erhalten, zum Beispiel: short Sh = 30000;. 2 왘 Bei den Datentypen für ganze Zahlen führt die Zuweisung einer zu großen Zahl zu einer Überschreitung des Wertebereichs und zu einer Fehlermeldung. Wertebereich 왘 Ganze Zahlen können auch in hexadezimaler Form zugewiesen werden, mithilfe von 0x zu Beginn der Zahl, gefolgt von den hexadezimalen Ziffern. Diese gehen von 0 bis 9, es folgen a (= dezimal 10), b (=11), c (=12), d (=13), e (=14) und f (=15). Ein Beispiel: 0x2f5 entspricht 2×162 + 15×161 + 5×160 = 512 + 240 + 5 = 757. Hexadezimal 왘 Die Datentypen für Zahlen mit Nachkommastellen unterscheiden sich in ihrer Genauigkeit. Nachkommastellen müssen im Programmcode durch einen Dezimalpunkt abgetrennt werden. In der Ausgabe wird dagegen ein Dezimalkomma dargestellt. Die Zuweisung einer zu großen Zahl führt zu einer Fehlermeldung. Die Zuweisung einer zu kleinen Zahl wiederum führt zur Anzeige von »Unendlich« (!) bzw. zu einer ungenauen Speicherung. Zahlen mit Nachkommastellen 왘 Bei der Division von zwei ganzen Zahlen sollten Sie beachten, dass die Nachkommastellen abgeschnitten werden. Möchten Sie das nicht, müssen Sie zumindest eine der beiden Zahlen als Zahl mit Nachkommastellen kennzeichnen, z. B. durch das Anhängen von .0: Statt 1 schreiben Sie 1.0. Division ganzer Zahlen 왘 float-Werte sollten mit einem f gekennzeichnet werden, decimal-Werte mit einem m. Damit erhält die gesamte Division im vorliegenden Programm einen float- bzw. decimal-Wert. Kürzel f und m 왘 Sehr große oder sehr kleine Zahlen können im Programmcode auch in der Exponentialschreibweise zugewiesen werden. Zwei Beispiele: 1.5e3 für 1500.0 oder 1.5e-3 für 0.0015. Exponentialschreibweise 왘 Werte für den Datentyp bool werden mit true und false zugewiesen, aber mit True und False ausgegeben. true, false 왘 Werte für Zeichen müssen in einfachen Anführungszeichen und für Zeichenketten in doppelten Anführungszeichen angegeben werden. Anführungszeichen 왘 Die Datentypen int, double, bool und string werden am Häufigsten eingesetzt. 43 2 2.1 Grundlagen Übung Übung UDatentypen Schreiben Sie ein Programm, in welchem Ihre Adresse, Ihr Nach- und Vorname, Alter und Gehalt jeweils in Variablen eines geeigneten Datentyps gespeichert und anschließend wie in Abbildung 2.2 ausgegeben werden. Variablen und Datentypen 왘 Eine klassenweit gültige Variable wird innerhalb einer Methode von einer lokalen Variablen mit dem gleichen Namen ausgeblendet. Ausblenden 2 Im folgenden Beispiel werden Variablen unterschiedlicher Gültigkeitsbereiche deklariert, an verschiedenen Stellen verändert und ausgegeben (Projekt Gueltigkeitsbereich): public partial class Form1 : Form { ... private int Mx = 0; Abbildung 2.2 Übung UDatentypen private void CmdAnzeigen1_Click(...) { int x = 0; Mx = Mx + 1; x = x + 1; LblAnzeige.Text = "x: " + x + " Mx: " + Mx; } 2.1.4 Gültigkeitsbereich Lokal Klassenweit gültig private public Variablen, die innerhalb einer Methode vereinbart werden, haben ihre Gültigkeit nur in der Methode. Außerhalb der Methode sind sowohl Name als auch Wert der Variable unbekannt. Solche Variablen bezeichnet man daher auch als lokale Variablen. Sobald die Methode abgearbeitet wurde, steht der Wert auch nicht mehr zur Verfügung. Beim nächsten Aufruf der gleichen Methode werden diese Variablen neu deklariert und erhalten neue Werte. Variablen, die außerhalb von Methoden vereinbart werden, sind innerhalb der gesamten Klasse gültig, hier also innerhalb der Klasse des Formulars. Ihr Wert kann in jeder Methode gesetzt oder abgerufen werden und bleibt solange erhalten, wie das Formular im laufenden Programm existiert. Diese klassenweit gültigen Variablen werden mit dem Schlüsselwort private deklariert. Weitere Einzelheiten zu klassenweit gültigen Variablen finden Sie in Abschnitt 5.2. Sie sind außerhalb der Klasse nicht gültig. Variablen, die mit dem Schlüsselwort public vereinbart werden, sind öffentlich. Damit sind sie auch außerhalb der jeweiligen Klasse, also z. B. auch in anderen Formularen gültig. Mehr dazu ebenfalls in Abschnitt 5.2. private void CmdAnzeigen2_Click(...) { int Mx = 0; Mx = Mx + 1; LblAnzeige.Text = "Mx: " + Mx; } } Listing 2.2 Projekt »Gueltigkeitsbereich« Zur Erläuterung: 왘 In der ersten Methode wird der Wert der klassenweit gültigen Variablen Mx bei jedem Aufruf erhöht. Die lokale Variable x wird immer wieder auf 1 gesetzt (siehe Abbildung 2.3). Gibt es in einem Programmabschnitt mehrere Variablen mit dem gleichen Namen, gelten die folgenden Regeln: 왘 Lokale Variablen mit gleichem Namen in der gleichen Methode sind nicht zulässig. 44 Abbildung 2.3 Lokale und klassenweit gültige Variablen 45 2 2.1 Grundlagen Variablen und Datentypen 왘 In der zweiten Methode blendet die lokale Variable Mx die gleichnamige klassenweit gültige Variable aus. Die lokale Variable wird immer wieder auf 1 gesetzt (siehe Abbildung 2.4). 2 Abbildung 2.6 Ausgabe der zweiten Methode nach weiteren Klicks 2.1.5 Konstanten Abbildung 2.4 Lokale Variable Startwert setzen Hinweis: Die Variablen werden vor ihrer ersten Benutzung initialisiert, d. h., sie werden mit einem Startwert besetzt. Übung Übung UGueltigkeitsbereich Erstellen Sie ein Programm, in dem zwei Buttons, ein Label und drei Variablen eines geeigneten Datentyps eingesetzt werden: 왘 die klassenweit gültige Variable x 왘 die Variable y, die nur lokal in der Methode zum Click-Ereignis des ersten Buttons gültig ist Konstanten sind vordefinierte Werte, die während der Laufzeit nicht verändert werden können. Am besten geben Sie Konstanten aussagekräftige Namen, damit sie leichter zu behalten sind als die Werte, die sie repräsentieren. Konstanten werden an einer zentralen Stelle definiert und können an verschiedenen Stellen des Programms genutzt werden. Somit muss eine eventuelle Änderung einer Konstanten zur Entwurfszeit nur an einer Stelle erfolgen. Der Gültigkeitsbereich von Konstanten ist analog zum Gültigkeitsbereich von Variablen. Konstanten repräsentieren Werte Zu den Konstanten zählen auch die integrierten Konstanten. Auch sie repräsentieren Zahlen, die aber nicht so einprägsam sind wie die Namen der Konstanten. Integrierte Konstanten 왘 die Variable z, die nur lokal in der Methode zum Click-Ereignis des zweiten Buttons gültig ist Im folgenden Beispiel werden mehrere Konstanten vereinbart und genutzt (Projekt Konstanten): In der ersten Methode werden x und y jeweils um 0,1 erhöht und angezeigt (siehe Abbildung 2.5). public partial class Form1 : Form { ... private const int MaxWert = 75; private const string Eintrag = "Picture"; private void CmdKonstanten_Click(...) { const int MaxWert = 55; const int MinWert = 5; LblAnzeige.Text = (MaxWert - MinWert) / 2 + "\n" + Eintrag; } Abbildung 2.5 Ausgabe der ersten Methode nach einigen Klicks In der zweiten Methode werden x und z jeweils um 0,1 erhöht und angezeigt (siehe Abbildung 2.6). } Listing 2.3 Projekt »Konstanten«, Teil 1 46 47 2 2.1 Grundlagen Zur Erläuterung: const Variablen und Datentypen private void CmdEnumeration1_Click(...) { LblAnzeige.Text = "Farbe: " + Farbe.Gelb + " " + (int)Farbe.Gelb; } 왘 Konstanten werden mithilfe des Schlüsselworts const definiert. 왘 Die Konstanten MaxWert und Eintrag werden mit klassenweiter Gültigkeit festgelegt. 왘 Innerhalb der Methode werden die beiden lokalen Konstanten MaxWert und MinWert festgelegt. MaxWert blendet die klassenweit gültige Konstante gleichen Namens aus, wie Sie in Abbildung 2.7 sehen können. 2 private void CmdEnumeration2_Click(...) { LblAnzeige.Text = "Sonntag: " + DayOfWeek.Sunday + " " + (int)DayOfWeek.Sunday + "\n" + "Samstag: " + DayOfWeek.Saturday + " " + (int)DayOfWeek.Saturday; } } Listing 2.4 Projekt »Konstanten«, Teil 2 Abbildung 2.7 Konstanten Zur Erläuterung: 2.1.6 Enumerationen Konstanten aufzählen Enumerationen sind Aufzählungen von Konstanten, die thematisch zusammengehören. Alle Enumerationen haben den gleichen Datentyp, der ganzzahlig sein muss. Bei der Deklaration werden ihnen Werte zugewiesen, am besten explizit. Innerhalb von Visual Studio gibt es für C# zahlreiche vordefinierte Enumerationen. Ähnlich wie bei den integrierten Konstanten sind die Namen der Enumerationen und deren Elemente besser lesbar als die durch sie repräsentierten Zahlen. Ein Beispiel: Die Enumeration DialogResult ermöglicht dem Programmierer, die zahlreichen möglichen Antworten des Benutzers beim Einsatz von Windows-Standarddialogfeldern (Ja, Nein, Abbrechen, Wiederholen, Ignorieren, ...) anschaulich einzusetzen. 왘 Es wird die Enumeration Farbe vom Datentyp int vereinbart. Da es sich um einen Typ handelt und nicht um eine Variable oder Konstante, muss sie außerhalb von Methoden vereinbart werden. Damit ist sie automatisch für die gesamte Klasse gültig. Klassenweit gültig 왘 In der ersten Ereignismethode wird ein Element der eigenen Enumeration Farbe verwendet. Zunächst wird der Name des Elements ausgegeben: Gelb. Die Zahl, welche das Element repräsentiert, kann erst nach einer Umwandlung in den entsprechenden Datentyp ausgegeben werden. Diese Umwandlung wird mithilfe eines Casts vorgenommen: (int) (siehe Abbildung 2.8). Cast (int) Im folgenden Programm wird mit einer eigenen und einer vordefinierten Enumeration gearbeitet (ebenfalls im Projekt Konstanten): public partial class Form1 : Form { ... private enum Farbe : int { Rot = 1, Gelb = 2, Blau = 3 } 48 Abbildung 2.8 Erste Enumeration 왘 In der zweiten Ereignismethode werden zwei Elemente der vordefinierten Enumeration DayOfWeek verwendet, siehe Abbildung 2.9. Sie können sie zur Ermittlung des Wochentags eines gegebenen Datums verwenden. DayOfWeek 49 2 2.2 Grundlagen Abbildung 2.9 Zweite Enumeration 2.2 Operatoren Zum Zusammensetzen von Ausdrücken werden in C#, wie in jeder anderen Programmiersprache auch, Operatoren verwendet. In diesem Buch wurden bereits die Operatoren = für Zuweisungen und + für Verkettungen genutzt. Priorität Es gibt verschiedene Kategorien von Operatoren. Vorrangregeln (Prioritäten) sind für die Reihenfolge der Abarbeitung zuständig, falls mehrere Operatoren innerhalb eines Ausdrucks verwendet werden. Diese Vorrangregeln finden Sie weiter unten in diesem Abschnitt. Falls Sie sich bei der Verwendung dieser Regeln nicht sicher sind, empfiehlt es sich, die Reihenfolge durch eigene Klammersetzung explizit festzulegen. 2.2.1 Rechenoperatoren Rechenoperatoren Rechenoperatoren dienen der Durchführung von Berechnungen, siehe Tabelle 2.1. Operator Beschreibung + Addition - Subtraktion oder Negation * Multiplikation / Division % Modulo ++ Erhöhung um 1 -- Verminderung um 1 Operatoren Bei der Division von zwei ganzen Zahlen sollten Sie beachten, dass die Nachkommastellen abgeschnitten werden. Wenn Sie das nicht möchten, müssen Sie zumindest eine der beiden Zahlen als Zahl mit Nachkommastellen kennzeichnen, z. B. durch Anhängen von .0: Statt 5 schreiben Sie also 5.0. Ganzzahldivision Der Modulo-Operator % berechnet den Rest einer Division. Einige Beispiele sehen Sie in Tabelle 2.2. Modulo Ausdruck Ergebnis Erklärung 19% 4 3 19 durch 4 ist 4 Rest 3 19.5% 4.2 2.7 19,5 durch 4,2 ist 4 Rest 2,7 2 Tabelle 2.2 Modulo-Operator Die Operatoren ++ und -- dienen als Schreibabkürzung und sollen mithilfe des Projekts Rechenoperatoren erläutert werden: ++, -- private void CmdAnzeigen1_Click(...) { int x = 5; x++; ++x; x = x + 1; LblAnzeige.Text = "Ergebnis: " + x; } private void CmdAnzeigen2_Click(...) { int x = 5; LblAnzeige.Text = "Ergebnis: " + x++; } private void CmdAnzeigen3_Click(...) { int x = 5; LblAnzeige.Text = "Ergebnis: " + ++x; } Listing 2.5 Projekt »Rechenoperatoren« Tabelle 2.1 Rechenoperatoren 50 51 2 2.2 Grundlagen x++ ++x x=x+1 Zur Erläuterung: 2.2.2 Vergleichsoperatoren 왘 In der ersten Methode hat x zunächst den Wert 5. Der Wert kann mit ++x oder mit x++ oder mit x = x + 1 jeweils um 1 erhöht werden. Anschließend hat x den Wert 8. Vergleichsoperatoren (siehe Tabelle 2.3) dienen dazu, festzustellen, ob bestimmte Bedingungen zutreffen oder nicht. Das Ergebnis kann beispielsweise zur Ablaufsteuerung von Programmen genutzt werden. In Abschnitt 2.3 wird hierauf noch genauer eingegangen. 왘 In der zweiten Methode wird x zunächst ausgegeben und anschließend um 1 erhöht. Das liegt daran, dass der Operator ++ hinter x steht. In der Ausgabe sehen Sie noch den alten Wert 5, nach der Anweisungszeile erhält x den Wert 6. 왘 In der dritten Methode wird x zunächst um 1 erhöht und anschließend ausgegeben. In diesem Fall steht der Operator ++ vor x. In der Ausgabe sehen Sie den neuen Wert 6, nach der Anweisungszeile behält x ebenfalls den Wert 6. 왘 Die Schreibweise x = x + 1; als eigene Anweisungszeile schafft hier Klarheit. 왘 Für den Operator -- gilt sinngemäß das Gleiche. Von links nach rechts Klammern Projekt Übung URechenoperatoren Multiplikation und Division innerhalb eines Ausdrucks sind gleichrangig und werden von links nach rechts in der Reihenfolge ihres Auftretens ausgewertet. Dasselbe gilt für Additionen und Subtraktionen, wenn sie zusammen in einem Ausdruck auftreten. Multiplikation und Division werden dabei vor Addition und Subtraktion ausgeführt. Mit Klammern kann diese Rangfolge jedoch außer Kraft gesetzt werden, damit bestimmte Teilausdrücke vor anderen Teilausdrücken ausgewertet werden. In Klammern gesetzte Operationen haben grundsätzlich immer Vorrang. Innerhalb der Klammern gilt jedoch wieder die normale Rangfolge der Operatoren. Beschreibung < kleiner als <= kleiner als oder gleich > größer als >= größer als oder gleich == gleich != ungleich Ausdruck Ergebnis 5>3 true 3 == 3.2 false 5 + 3 * 2 >= 12 false "Maier" == "Mayer" false 2 Tabelle 2.4 Nutzung von Vergleichsoperatoren Alle Vergleiche innerhalb dieses Abschnitts können Sie auch mithilfe des Codes im Projekt Vergleichsoperatoren selber nachvollziehen. Übung Übung Berechnen Sie die beiden folgenden Ausdrücke, speichern Sie das Ergebnis in einer Variablen eines geeigneten Datentyps, und zeigen Sie es anschließend an: Ermitteln Sie das Ergebnis der beiden folgenden Ausdrücke, speichern Sie es in einer Variablen eines geeigneten Datentyps, und zeigen Sie es an: 왘 2. Ausdruck: 3 * (-2.5 + 4) * 2 Vergleich Tabelle 2.3 Einige Beispiele sehen Sie in Tabelle 2.4. Im Projekt Rechenoperatoren können Sie auch die beiden Berechnungen mit dem Operator % leicht selber nachvollziehen. 왘 1. Ausdruck: 3 * –2.5 + 4 * 2 52 Operator Operatoren 왘 1. Ausdruck: 12 – 3 >= 4 * 2.5 Projekt Übung UVergleichsoperatoren 왘 2. Ausdruck: "Maier" != "Mayer" 53 2 2.2 Grundlagen 2.2.3 Logische Operatoren Logik Logische Operatoren dienen dazu, mehrere Bedingungen zusammenzufassen. Das Ergebnis kann ebenfalls etwa zur Ablaufsteuerung von Programmen genutzt werden (siehe hierzu auch Abschnitt 2.3). Die logischen Operatoren sehen Sie in Tabelle 2.5. Operator Beschreibung Das Ergebnis ist true, wenn ... ! Nicht ... der Ausdruck false ist. && Und ... beide Ausdrücke true sind. || inklusives Oder ... mindestens ein Ausdruck true ist. ^ exklusives Oder ... genau ein Ausdruck true ist. Tabelle 2.5 Logische Operatoren ! && || ^ Es seien die Variablen A = 1, B = 3 und C = 5 gesetzt. Die Ausdrücke in der ersten Spalte von Tabelle 2.6 ergeben jeweils die Ergebnisse in der zweiten Spalte. Ausdruck Ergebnis !(A < B) false (B > A) && (C > B) true (B < A) || (C < B) false (B < A) ^ (C > B) true Tabelle 2.6 Ausdrücke mit logischen Operatoren Sie können auch die logischen bitweisen Operatoren & (statt &&) und | (statt ||) verwenden. Hierbei werden alle Teile des Vergleichsausdrucks ausgewertet. Im Gegensatz dazu wird bei den Operatoren && und || die Auswertung abgebrochen, sobald sich der Wert des Ausdrucks nicht mehr verändern kann. Die Ergebnisse unterscheiden sich allerdings nur, falls innerhalb des Vergleichsausdrucks Werte verändert werden, z. B. mit den Operatoren ++ oder --. Operatoren &, | 2 2.2.4 Verkettungsoperator Der Operator + dient der Verkettung von Zeichenketten. Ist einer der Ausdrücke keine Zeichenfolge, sondern eine Zahl, wird er (wenn möglich) in eine Zeichenfolge verwandelt. Das Gesamtergebnis ist wiederum eine Zeichenfolge. Beispiel: Umwandlung in Zeichenketten private void CmdAnzeige_Click(...) { string a, b; double d; int x; b = "Hallo"; d = 4.6; x = -5; a = b + " Welt " + d + " " + x + " " + 12; LblAnzeige.Text = a; // LblAnzeige.Text = x; } Listing 2.6 Projekt »Verkettungsoperator« Projekt Alle Berechnungen und Erläuterungen innerhalb dieses Abschnitts können Sie auch mithilfe des Codes im Projekt LogischeOperatoren nachvollziehen. Übung Übung ULogischeOperatoren Ermitteln Sie das Ergebnis der beiden folgenden Ausdrücke, speichern Sie es in einer Variablen eines geeigneten Datentyps, und zeigen Sie es an: Zur Erläuterung: 왘 Die Zeichenkette a wird aus Variablen und Werten unterschiedlicher Datentypen zusammengesetzt. 왘 Die letzte Anweisung ist auskommentiert, weil sie zu einem Fehler führt. Die int-Variable x kann nicht direkt als Wert für die Eigenschaft Text verwendet werden. Sie muss zunächst umgewandelt werden. 왘 1. Ausdruck: 4 > 3 && –4 > –3 왘 2. Ausdruck: 4 > 3 || –4 > –3 54 55 2 2.2 Grundlagen 왘 Das Ergebnis ist in Abbildung 2.10 zu sehen. 왘 Ein weiteres Beispiel hierfür ist übrigens bereits in Abschnitt 1.4.5 zu finden. Abbildung 2.10 Verkettung 2.2.5 Zuweisungsoperatoren Zeichen = Den einfachsten Zuweisungsoperator, das Gleichheitszeichen, haben Sie bereits genutzt. Zur Verkürzung von Anweisungen gibt es aber noch weitere Zuweisungsoperatoren. Eine Auswahl sehen Sie in Tabelle 2.7. Beschreibung -! negatives Vorzeichen, logisches Nicht */% Multiplikation, Division, Modulo +- Addition, Subtraktion < > <= >= Vergleichsoperatoren für kleiner und größer == != Vergleichsoperatoren für gleich und ungleich && logisches Und || logisches Oder 2 Tabelle 2.8 Je weiter oben die Operatoren in der Tabelle stehen, desto höher ist ihre Priorität. Wie bereits bei den Rechenoperatoren erwähnt: Mit Klammern kann diese Rangfolge außer Kraft gesetzt werden, damit bestimmte Teilausdrücke vor anderen Teilausdrücken ausgewertet werden. In Klammern gesetzte Operationen haben grundsätzlich Vorrang. Innerhalb der Klammern gilt jedoch wieder die normale Rangfolge der Operatoren. Operator Beispiel Ergebnis = x=7 x erhält den Wert 7. += x += 5 Der Wert von x wird um 5 erhöht. -= x -= 5 Der Wert von x wird um 5 verringert. *= x *= 3 Der Wert von x wird auf das Dreifache erhöht. Übung /= x /= 3 Der Wert von x wird auf ein Drittel verringert. %= x %= 3 x wird durch 3 geteilt, der Rest der Division wird x zugewiesen. Sind die Bedingungen in Tabelle 2.9 wahr oder falsch? Lösen Sie die Aufgabe möglichst ohne Zuhilfenahme des PC. += z += "abc" Die Zeichenkette z wird um den Text abc verlängert. Nr. Werte Bedingung 1 a=5 b=10 a>0 && b!=10 2 a=5 b=10 a>0 || b!=10 3 z=10 w=100 z!=0 || z>w || w-z==90 2.2.6 Rangfolge der Operatoren 4 z=10 w=100 z==11 && z>w || w-z==90 Enthält ein Ausdruck mehrere Operationen, werden die einzelnen Teilausdrücke in einer bestimmten Rangfolge ausgewertet und aufgelöst, die als Rangfolge bzw. Priorität der Operatoren bezeichnet wird. Dabei gilt die in Tabelle 2.8 dargestellte Rangfolge. 5 x=1.0 y=5.7 x>=.9 && y<=5.8 6 x=1.0 y=5.7 x>=.9 && !(y<=5.8) 7 n1=1 n2=17 n1>0 && n2>0 || n1>n2 && n2!=17 8 n1=1 n2=17 n1>0 && (n2>0 || n1>n2) && n2!=17 Tabelle 2.7 Zuweisungsoperatoren Priorität Operator Operatoren Klammern Übung UOperatoren Tabelle 2.9 Übung UOperatoren 56 57 2 2.3 Grundlagen Einfache Steuerelemente 2.3 Einfache Steuerelemente 2 Windows-Programmierung mit C# innerhalb von Visual Studio besteht prinzipiell aus zwei Teilen: der Arbeit mit visuellen Steuerelementen und der Programmierung mit der Sprache. Beides soll in diesem Buch parallel vermittelt werden, um so die eher theoretischen Abschnitte zur Programmiersprache durch anschauliche Praxisbeispiele zu vertiefen. Daher wird in diesem Abschnitt mit vier weiteren Steuerelementen gearbeitet, bevor im nächsten Abschnitt die Verzweigungen zur Programmsteuerung vorgestellt werden: den Steuerelementen Panel, Zeitgeber, Textfeld und Zahlenauswahlfeld. 2.3.1 Panel Container Ein Panel dient normalerweise als Container für andere Steuerelemente. In unserem Beispiel wird es zur visuellen Darstellung eines Rechtecks und für eine kleine Animation genutzt. Die Eigenschaften BackColor (Hintergrundfarbe), Location (Position) und Size (Größe) sind Ihnen bereits von anderen Steuerelementen her bekannt. Mithilfe des nachfolgenden Programms im Projekt Panel wird ein Panel durch Betätigung von vier Buttons um 10 Pixel nach oben, unten, links oder rechts verschoben. Es hat die Größe 100 × 100 Pixel, die Startposition X=145 und Y=80 sowie eine eigene Hintergrundfarbe. Die Bewegung wird mithilfe der Struktur Point durchgeführt. In Abbildung 2.11 und Abbildung 2.12 ist das Panel im Startzustand bzw. nach einigen Klicks zu sehen. Abbildung 2.12 Panel, nach ein paar Klicks Der Programmcode: private void CmdNachOben_Click(...) { p.Location = new Point(p.Location.X, p.Location.Y - 10); } private void CmdNachLinks_Click(...) { p.Location = new Point(p.Location.X - 10, p.Location.Y); } private void CmdNachRechts_Click(...) { p.Location = new Point(p.Location.X + 10, p.Location.Y); } private void CmdNachUnten_Click(...) { p.Location = new Point(p.Location.X, p.Location.Y + 10); } Listing 2.7 Projekt »Panel« 2.3.2 Zeitgeber Ein Zeitgeber (Timer) erzeugt in festgelegten Abständen Zeittakte. Diese Zeittakte sind Ereignisse, die der Entwickler mit verschiedenen Aktionen verbinden kann. Das zugehörige Ereignis heißt Tick. Ein Zeitgeber kann wie jedes andere Steuerelement zum Formular hinzugefügt werden. Da es sich aber beim Zeitgeber um ein nicht sichtbares Steuerelement handelt, wird Timer-Intervall Enabled Abbildung 2.11 Panel, Startzustand 58 59 2 2.3 Grundlagen er unterhalb des Formulars angezeigt. Auch zur Laufzeit ist er nicht sichtbar. Seine wichtigste Eigenschaft ist das Zeitintervall, in dem das Ereignis auftreten soll. Dieses Zeitintervall wird in Millisekunden angegeben. Die Eigenschaft Enabled dient der Aktivierung bzw. Deaktivierung des Zeitgebers. Sie können sie zur Entwicklungszeit oder zur Laufzeit auf true oder false stellen. Einfache Steuerelemente Übung Erstellen Sie eine Windows-Anwendung. In der Mitte eines Formulars sollen zu Beginn vier Panels verschiedener Farbe der Größe 20 × 20 Pixel platziert werden, siehe Abbildung 2.14. Übung UPanelZeitgeber 2 Im nachfolgenden Programm im Projekt Zeitgeber erscheint zunächst ein Formular mit zwei Buttons. Betätigen Sie den Start-Button, erscheint ein x in einem Bezeichnungsfeld. Alle 0,5 Sekunden erscheint automatisch ein weiteres x, siehe Abbildung 2.13. Dies wird durch den Timer gesteuert, bei welchem der Wert für die Eigenschaft Interval auf 500 steht. Nach Betätigung des Stop-Buttons kommt kein weiteres x mehr hinzu. Abbildung 2.14 Startzustand Sobald ein Start-Button betätigt wird, sollen sich diese vier Panels diagonal in ca. fünf bis zehn Sekunden zu den Ecken des Formulars bewegen, jedes Panel in eine andere Ecke (siehe Abbildung 2.15). Abbildung 2.13 Nach einigen Sekunden Der zugehörige Code: private void CmdStart_Click(...) { TimAnzeige.Enabled = true; } private void CmdStop_Click(...) { TimAnzeige.Enabled = false; } private void TimAnzeige_Tick(...) { LblAnzeige.Text += "x"; } Listing 2.8 Projekt »Zeitgeber« 60 Abbildung 2.15 Nach einigen Sekunden Übung Diese Übung gehört nicht zum Pflichtprogramm. Sie ist etwas umfangreicher, verdeutlicht aber die Möglichkeiten einer schnellen Visualisierung von Prozessen durch C# innerhalb von Visual Studio durch einige wenige Programmzeilen. Übung UKran Konstruieren Sie aus mehreren Panels einen Kran (Fundament, senkrechtes Hauptelement, waagerechter Ausleger, senkrechter Haken am Ausleger). Der Benutzer soll die Möglichkeit haben, über insgesamt acht Buttons die folgenden Aktionen auszulösen: 61 2 2.3 Grundlagen 왘 Haken um 10 Pixel ausfahren bzw. einfahren 왘 Ausleger um 10 Pixel ausfahren bzw. einfahren 왘 Kran um 10 Pixel nach rechts bzw. links fahren Einfache Steuerelemente Manche Bewegungen des Krans werden vermutlich wenig natürlich wirken. Mit zunehmendem Programmierwissen werden Sie dieses Problem später aber beheben können. 2 왘 Kran um 10 Pixel in der Höhe ausfahren bzw. einfahren Denken Sie daran, dass bei vielen Bewegungen mehrere Steuerelemente bewegt werden müssen, da der Kran sonst seinen Zusammenhalt verliert. Manche Aktionen resultieren nur aus Größenveränderungen (Eigenschaften Width und Height), andere nur aus Ortsveränderungen (Location), wieder andere aus beidem. In Abbildung 2.16 und Abbildung 2.17 sehen Sie den Kran im Startzustand bzw. nach einigen Klicks. 2.3.3 Textfelder Ein Textfeld dient in erster Linie dazu, die Eingabe von Text oder Zahlen vom Benutzer entgegenzunehmen. Diese Eingaben werden in der Eigenschaft Text des Textfelds gespeichert. Das Aussehen und das Verhalten eines Textfelds werden u. a. durch folgende Eigenschaften bestimmt: Eingabefeld 왘 MultiLine: Steht MultiLine auf true, können Sie bei der Eingabe und bei der Anzeige mit mehreren Textzeilen arbeiten. 왘 ScrollBars: Sie können ein Textfeld mit vertikalen und/oder horizontalen Bildlaufleisten zur Eingabe und Anzeige längerer Texte versehen. 왘 MaxLength: Mit dieser Eigenschaft können Sie die Anzahl der Zeichen des Textfelds beschränken. Ist keine Beschränkung vorgesehen, kann das Textfeld insgesamt 32768 Zeichen aufnehmen. 왘 PasswordChar: Falls Sie für diese Eigenschaft im Entwurfsmodus ein Platzhalterzeichen eingegeben haben, wird während der Laufzeit für jedes eingegebene Zeichen nur dieser Platzhalter angezeigt. Diese Eigenschaft wird vor allem bei Passwortabfragen verwendet. Abbildung 2.16 Startzustand Passwort Der Inhalt eines Textfelds kann mit den gewohnten Mitteln (z. B. (Strg) + (C) und (Strg) + (V)) in die Zwischenablage kopiert bzw. aus der Zwischenablage eingefügt werden. Im nachfolgenden Programm im Projekt Textfelder kann der Benutzer in einem Textfeld einen Text eingeben. Nach Betätigung des Buttons Ausgabe wird der eingegebene Text in einem zusammenhängenden Satz ausgegeben (siehe Abbildung 2.18). Abbildung 2.17 Nach einigen Aktionen 62 Abbildung 2.18 Eingabe ins Textfeld 63 2 2.3 Grundlagen Der Code lautet wie folgt: private void CmdAusgabe_Click(...) { LblAusgabe.Text = "Sie haben '" + TxtEingabe.Text + "' eingegeben"; } Listing 2.9 Projekt »Textfelder« Zur Erläuterung: 왘 In der Eigenschaft Text des Textfelds wird die Eingabe gespeichert. Die Eigenschaft wird in einen längeren Ausgabetext eingebettet. Zahlen eingeben Bei der Eingabe und Auswertung von Zahlen sind einige Besonderheiten zu beachten. Im nachfolgenden Programm, ebenfalls im Projekt Textfelder, kann der Benutzer in einem Textfeld eine Zahl eingeben. Nach Betätigung des Buttons Rechnen wird der Wert dieser Zahl verdoppelt, das Ergebnis wird in einem Label darunter ausgegeben: private void CmdRechnen_Click(...) { double wert; wert = Convert.ToDouble(TxtEingabe.Text); wert = wert * 2; LblAusgabe.Text = "Ergebnis: " + wert; } Einfache Steuerelemente 왘 Stellt die eingegebene Zeichenkette keine Zahl dar, kommt es zu einem Laufzeitfehler. Diese Situation sollten Sie natürlich vermeiden: 2 – Sie können dafür vorher überprüfen, ob es sich bei der Zeichenkette um eine gültige Zahl handelt, und entsprechend reagieren. Das wird Ihnen möglich sein, sobald Sie die in Abschnitt 2.3 beschriebenen Verzweigungen zur Programmsteuerung beherrschen. – Allgemein können Sie Programme so schreiben, dass ein Programmabbruch abgefangen wird. Dazu werden Sie in der Lage sein, sobald Sie die Ausnahmebehandlung (siehe hierzu Kapitel 3) anwenden können. Ausnahmebehandlung Einige Beispiele: Abbildung 2.19 zeigt die Eingabe einer Zahl mit Nachkommastellen. Abbildung 2.19 Eingabe einer Zahl mit Nachkommastellen Die Eingabe einer Zeichenkette, wie zum Beispiel »abc«, führt zur Anzeige einer nicht behandelten Ausnahme. Die Zeile, in welcher der Fehler auftritt, wird im Code markiert, damit der Fehler beseitigt werden kann (siehe Abbildung 2.20). Debugging beenden Listing 2.10 Projekt »Textfelder«, Zahleneingabe Zur Erläuterung: ToDouble() Es soll dafür gesorgt werden, dass der Inhalt des Textfelds explizit in eine Zahl (mit möglichen Nachkommastellen) umgewandelt wird. Das erreichen Sie mithilfe der Methode ToDouble() aus der Klasse Convert. Die Klasse Convert bietet eine Reihe von Methoden für die Umwandlung (sprich Konvertierung) in andere Datentypen. 왘 Wenn eine Zeichenkette eingegeben wird, die eine Zahl darstellt, wird sie auf die oben angegebene Weise in eine Zahl umgewandelt, mit der anschließend gerechnet werden kann. 64 Abbildung 2.20 Markierung der Fehlerzeile Sie können die aktuellen Werte von Variablen in diesem Moment der Unterbrechung kontrollieren, indem Sie die Maus über diesen Variablen 65 2 2.4 Grundlagen platzieren. Anschließend muss das Programm über den Menüpunkt Debuggen • Debugging beenden beendet werden, bevor es neu gestartet werden kann. Das wichtigste Ereignis dieses Steuerelements ist ValueChanged. Es tritt bei der Veränderung der Eigenschaft Value ein und sollte anschließend zur Programmsteuerung verwendet werden. Die Eingabe einer Zahl, bei der ein Punkt anstelle eines Kommas zur Abtrennung von Nachkommastellen eingegeben wird, führt zu einem ganz anderen Rechenergebnis, siehe Abbildung 2.21. Im nachfolgenden Programm im Projekt ZahlenAufAb werden alle diese Eigenschaften und das eben angesprochene Ereignis genutzt. Der Benutzer kann hierbei Zahlenwerte zwischen –5,0 und +5,0 in Schritten von 0,1 über ein Zahlenauswahlfeld einstellen. Der ausgewählte Wert wird unmittelbar in einem Label angezeigt (siehe Abbildung 2.22). Abbildung 2.21 Punkt vor den Nachkommastellen Abbildung 2.22 Zahlenauswahlfeld Der Punkt wird ignoriert und die Zahl 3,52 wird daher als 352 interpretiert, was zu dem Ergebnis 704 führt. Die Eigenschaften werden im Eigenschaftenfenster wie folgt festgelegt: 2.3.4 Zahlenauswahlfeld NumericUpDown Das Steuerelement Zahlenauswahlfeld (NumericUpDown) stellt eine andere Möglichkeit dar, Zahlenwerte an ein Programm zu übermitteln. Die Zahlenwerte können innerhalb selbst gewählter Grenzen und in selbst definierten Schritten über zwei kleine Pfeiltasten ausgewählt werden. Sie können aber auch weiterhin wie bei einem Textfeld eingegeben werden. Wichtige Eigenschaften des Steuerelements sind: Value 왘 Value: bezeichnet zur Entwicklungszeit den Startwert und zur Laufzeit den vom Benutzer aktuell eingestellten Wert. 왘 Maximum, Minimum: bestimmen den größtmöglichen Wert und den kleinstmöglichen Wert der Eigenschaft Value. Es handelt sich also um die Werte, die durch die Auswahl mit den Pfeiltasten ganz oben und ganz unten erreicht werden können. 왘 Increment: Mit Increment wird die Schrittweite eingestellt, mit der sich der Wert (Eigenschaft Value) ändert, wenn der Benutzer eine der kleinen Pfeiltasten betätigt. 왘 DecimalPlaces: bestimmt die Anzahl der Nachkommastellen in der Anzeige des Zahlenauswahlfelds. 66 Verzweigungen ValueChanged 2 왘 Value: Wert 2, die Anwendung startet also bei dem Wert 2,0 für das Zahlenauswahlfeld 왘 Maximum, Minimum: Werte –5 und +5 왘 Increment: Wert 0,1 왘 DecimalPlaces: Wert 1 zur Anzeige einer einzelnen Nachkommastelle Der Code lautet: private void NumEingabe_ValueChanged(...) { LblAusgabe.Text = "Wert: " + NumEingabe.Value; } Listing 2.11 Projekt »ZahlenAufAb« 2.4 Verzweigungen Der Programmcode wird bisher rein sequenziell abgearbeitet, also eine Anweisung nach der anderen. Kontrollstrukturen ermöglichen eine Steuerung dieser Reihenfolge. Diese Kontrollstrukturen unterteilen sich in Verzweigungen und Schleifen. Verzweigungen gestatten es dem Programm, sich in verschiedene alternative Anweisungsblöcke zu verzweigen. 67 Anhang B Lösungen der Übungsaufgaben Die Bearbeitung der Beispiele, das Verständnis für ihren Aufbau sowie das selbstständige Lösen der Übungen sind ein wichtiger Schritt beim Erlernen der Programmierung. In diesem Abschnitt finden Sie jeweils eine Lösungsmöglichkeit zu jeder Übung. Lassen Sie sich nicht irritieren, wenn Ihre Lösung anders aussieht. Es ist in erster Linie wichtig, dass das Ergebnis stimmt. Vielleicht bietet Ihnen die hier vorliegende Lösung aber auch einen Denkanstoß zur Verbesserung. B.1 Lösung der Übungsaufgabe aus Kapitel 1 B.1.1 Lösung UName using System; using System.Windows.Forms; namespace UName { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void CmdMeinName_Click(object sender, EventArgs e) { LblMeinName.Text = "Claus Clever"; } private void CmdEnde_Click(object sender, EventArgs e) 515 B B.2 Lösungen der Übungsaufgaben aus Kapitel 2 Lösungen der Übungsaufgaben { y = y + 0.1; x = x + 0.1; LblAnzeige.Text = "x: " + x + "\n" + "y: " + y; Close(); } } } } private void CmdAnzeigen2_Click(...) { double z = 0.0; z = z + 0.1; x = x + 0.1; LblAnzeige.Text = "x: " + x + "\n" + "z: " + z; } B.2 Lösungen der Übungsaufgaben aus Kapitel 2 B.2.1 Lösung UDatentypen private void CmdAnzeigen_Click(...) { string nachname, vorname, strasse, plz, ort; int alter; double gehalt; nachname = "Clever"; vorname = "Claus"; strasse = "Bergstraße 34"; plz = "09445"; ort = "Brunnstadt"; alter = 32; gehalt = 2852.55; B.2.3 Lösung URechenoperatoren private void CmdAnzeigen1_Click(...) { double x; x = 3 * -2.5 + 4 * 2; LblAnzeige.Text = "Ergebnis: " + x; } } private void CmdAnzeigen2_Click(...) { double x; x = 3 * (-2.5 + 4) * 2; LblAnzeige.Text = "Ergebnis: " + x; } B.2.2 Lösung UGueltigkeitsbereich B.2.4 Lösung UVergleichsoperatoren public partial class Form1 : Form { ... private double x = 0.0; private void CmdVergleich1_Click(...) { bool p; p = 12 - 3 >= 4 * 2.5; LblAnzeige.Text = "Ergebnis: " + p; } LblAnzeige.Text = "Adresse: " + "\n" + vorname + " " + nachname + "\n" + strasse + "\n" + plz + " " + ort + "\n" + "\n" + "Alter: " + alter + "\n" + "Gehalt: " + gehalt; private void CmdAnzeigen1_Click(...) { double y = 0.0; 516 } 517 Auf einen Blick Auf einen Blick 1 Einführung ............................................................................................. 15 2 Grundlagen ............................................................................................ 39 3 Fehlerbehandlung ............................................................................... 115 4 Erweiterte Grundlagen ...................................................................... 129 5 Objektorientierte Programmierung .............................................. 187 6 Wichtige Klassen in .NET ................................................................... 247 7 Weitere Elemente eines Windows-Programms ........................ 303 8 Datenbankanwendungen mit ADO.NET ...................................... 357 9 Internetanwendungen mit ASP.NET ............................................. 413 10 Zeichnen mit GDI+ .............................................................................. 439 11 Beispielprojekte ................................................................................... 455 12 Windows Presentation Foundation .............................................. 481 Inhalt Inhalt 1 Einführung 15 1.1 Aufbau dieses Buchs ................................................................................... 15 1.2 Visual Studio 2017 ....................................................................................... 16 1.3 Mein erstes Windows-Programm ......................................................... 16 1.4 Visual Studio-Entwicklungsumgebung .............................................. 17 1.4.1 Ein neues Projekt ........................................................................ 17 1.4.2 Einfügen von Steuerelementen ............................................. 19 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.4.10 1.4.11 1.4.12 Arbeiten mit dem Eigenschaften-Fenster .......................... Speichern eines Projekts .......................................................... Das Codefenster .......................................................................... Schreiben von Programmcode ............................................... Kommentare ................................................................................ Starten, Ausführen und Beenden des Programms .......... Ausführbares Programm .......................................................... Schließen und Öffnen eines Projekts ................................... Übung ............................................................................................. Empfehlungen für Zeilenumbrüche .................................... 20 23 23 26 27 28 29 29 30 30 1.5 Arbeiten mit Steuerelementen .............................................................. 31 1.5.1 1.5.2 Steuerelemente formatieren .................................................. Steuerelemente kopieren ........................................................ 31 32 1.5.3 1.5.4 1.5.5 1.5.6 Eigenschaften zur Laufzeit ändern ....................................... Vergabe und Verwendung von Namen .............................. Verknüpfung von Texten, mehrzeilige Texte .................... Eigenschaft BackColor, Farben allgemein .......................... 33 36 36 37 2 Grundlagen 39 2.1 Variablen und Datentypen ....................................................................... 39 2.1.1 2.1.2 2.1.3 39 40 40 Namen, Werte ............................................................................. Deklarationen .............................................................................. Datentypen ................................................................................... 5 Inhalt Inhalt 2.1.4 2.1.5 2.1.6 2.2 2.3 Gültigkeitsbereich ...................................................................... Konstanten ................................................................................... Enumerationen ........................................................................... 44 47 48 Operatoren ...................................................................................................... 50 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 Rechenoperatoren ...................................................................... Vergleichsoperatoren ................................................................ Logische Operatoren ................................................................. Verkettungsoperator ................................................................. Zuweisungsoperatoren ............................................................ Rangfolge der Operatoren ....................................................... 50 53 54 55 56 56 3 Fehlerbehandlung 115 3.1 Entwicklung eines Programms ............................................................... 115 3.2 Fehlerarten ...................................................................................................... 116 3.3 Syntaxfehler und IntelliSense ................................................................. 117 Einfache Steuerelemente .......................................................................... 58 3.4 Laufzeitfehler und Exception Handling .............................................. 119 3.4.1 119 2.3.1 2.3.2 2.3.3 2.3.4 2.4 2.5 2.6 2.7 6 Panel ............................................................................................... Zeitgeber ....................................................................................... Textfelder ...................................................................................... Zahlenauswahlfeld .................................................................... 58 59 63 66 Verzweigungen ............................................................................................. 67 2.4.1 2.4.2 2.4.3 68 75 78 if...else ............................................................................................. switch...case .................................................................................. Übungen ........................................................................................ Verzweigungen und Steuerelemente ................................................. 79 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 Kontrollkästchen ......................................................................... Optionsschaltflächen ................................................................ Mehrere Ereignisse in einer Methode behandeln ........... Mehrere Gruppen von Optionsschaltflächen ................... Methode ohne Ereignis, Modularisierung ......................... Schieberegler ............................................................................... 79 82 84 86 89 90 Schleifen ........................................................................................................... 92 2.6.1 2.6.2 2.6.3 for-Schleife .................................................................................... while- und do...while-Schleife ................................................ Übungen ........................................................................................ 92 95 98 Schleifen und Steuerelemente ............................................................... 101 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 101 101 102 104 104 106 Listenfeld ....................................................................................... Listenfeld füllen .......................................................................... Wichtige Eigenschaften ........................................................... foreach-Schleife .......................................................................... Wechsel der Auswahl ................................................................ Wichtige Methoden ................................................................... 2.7.7 2.7.8 3.5 Mehrfachauswahl ...................................................................... Kombinationsfelder ................................................................... Programm mit Laufzeitfehlern .............................................. 109 110 3.4.2 Einfaches Exception Handling ............................................... 121 3.4.3 Erweitertes Exception Handling ............................................ 123 Logische Fehler und Debugging ............................................................. 124 3.5.1 3.5.2 Einzelschrittverfahren .............................................................. Haltepunkte ................................................................................. 124 126 3.5.3 Überwachungsfenster .............................................................. 126 4 Erweiterte Grundlagen 129 4.1 Steuerelemente aktivieren ...................................................................... 129 4.1.1 4.1.2 Ereignis Enter ............................................................................... Eigenschaften Enabled und Visible ...................................... 129 132 Bedienung per Tastatur ............................................................................. 135 4.2.1 4.2.2 Eigenschaften TabIndex und TabStop ................................. Tastenkombination für Steuerelemente ............................ 135 136 Ereignisgesteuerte Programmierung .................................................. 137 4.3.1 4.3.2 4.3.3 4.3.4 Eine Ereigniskette ....................................................................... Endlose Ereignisketten ............................................................. Textfelder koppeln ..................................................................... Tastatur und Maus ..................................................................... 137 139 141 142 Datenfelder ..................................................................................................... 144 4.4.1 4.4.2 144 146 4.2 4.3 4.4 Eindimensionale Datenfelder ................................................. Ein Feld durchsuchen ................................................................ 7 Inhalt Inhalt 5.7 Delegates ......................................................................................................... 205 5.8 Statische Elemente ...................................................................................... 208 5.9 Vererbung ........................................................................................................ 211 5.10 Konstruktoren bei Vererbung ................................................................. 215 Methoden ......................................................................................................... 160 5.11 Polymorphie .................................................................................................... 217 4.5.1 4.5.2 4.5.3 4.5.4 4.5.5 4.5.6 4.5.7 4.5.8 5.12 Schnittstellen ................................................................................................. 221 5.13 Strukturen ........................................................................................................ 224 4.4.3 4.4.4 4.4.5 4.4.6 4.4.7 4.5 4.6 Weitere Feldoperationen ......................................................... Mehrdimensionale Datenfelder ............................................ Datenfelder initialisieren ......................................................... Verzweigte Datenfelder ........................................................... Datenfelder sind dynamisch ................................................... Einfache Methoden .................................................................... Übergabe per Referenz ............................................................. Methoden mit Rückgabewerten ........................................... Optionale Argumente ............................................................... Benannte Argumente ................................................................ Beliebig viele Argumente ......................................................... Rekursiver Aufruf ........................................................................ Übungen zu Methoden ............................................................ 148 150 155 156 158 161 163 167 169 170 172 173 176 5.14 Generische Typen ......................................................................................... 228 5.14.1 5.14.2 5.14.3 Eine Liste von Zeichenketten .................................................. Eine Liste von Objekten ............................................................ Ein Dictionary von Objekten ................................................... 229 232 235 Eigene Klassenbibliotheken ..................................................................... 238 5.15.1 5.15.2 DLL erstellen ................................................................................. DLL nutzen .................................................................................... 239 241 5.16 Mehrere Formulare ...................................................................................... 242 6 Wichtige Klassen in .NET 247 Klasse String für Zeichenketten ............................................................. 247 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.1.6 6.1.7 6.1.8 6.1.9 Eigenschaften der Klasse String ............................................ Trimmen ........................................................................................ Splitten ........................................................................................... Suchen ............................................................................................ Einfügen ......................................................................................... Löschen .......................................................................................... Teilzeichenkette ermitteln ...................................................... Zeichen ersetzen ......................................................................... Ausgabe formatieren ................................................................ 248 250 251 253 256 258 259 261 262 Datum und Uhrzeit ...................................................................................... 264 6.2.1 6.2.2 6.2.3 264 266 269 5.15 Konsolenanwendung .................................................................................. 176 4.6.1 4.6.2 4.6.3 4.6.4 4.6.5 4.6.6 Anwendung erzeugen ............................................................... Ein- und Ausgabe von Text ...................................................... Eingabe einer Zahl ...................................................................... Erfolgreiche Eingabe einer ganzen Zahl ............................. Ausgabe formatieren ................................................................ Aufruf von der Kommandozeile ............................................ 176 177 178 180 181 183 6.1 8 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 Namensräume ............................................................................................... 198 5.6 Referenzen, Vergleiche und Typen ....................................................... 199 5.6.1 5.6.2 5.6.3 5.6.4 5.6.5 200 201 202 203 205 Referenzen .................................................................................... Operator == .................................................................................. Objekte vergleichen ................................................................... Typ eines Objekts ermitteln .................................................... Typ eines Objekts durch Vergleich ermitteln .................... 6.2 Eigenschaften von DateTime ................................................. Rechnen mit Datum und Uhrzeit .......................................... DateTimePicker ........................................................................... 9 Inhalt Inhalt 6.3 Dateien und Verzeichnisse ....................................................................... 272 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.3.8 6.3.9 6.3.10 6.4 6.5 7 7.1 7.2 Lesen aus einer Textdatei ........................................................ Schreiben in eine Textdatei ..................................................... Sicheres Lesen aus einer Textdatei ....................................... Sicheres Schreiben in eine Textdatei ................................... Die Klassen File und Directory ................................................ Das aktuelle Verzeichnis .......................................................... Eine Liste der Dateien ................................................................ Eine Liste der Dateien und Verzeichnisse ........................... Informationen über Dateien und Verzeichnisse .............. Bewegen in der Verzeichnishierarchie ................................ 272 274 276 279 280 281 282 283 284 285 XML-Dateien ................................................................................................... 287 6.4.1 6.4.2 Aufbau von XML-Dateien ......................................................... Schreiben in eine XML-Datei ................................................... 287 288 6.4.3 6.4.4 6.4.5 Lesen aus einer XML-Datei ...................................................... Schreiben von Objekten ........................................................... Lesen von Objekten .................................................................... 290 292 294 Rechnen mit der Klasse Math ................................................................. 296 Weitere Elemente eines WindowsProgramms 303 Hauptmenü ..................................................................................................... 303 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.1.6 303 306 308 308 310 311 Kontextmenü ................................................................................................. 312 7.2.1 7.2.2 7.3 10 Erstellung des Hauptmenüs ................................................... Code des Hauptmenüs ............................................................. Klasse Font .................................................................................... Schriftart ........................................................................................ Schriftgröße .................................................................................. Schriftstil ....................................................................................... Erstellung des Kontextmenüs ................................................ Code des Kontextmenüs .......................................................... 312 313 Symbolleiste ................................................................................................... 315 7.3.1 7.3.2 315 316 Erstellung der Symbolleiste .................................................... Code der Symbolleiste .............................................................. 7.4 Statusleiste ...................................................................................................... 319 7.4.1 7.4.2 Erstellung der Statusleiste ...................................................... Code der Statusleiste ................................................................ 319 319 7.5 Eingabedialogfeld ........................................................................................ 321 7.6 Ausgabedialogfeld ....................................................................................... 325 7.7 Standarddialogfelder .................................................................................. 331 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 Datei öffnen ................................................................................. Datei speichern unter ............................................................... Verzeichnis auswählen ............................................................. Farbe auswählen ......................................................................... Schrifteigenschaften auswählen .......................................... 331 333 335 337 338 7.8 Steuerelement ListView ............................................................................ 339 7.9 Steuerelement Chart ................................................................................... 343 7.10 Steuerelement DataGridView ................................................................ 347 7.11 Lokalisierung .................................................................................................. 352 8 Datenbankanwendungen mit ADO.NET 357 8.1 Was sind relationale Datenbanken? .................................................... 357 8.1.1 8.1.2 8.1.3 8.1.4 Beispiel »Lager« ........................................................................... Indizes ............................................................................................ Relationen ..................................................................................... Übungen ........................................................................................ 357 360 362 366 Anlegen einer Datenbank in MS Access ............................................. 368 8.2.1 8.2.2 Aufbau von Access ..................................................................... Datenbankentwurf in MS Access 2016 ............................... 368 369 8.2.3 Übungen ........................................................................................ 374 Datenbankzugriff mit C# innerhalb von Visual Studio ............... 374 8.3.1 8.3.2 8.3.3 8.3.4 8.3.5 375 376 376 377 377 8.2 8.3 Beispieldatenbank ...................................................................... Ablauf eines Zugriffs ................................................................. Verbindung ................................................................................... SQL-Befehl ..................................................................................... OleDb .............................................................................................. 11 Inhalt Inhalt Auswahlabfrage .......................................................................... Aktionsabfrage ............................................................................ 378 380 9.2 Ein lokaler Webserver ................................................................................. 415 9.2.1 Eine erste Internetanwendung .............................................. 415 SQL-Befehle ..................................................................................................... 382 9.3 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 Auswahl mit SELECT .................................................................. Ändern mit UPDATE ................................................................... Löschen mit DELETE ................................................................... Einfügen mit INSERT .................................................................. Typische Fehler in SQL ............................................................... 383 387 388 388 388 Eine erste ASP.NET-Anwendung ............................................................ 418 9.3.1 Fehlerhafte Programmierung ................................................. 420 9.4 Formatierung von Internetseiten .......................................................... 421 9.5 Senden und Auswerten von Formulardaten .................................... 423 9.6 Weitere Formularelemente ..................................................................... 425 Ein Verwaltungsprogramm ...................................................................... 390 9.7 Ein Kalenderelement ................................................................................... 428 8.5.1 8.5.2 8.5.3 8.5.4 8.5.5 8.5.6 Initialisierung ............................................................................... Alle Datensätze sehen .............................................................. Datensatz einfügen ................................................................... Datensatz ändern ....................................................................... Datensatz löschen ...................................................................... Datensatz suchen ....................................................................... 390 391 394 396 399 401 9.8 ASP.NET und ADO.NET ............................................................................... 430 9.9 Datenbank im Internet ändern .............................................................. 433 10 Zeichnen mit GDI+ 439 Abfragen über mehrere Tabellen .......................................................... 403 8.6.1 8.6.2 8.6.3 8.6.4 8.6.5 Datenbankmodell und Tabellen ............................................ Alle Personen ............................................................................... Anzahl der Kunden ..................................................................... Alle Kunden mit allen Projekten ............................................ Alle Personen mit allen Projektzeiten .................................. 403 405 405 405 406 10.1 Grundlagen von GDI+ ................................................................................. 439 10.2 Linie, Rechteck, Polygon und Ellipse zeichnen ................................ 439 8.6.6 8.6.7 8.6.8 8.6.9 Alle Personen mit Zeitsumme ................................................ Alle Personen mit allen Personenzeiten ............................. Alle Projekte mit allen Zeitsumme ....................................... JOIN oder WHERE ....................................................................... 407 408 409 409 10.2.1 10.2.2 10.2.3 10.2.4 10.2.5 10.2.6 Grundeinstellungen ................................................................... Linie ................................................................................................. Rechteck ......................................................................................... Polygon ........................................................................................... Ellipse .............................................................................................. Dicke und Farbe ändern, Zeichnung löschen .................... 440 441 442 443 443 444 Verbindung zu MySQL ................................................................................ 410 10.3 Text schreiben ................................................................................................ 445 8.7.1 410 10.4 Bilder darstellen ............................................................................................ 447 10.5 Dauerhaft zeichnen ..................................................................................... 449 10.6 Zeichnen einer Funktion ............................................................................ 451 11 Beispielprojekte 455 11.1 Spielprogramm Tetris ................................................................................. 455 11.1.1 11.1.2 455 456 8.3.6 8.3.7 8.4 8.5 8.6 8.7 9 9.1 12 .NET-Treiber .................................................................................. Internetanwendungen mit ASP.NET 413 Grundlagen von Internetanwendungen ............................................ 413 9.1.1 9.1.2 9.1.3 413 414 415 Statische Internetanwendungen .......................................... Dynamische Internetanwendungen .................................... Vorteile von ASP.NET ................................................................. Spielablauf .................................................................................... Programmbeschreibung .......................................................... 13 Inhalt 11.1.3 11.1.4 11.1.5 11.1.6 11.1.7 11.1.8 11.1.9 11.1.10 11.2 Steuerelemente ........................................................................... Initialisierung des Programms ............................................... Erzeugen eines neuen Panels ................................................. Der Zeitgeber ............................................................................... Panels löschen ............................................................................. Panels seitlich bewegen ........................................................... Panels nach unten bewegen ................................................... Pause ............................................................................................... Lernprogramm Vokabeln .......................................................................... 468 11.2.1 11.2.2 11.2.3 11.2.4 11.2.5 11.2.6 11.2.7 Benutzung des Programms ..................................................... Erweiterung des Programms .................................................. Initialisierung des Programms ............................................... Ein Test beginnt .......................................................................... Zwei Hilfsmethoden .................................................................. Die Antwort prüfen .................................................................... Das Benutzermenü .................................................................... 468 470 471 472 475 476 477 12 Windows Presentation Foundation 481 12.1 Layout ................................................................................................................ 482 12.2 Steuerelemente ............................................................................................. 485 12.3 Frame-Anwendung ...................................................................................... 488 12.4 Zweidimensionale Grafik .......................................................................... 491 12.5 Dreidimensionale Grafik ........................................................................... 494 12.6 Animation ........................................................................................................ 498 12.7 WPF und Windows Forms ......................................................................... 501 12.7.1 Windows Forms in WPF ............................................................ 502 12.7.2 WPF in Windows Forms ............................................................ 503 A Installation und technische Hinweise ................................................. 507 B Lösungen der Übungsaufgaben ............................................................. 515 Index .................................................................................................................................... 14 457 458 460 461 462 466 467 468 535 Index Index - .......................................................................................... 50 --......................................................................................... 51 ^ ......................................................................... 54, 74, 312 _ ....................................................................................... 385 ! .......................................................................................... 54 !=........................................................................................ 53 (int) ............................................................................ 49, 69 [,]...................................................................................... 152 []....................................................................................... 145 [][].................................................................................... 157 { }........................................................................................ 24 @ ..................................................................................... 279 * .......................................................................................... 50 *=........................................................................................ 56 /.......................................................................................... 50 /* ........................................................................................ 27 //........................................................................................ 27 /= ....................................................................................... 56 & ..................................................................... 55, 136, 305 &&.............................................................................. 54, 72 #............................................................................. 182, 263 % ............................................................................... 50, 385 %=...................................................................................... 56 + ........................................................................... 36, 50, 55 ++....................................................................................... 51 +=....................................................................................... 56 < ................................................................................ 53, 384 <=.............................................................................. 53, 384 <>..................................................................................... 384 -=........................................................................................ 56 = ................................................................................ 56, 384 ==.................................................................... 53, 153, 201 > ................................................................................ 53, 384 >=.............................................................................. 53, 384 | ................................................................................. 55, 312 || .................................................................................. 54, 73 1:1-Relation .................................................................. 362 1:n-Relation ....................................................... 360, 363 3D-Körper .................................................................... 494 A Abfrage Datenbank.............................................................. 369 accdb-Datei ....................................................... 370, 375 Acos() ............................................................................. 297 Add() Columns .................................................................. 342 Controls ................................................................... 461 Datum und Uhrzeit ............................................. 267 generische Liste ................................. 229, 394, 461 Items ......................................................................... 342 Listenfeld................................................................. 101 Series ......................................................................... 345 SubItems.................................................................. 342 AddHours().................................................................. 266 Addition .......................................................................... 50 AddMilliseconds() .................................................... 266 AddMonths() .............................................................. 266 AddSeconds().............................................................. 266 AddXY() Points........................................................................ 345 AddYears() ................................................................... 266 ADO.NET....................................................................... 357 Aktionsabfrage .......................................................... 380 Aktivierungsreihenfolge ....................................... 135 AND................................................................................ 384 Anführungszeichen.................................................... 43 Angle LabelStyle................................................................ 346 Animation ................................................................... 498 Anweisung ..................................................................... 26 im Block ...................................................................... 68 mehrfach durchlaufen .......................................... 92 Anwendung abbrechen ............................................................... 181 Konfigurationsdatei ........................................... 513 mehrsprachig ........................................................ 352 weitergeben............................................................ 511 App.config ................................................................... 513 Append ......................................................................... 274 appSettings ................................................................. 513 ArcSegment ................................................................ 493 args ................................................................................. 184 535 Index Index Argument .................................................................... 161 beliebig viele .......................................................... 172 benannt.................................................................... 170 optional ................................................................... 169 ArgumentOutOfRangeException ...................... 256 Arkusfunktion ........................................................... 297 Array Klasse............................................................... 148, 158 as ........................................................................... 153, 246 Asin().............................................................................. 297 asp Calendar ............................................................... 429 asp Label....................................................................... 422 ASP.NET ........................................................................ 413 Programmierfehler.............................................. 420 Atan() ............................................................................. 297 Attached Event .......................................................... 484 Attached Property .................................................... 484 AttributeCount XmlTextReader ..................................................... 291 Auflistung ...................................................................... 92 Aufzählung.................................................................... 48 Ausgabe Dialogfeld................................................................ 325 formatieren ............................................................ 181 mehrzeilig .................................................................. 37 Auskommentierung.................................................. 28 Austauschformat...................................................... 251 Auswahlabfrage......................................................... 378 Axis................................................................................. 345 AxisX ChartArea................................................................ 345 AxisY ChartArea................................................................ 345 B BackColor ....................................................................... 37 base................................................................................. 213 base().............................................................................. 216 Basisklasse ................................................................... 212 Methode erreichen .............................................. 213 Bedingung ..................................................................... 68 Befehlsschaltfläche .................................................... 19 Bericht Datenbank .............................................................. 369 Bezeichnungsfeld ....................................................... 19 536 Beziehung.......................................................... 357, 360 erstellen ................................................................... 373 Bézierkurve ................................................................. 492 Bild, in Zeichnung .................................................... 447 Bildlaufleiste.................................................................. 63 Bitweiser Operator...................................................... 55 body ............................................................................... 417 bool ................................................................................... 40 Border Style ................................................................... 22 break .................................................................. 76, 93, 96 Breakpoint................................................................... 126 Browser......................................................................... 413 Brush ............................................................................. 439 Button .............................................................................. 19 Button (Maus) ............................................................ 144 byte ................................................................................... 40 C Calendar ....................................................................... 429 Canvas........................................................................... 483 Cascading Style Sheets ........................................... 414 case.................................................................................... 76 Cast......................................................... 49, 69, 224, 246 catch............................................................................... 122 Ceiling() ........................................................................ 297 char.......................................................................... 41, 250 Chart .............................................................................. 343 ChartAreas Chart ......................................................................... 345 ChartImageFormat .................................................. 347 ChartType Series ......................................................................... 345 CheckBox ........................................................................ 79 Internetformular.................................................. 425 WPF............................................................................ 487 Checked .................................................................... 80, 82 in Menü.................................................................... 307 CheckedChanged .................................................. 79, 82 Child WindowsFormsHost ........................................... 502 class................................................................................ 188 Clear() generische Liste .................................................... 393 Series ......................................................................... 345 Zeichnung ............................................................... 445 ClickOnce-Verteilung.............................................. 511 Clicks (Maus)............................................................... 144 Clone() ................................................................. 150, 221 Close() Form ................................................................... 27, 244 OleDbConnection................................................. 377 StreamReader........................................................ 274 XmlTextReader ..................................................... 291 XmlTextWriter ...................................................... 290 Code Ansicht ........................................................................ 23 auskommentieren .................................................. 28 editieren...................................................................... 27 Code-Ansicht .............................................................. 482 Collection..................................................................... 228 Color..................................................... 37, 337, 338, 445 ColorDialog ................................................................. 337 ColumnIndex ............................................................. 352 Columns ....................................................................... 349 ListView.................................................................... 342 Combobox................................................................... 110 CommandText........................................................... 377 Common Controls ..................................................... 20 Community-Version ............................................... 507 ConfigurationManager .......................................... 514 Connection.................................................................. 377 ConnectionString ........................................... 376, 432 MS Access vor 2007............................................. 380 Sammlung .............................................................. 411 Connector/NET.......................................................... 410 Console ......................................................................... 178 const ................................................................................ 48 Container .............................................................. 58, 417 Contains() generische Liste..................................................... 229 ContainsKey()............................................................. 237 ContainsValue()......................................................... 237 ContextMenuStrip ................................................... 312 continue .................................................................. 93, 96 Controls .............................................................. 246, 461 Add().......................................................................... 207 Remove().................................................................. 207 Convert ToDouble() ................................................................. 64 ToInt32().......................................................... 179, 324 Cos()................................................................................ 297 Count ............................................................................. 102 generische Liste..................................................... 229 COUNT()........................................................................ 405 Create Öffnungsmodus........................................... 274, 275 CreateGraphics() ....................................................... 439 cs-Datei ......................................................................... 189 CSS .................................................................................. 414 CSV-Datei ..................................................................... 251 CurrentUICulture ..................................................... 354 D Data Source ....................................................... 376, 411 DataBind().................................................................... 432 DataGrid....................................................................... 432 DataGridView............................................................. 347 CellEventArgs ........................................................ 352 ColumnCollection................................................ 349 Row............................................................................ 351 RowCollection ....................................................... 349 TextBoxColumn ................................................... 349 DataSource .................................................................. 432 Datei Änderungszeitpunkt........................................... 281 Erzeugungszeitpunkt ......................................... 280 Information über ........................................ 277, 280 lesen .......................................................................... 272 öffnen ....................................................................... 274 öffnen, Dialog........................................................ 331 schließen.................................................................. 274 speichern ................................................................. 272 speichern, Dialog ................................................. 333 Zugriffszeitpunkt ................................................. 280 Datenbank................................................................... 357 Anzahl Datensätze .............................................. 405 Datensätze gruppieren...................................... 408 erstellen ................................................................... 370 Summe über Datensätze................................... 408 verknüpfte Abfrage ............................................. 403 Datenbankdatei......................................................... 368 Datenbanksystem .................................................... 360 Datenfeld ..................................................................... 144 Dimensionsgröße................................................. 152 durchsuchen ................................................. 146, 150 dynamisch verändern ........................................ 158 eindimensional..................................................... 144 initialisieren ........................................................... 155 Klasse........................................................................ 148 kopieren................................................................... 150 537 Index Index Datenfeld (Forts.) mehrdimensional ................................................ 150 nicht rechteckig .................................................... 156 Referenz auf ........................................................... 160 sortieren................................................................... 150 übergeben ............................................................... 163 Verweis auf ............................................................. 145 verzweigt ................................................................. 156 Datenkapselung .............................................. 189, 214 Datenkonnektivität ................................................. 375 Datenpunkt Chart ......................................................................... 345 Datenreihe................................................................... 345 Datensatz ..................................................................... 358 ändern ...................................................................... 387 auswählen............................................................... 383 einfügen................................................................... 388 löschen ..................................................................... 388 sortieren................................................................... 386 Datentyp ........................................................................ 40 benutzerdefiniert ................................................. 224 generisch ................................................................. 228 DateTime...................................................................... 264 DateTimePicker......................................................... 269 DateTimePickerFormat.......................................... 269 Datum ........................................................................... 264 berechnen................................................................ 266 Bestandteil.............................................................. 265 eingeben .................................................................. 269 Day.................................................................................. 264 DayOfWeek .......................................................... 49, 264 DayOfYear.................................................................... 264 Debug ............................................................................ 124 beenden............................................................. 66, 121 Debuggen Konsolenanwendung ......................................... 185 decimal .................................................................... 40, 69 DecimalPlaces .............................................................. 66 default ............................................................................. 76 default.aspx ................................................................ 418 Delegate........................................................................ 205 DELETE ................................................................ 377, 388 DESC............................................................................... 386 Description.................................................................. 335 Design-Ansicht .......................................................... 482 Detailtabelle................................................................ 363 Dezimaltrennzeichen ............................................. 396 Diagramm.................................................................... 343 538 DialogResult ..................................................... 326, 331 DialogResultOk.......................................................... 333 Dictionary generisch ................................................................. 235 Dictionary< >.............................................................. 237 Directory ...................................................................... 280 DivideByZeroException......................................... 120 Klasse........................................................................ 124 Division ........................................................................... 50 ganzer Zahlen........................................................... 43 DLL.................................................................................. 238 erstellen ................................................................... 239 nutzen ...................................................................... 241 do while ........................................................................... 95 Doppelklick .................................................................... 26 Double........................................................................... 371 double .............................................................................. 40 DrawEllipse()............................................................... 443 DrawImage() ............................................................... 448 DrawLine() ................................................................... 442 DrawPolygon()........................................................... 443 DrawRectangle()........................................................ 442 DrawString() ............................................................... 447 Dreidimensionale Grafik....................................... 494 DropDown................................................................... 110 DropDownList............................................................ 110 DropDownStyle......................................................... 110 Dynamic Link Library ............................................. 238 E e, Exponentialschreibweise..................................... 43 E, Konstante................................................................ 297 Eigenschaft.................................................................. 188 ändern .................................................................. 18, 33 statisch..................................................................... 208 Eigenschaften-Fenster................................ 18, 21, 84 Eigenschaftsmethode ............................................. 192 Ein- und Ausgabe...................................................... 178 Eingabe ............................................................................ 63 Dialogfeld ............................................................... 321 einer Zahl ................................................................ 178 Eingabeaufforderung.............................................. 184 Eingabeformular....................................................... 423 Einzelschrittverfahren ........................................... 124 ElementHost............................................................... 503 ElementPosition ....................................................... 345 Ellipse ............................................................................ 443 else.................................................................................... 68 Enabled Steuerelement ....................................................... 132 Timer.................................................................. 60, 468 Enter............................................................................... 129 Entwicklung eines Programms ................................................. 115 Enumeration ................................................................ 48 Environment .............................................................. 336 Equals() ............................................................... 202, 233 Ereignis .................................................................... 19, 23 Ansicht ........................................................................ 84 mehrere....................................................................... 84 Tastatur, Maus...................................................... 142 Ereigniskette............................................................... 137 endlos ....................................................................... 139 Ereignismethode Verweis auf ............................................................. 205 Ereignisprozedur erzeugen (WPF) ..................................................... 484 Eulersche Zahl ............................................................ 297 Event Routing ............................................................ 484 Event Trigger .............................................................. 498 Exception Handling................................................. 119 Exception, Klasse ...................................................... 122 ExecuteNonQuery() ....................................... 378, 382 ExecuteReader() ........................................................ 377 exe-Datei ............................................................... 29, 184 Exists() Directory.................................................................. 280 File.............................................................................. 277 Exp() ............................................................................... 297 Exponentialschreibweise ........................................ 43 eXtensible Application Markup Language ..... 481 F f, float............................................................................... 43 false .................................................................................. 43 Farbe Dialogfeld................................................................ 337 Fehler............................................................................. 116 logischer .................................................................. 124 Feld Datenbank .............................................................. 358 siehe Datenfeld ..................................................... 144 Felddatentyp .............................................................. 371 Feldgröße..................................................................... 371 Feldname ..................................................................... 358 File ........................................................................ 277, 280 FileMode ...................................................................... 274 FileNames .................................................................... 331 FileStream.................................................................... 272 FileSystemEntries().................................................. 280 FillEllipse() ................................................................... 443 FillPolygon()................................................................ 443 FillRectangle() ............................................................ 442 Filter............................................................................... 331 Fixed Single.................................................................... 22 float ................................................................................... 40 Floor() ............................................................................ 297 Focus()........................................................................... 142 FolderBrowserDialog .............................................. 335 Font ............................................................. 263, 308, 338 Font.Style..................................................................... 312 FontDialog................................................................... 338 FontFamily .................................................................. 311 FontStyle.Bold............................................................ 312 FontStyle.Italic........................................................... 312 for....................................................................................... 92 foreach .......................................................................... 104 Form ................................................................................. 17 form (HTML)............................................................... 424 Form_Activated ........................................................ 131 Form_Load .................................................................. 101 Format DateTimePicker .................................................... 269 Format()........................................................................ 262 FormatException...................................................... 120 Klasse........................................................................ 123 Formatvorlage ........................................................... 414 Formular ......................................................................... 17 aktivieren ................................................................ 131 anzeigen .................................................................. 244 Datenbank.............................................................. 369 hinzufügen ............................................................. 242 importieren ............................................................ 510 löschen ..................................................................... 510 mehrere.................................................................... 242 Start- ......................................................................... 510 wird geladen .......................................................... 101 Formularansicht .......................................................... 23 Formularbasierte Ressourcen ............................. 352 Formularvorlage ....................................................... 509 539 Index Index Fortschrittsbalken .................................................... 319 Frame............................................................................. 488 FromArgb()............................................................. 38, 91 FromFile()..................................................................... 447 Image........................................................................ 342 FullRowSelect ListView.................................................................... 342 Funktion mathematische..................................................... 296 zeichnen................................................................... 451 hexadezimal .................................................................. 43 Hide()............................................................................. 245 Hilfslinien....................................................................... 31 Hilfstabelle .................................................................. 360 Hoch............................................................................... 297 Hour............................................................................... 264 HTML ............................................................................. 413 html ............................................................................... 417 HTML-Markierung ................................................... 417 Hyperlink..................................................................... 491 G I GDI+ ............................................................................... 439 Generische Liste ..................................... 229, 232, 459 füllen ......................................................................... 394 leeren ........................................................................ 393 Generischer Datentyp ............................................ 228 Generisches Dictionary.......................................... 235 get-Accessor................................................................ 193 GetCreationTime() ................................................... 280 GetCurrentDirectory() ............................................ 280 GetFiles() ...................................................................... 280 GetLastAccessTime() ............................................... 280 GetLastWriteTime() ................................................. 281 GetType()...................................................................... 203 GetUpperBound() ..................................................... 152 Gleich...................................................................... 53, 384 Gleichheitszeichen.............................................. 26, 56 goto case......................................................................... 76 Grafik ................................................................... 491, 494 Graphics ....................................................................... 439 Grid................................................................................. 490 Größer als ............................................................. 53, 384 GROUP BY .................................................................... 408 GroupBox ...................................................................... 87 Gültigkeitsbereich............................................. 44, 162 ICloneable.................................................................... 221 id...................................................................................... 419 IEquatable.................................................................... 233 if.......................................................................................... 68 Image............................................................................. 342 auf Button............................................................... 315 ImageList ................................................................ 342 in Zeichnung .......................................................... 447 ImageList ..................................................................... 342 Implementation........................................................ 221 Increment NumericUpDown .................................................... 66 Index Datenbank..................................................... 357, 360 Datenfeld................................................................. 146 eindeutig ................................................................. 361 index.htm.................................................................... 416 IndexOf() Array ......................................................................... 150 generische Liste .................................................... 229 Zeichenkette........................................................... 253 IndexOfAny().............................................................. 253 IndexOutOfRangeException ............................... 146 Initial Catalog............................................................. 411 InitialDirectory.......................................................... 331 InitializeComponent()............................................... 25 Inkonsistenz ............................................................... 359 INNER JOIN.................................................................. 406 input .............................................................................. 425 InputBox() ................................................................... 321 INSERT................................................................. 377, 388 Insert() generische Liste .................................................... 229 ListBox...................................................................... 106 H Haltepunkt .................................................................. 126 entfernen ................................................................. 126 Hauptmenü ...................................................... 303, 468 head................................................................................ 417 Headertext .................................................................. 350 Height.............................................................................. 33 540 Insert() (Forts.) Zeichenkette........................................................... 256 Installation .................................................................. 507 Installationsprogramm.......................................... 511 Instanziierung............................................................ 191 int...................................................................................... 40 Integrität, referentielle........................................... 374 IntelliSense.................................................................. 117 Interaction................................................................... 322 Interface ....................................................................... 221 Internetanwendung ................................................ 413 Daten senden......................................................... 423 dynamisch .............................................................. 414 erstellen ................................................................... 415 Internetdatenbank................................................... 430 ändern ...................................................................... 433 Internetseite, formatieren .................................... 421 Interval............................................................................ 60 Timer......................................................................... 321 is ...................................................................................... 205 IsLoaded ....................................................................... 488 IsPostBack.................................................................... 424 Items .............................................................................. 101 ListView.................................................................... 342 J Jahr ................................................................................. 264 JavaScript ..................................................................... 414 Join geschachtelt ........................................................... 407 JOIN oder WHERE ..................................................... 409 K Kalender ....................................................................... 428 Kamera.......................................................................... 496 KeyCode........................................................................ 144 KeyDown...................................................................... 143 KeyEventArgs............................................................. 143 Keys................................................................................ 144 Dictionary ............................................................... 238 KeyUp............................................................................ 143 KeyValue ...................................................................... 144 Klammer geschweift .................................................... 24, 68, 93 Klammer (Forts.) rund.............................................................................. 57 Klasse................................................................................ 25 abgeleitet ................................................................ 212 Definition ................................................................ 188 ermitteln......................................................... 203, 205 Name ........................................................................ 188 statisches Element............................................... 208 Klassenbibliothek eigene ....................................................................... 238 Klassenhierarchie..................................................... 211 Kleiner als ............................................................. 53, 384 Kombinationsfeld .................................................... 110 in Menü.................................................................... 305 Kommandozeile ....................................................... 183 Aufruf ....................................................................... 184 Kommentarzeile.......................................................... 27 Konfigurationsdaten .............................................. 512 Konsolenanwendung ............................................. 176 Konstante ....................................................................... 47 integriert .................................................................... 47 Konstruktor ...................................................... 194, 215 Kontextmenü ............................................................ 312 Kontrollkästchen......................................................... 79 in Menü.................................................................... 305 Kontrollstruktur .......................................................... 67 Koordinatensystem................................................. 494 Kosinus......................................................................... 297 Kreiszahl....................................................................... 297 L Label.................................................................................. 19 WPF............................................................................ 487 LabelStyle Axis............................................................................ 346 Language...................................................................... 353 LargeChange Schieberegler ............................................................ 91 LargeImageList ListView ................................................................... 342 LastIndexOf().............................................................. 253 Laufbedingung ............................................................. 93 Laufzeitfehler ............................................................. 119 Layout ........................................................................... 482 Legends Chart ......................................................................... 345 541 Index Index Length ........................................................................... 248 Licht ............................................................................... 496 LIKE................................................................................. 385 LineSegment............................................................... 493 Linie................................................................................ 442 List< > ............................................................................ 230 ListBox .......................................................................... 101 WPF............................................................................ 487 ListBoxItem WPF............................................................................ 488 Liste generisch ........................................................ 229, 232 Listenansicht .............................................................. 339 Listenfeld ..................................................................... 101 ListView ........................................................................ 339 ListViewItem .............................................................. 342 localhost ....................................................................... 417 Localizable ................................................................... 353 Location................................................................... 33, 58 Log()................................................................................ 297 Log10()........................................................................... 297 Logarithmus ............................................................... 297 Lokal................................................................................. 44 Lokalisierung.............................................................. 352 long................................................................................... 40 Long Integer................................................................ 371 M m, Decimal .................................................................... 43 m:n-Relation............................................................... 363 Main() ............................................................................ 177 MainWindow.xaml .................................................. 482 MainWindow.xaml.cs ............................................. 484 Margin........................................................................... 484 Markierungssprache ............................................... 413 Mastertabelle.............................................................. 363 Material ........................................................................ 496 Math............................................................................... 296 Maus Ereignis..................................................................... 142 MaxDate DateTimePicker .................................................... 271 Maximum Datenfeld................................................................. 146 Fortschrittsbalken ............................................... 321 NumericUpDown .................................................... 66 542 Maximum (Forts.) Schieberegler ............................................................ 91 MaxLength Textfeld ....................................................................... 63 MaxSize ........................................................................ 338 Mehrfachauswahl..................................................... 109 Steuerelemente ........................................................ 31 switch .......................................................................... 75 Mehrfachvererbung ................................................ 221 Mehrsprachigkeit ..................................................... 352 Menü ............................................................................. 303 MenuStrip.................................................................... 303 MeshGeometry3D.................................................... 496 Message ........................................................................ 122 MessageBox................................................................ 325 MessageBoxButtons................................................ 326 MessageBoxIcon....................................................... 326 Methode ............................................................. 161, 188 gekapselt .................................................................... 25 mit Rückgabewert ............................................... 167 ohne Ereignis ............................................................ 89 ohne Rückgabewert ............................................... 25 statisch..................................................................... 208 überladen ................................................................ 196 verlassen.................................................................. 161 Microsoft Access Database Engine.................... 375 Microsoft.ACE.OLEDB.12.0 .................................... 376 Millisecond ................................................................. 264 Millisekunde............................................................... 264 MinDate DateTimePicker .................................................... 271 Minimum Datenfeld................................................................. 146 Fortschrittsbalken ............................................... 321 NumericUpDown .................................................... 66 Schieberegler ............................................................ 91 MinSize ......................................................................... 338 Minute .......................................................................... 264 Modal ............................................................................ 244 Modularisierung................................................ 90, 160 Modulo ............................................................................ 50 Monat............................................................................ 264 Month ........................................................................... 264 MouseDown ............................................................... 144 MouseEventArgs....................................................... 144 MouseUp...................................................................... 144 MoveToNextAttribute() XmlTextReader ..................................................... 291 MS Access..................................................................... 368 2016 ........................................................................... 370 MultiExtended........................................................... 109 MultiLine Textfeld ....................................................................... 63 Multiplikation.............................................................. 50 MultiSelect .................................................................. 331 MySQL ........................................................................... 410 MySQL.Data ................................................................ 410 MySqlClient................................................................. 411 MySqlCommand....................................................... 411 MySqlConnection..................................................... 411 MySqlDataReader ..................................................... 411 N Nachkommastellen ................................................... 43 NumericUpDown .................................................... 66 Name ............................................................................... 21 Namenskonvention ........................................... 20, 36 Namensraum ...................................................... 25, 198 namespace............................................................ 25, 198 NameValueCollection............................................. 514 NavigationWindow.................................................. 489 NET-Treiber ................................................................. 410 new ................................................................ 35, 146, 191 new line .......................................................................... 37 Next()............................................................................... 96 NextDouble().............................................................. 158 Nicht-Operator ............................................................ 54 NodeType XmlTextReader ..................................................... 291 NOT ................................................................................ 384 Now ................................................................................ 264 null ................................................................................. 204 NumericUpDown ....................................................... 66 O object ................................................................... 196, 202 Objekt ............................................................................ 191 erzeugen .................................................................. 194 identisch .................................................................. 202 initialisieren ........................................................... 207 Verweis auf ............................................................. 145 Objektorientierung.................................................. 187 Objektverweis ............................................................ 153 dasselbe Objekt..................................................... 201 vergleichen ............................................................. 382 Oder-Operator .............................................................. 54 Öffnungsmodus........................................................ 274 OleDb............................................................................. 377 OleDbCommand....................................................... 377 OleDbConnection..................................................... 376 OleDbReader .............................................................. 378 ON................................................................................... 406 OnSelectionChanged .............................................. 430 Open .............................................................................. 274 Open() OleDbConnection ................................................ 377 OpenFileDialog.......................................................... 331 Operator.......................................................................... 50 bitweise....................................................................... 55 für Berechnungen ................................................... 50 logisch ............................................................... 54, 384 Priorität ...................................................................... 56 Rangfolge................................................................... 56 ternär........................................................................... 71 Vergleich........................................................... 53, 201 Zuweisung ................................................................. 56 option............................................................................ 427 Optionsschaltfläche ................................................... 82 mehrere Gruppen.................................................... 86 OR ................................................................................... 384 ORDER BY .................................................................... 386 out .................................................................................. 163 override ........................................................................ 197 P Page...................................................................... 419, 490 Page_Load ................................................................... 419 Page-Direktive ........................................................... 419 Paint-Ereignis............................................................. 449 PaintEventArgs.......................................................... 451 Panel ....................................................................... 58, 455 Parameter .................................................................... 161 beliebig viele .......................................................... 172 benannt ................................................................... 170 optional ................................................................... 169 params .......................................................................... 172 partial ............................................................................... 25 543 Index Index PasswordChar Textfeld ....................................................................... 63 Passwortabfrage.......................................................... 63 Path ................................................................................ 493 PathFigure ................................................................... 491 PathGeometry ........................................................... 491 Peek() ............................................................................. 274 Pen.................................................................................. 439 Pfadangabe.................................................................. 279 Pfadgeometrie ........................................................... 491 PI...................................................................................... 297 Pinsel ............................................................................. 439 Farbe ......................................................................... 445 Pixel ................................................................................. 33 Platzhalter ................................................................... 385 Point.............................................................. 35, 443, 452 Points Series ......................................................................... 345 Polygon......................................................................... 443 Polymorphie............................................................... 217 Position Legends .................................................................... 345 Pow() .............................................................................. 297 PresentationCore...................................................... 503 PresentationFramework........................................ 503 Primärindex................................................................ 361 Primärschlüssel erstellen ...................................... 372 Print() Printing .................................................................... 347 Printing Chart ......................................................................... 346 PrintingManager Chart ......................................................................... 346 PrintPreview() Printing .................................................................... 347 private ................................................... 25, 44, 163, 190 Program.cs................................................................... 177 Programm beenden....................................................................... 28 starten ......................................................................... 28 testen ........................................................................... 29 Programmentwicklung.......................................... 115 Programmierung clientseitig .............................................................. 414 ereignisgesteuert.................................................. 137 serverseitig ............................................................. 414 ProgressBar ................................................................. 319 544 Projekt Eigenschaften........................................................ 375 neu (WPF) ................................................................ 481 öffnen .......................................................................... 29 schließen..................................................................... 29 speichern .................................................................... 23 Verweis hinzufügen ............................................ 410 Projektmappen-Explorer.......................................... 18 Projektressourcen .................................................... 352 Projektvorlage............................................................ 510 Properties Window ..................................................... 18 Property ....................................................................... 193 protected...................................................................... 215 Provider........................................................................ 376 public..................................................... 25, 44, 190, 215 Q Queue ............................................................................ 228 R RadioButton .................................................................. 82 Internetformular.................................................. 425 Random ........................................................................... 96 Rangfolge ........................................................................ 52 Read()............................................................................. 380 XmlTextReader ..................................................... 291 Reader ........................................................................... 378 ReadLine().......................................................... 178, 274 ReadOnly Textfeld .................................................................... 314 Rechenoperator............................................................ 50 Rechteck ....................................................................... 442 Rectangle...................................................................... 442 Redundanz .................................................................. 359 ref................................................................. 160, 163, 200 ReferenceEquals() ..................................................... 382 Referenz ....................................................................... 200 Referenztyp................................................................. 200 Registrierung.............................................................. 508 Rekursion..................................................................... 173 Relation ........................................................................ 360 erstellen ................................................................... 373 Relational..................................................................... 357 Remove() Controls ................................................................... 466 generische Liste..................................................... 229 Zeichenkette........................................................... 258 RemoveAt() generische Liste............................................ 229, 477 ListBox...................................................................... 106 Replace() Zeichenkette.................................................. 261, 396 Resize() Array ......................................................................... 158 Ressource ........................................................... 352, 498 resx-Datei .................................................................... 353 return ............................................................................ 161 mit Rückgabewert ............................................... 167 Ringtausch................................................................... 164 RootFolder................................................................... 335 Rotationstransformation ...................................... 498 Round() ......................................................................... 297 RowIndex..................................................................... 352 Rows..................................................................... 349, 351 Rückgabewert............................................................. 167 runat .............................................................................. 419 runden .......................................................................... 297 S SaveFileDialog............................................................ 333 SaveImage() Chart ......................................................................... 347 Schalter ........................................................................... 79 Schieberegler................................................................ 90 Schleife............................................................................ 92 endlose ................................................................. 95, 98 geschachtelt ........................................................... 152 mit Bedingung ......................................................... 96 nächster Durchlauf ................................................ 93 verlassen..................................................................... 93 Schleifenvariable ........................................................ 92 Schnittstelle ................................................................ 221 Schrift ............................................................................ 308 auswählen............................................................... 338 Schriftart ...................................................................... 308 nicht proportional ............................................... 262 Schriftgröße ................................................................ 310 Schriftstil...................................................................... 311 Schrittweite NumericUpDown .................................................... 66 script.............................................................................. 419 Scrollbalken ................................................................ 101 ScrollBars Textfeld ............................................................. 63, 315 Second........................................................................... 264 Seiten, in Frames ...................................................... 488 Sekundärindex .......................................................... 361 Sekunde........................................................................ 264 SELECT........................................................ 377, 379, 383 select.............................................................................. 427 SelectAll() ..................................................................... 142 Selected DataGridView ....................................................... 349 SelectedDate............................................................... 429 SelectedIndex................................................... 102, 311 SelectedIndexChanged .......................................... 104 SelectedIndices.......................................................... 109 SelectedItem............................................................... 102 SelectedItems............................................................. 109 SelectedPath ............................................................... 335 SelectionMode................................................. 109, 111 Semikolon ................................................................... 251 Separator...................................................................... 305 Series Chart ......................................................................... 345 SeriesChartType ........................................................ 345 Serversteuerelement..................................... 421, 428 set-Accessor ................................................................ 193 SetCurrentDirectory()............................................. 280 short.................................................................................. 40 Show()............................................................................ 325 ShowColor ................................................................... 338 ShowDialog() .................................................... 244, 331 ShowNewFolderButton.......................................... 335 Simple ........................................................................... 110 Sin() ................................................................................ 297 Single ............................................................................. 371 Sinus .............................................................................. 297 Size ................................................................... 33, 35, 309 Slider WPF............................................................................ 487 sln-Datei .......................................................................... 29 SmallChange Schieberegler ............................................................ 92 SmallImageList ListView ................................................................... 342 545 Index Index SolidBrush ................................................................... 441 Solution Explorer ....................................................... 18 Sort() .............................................................................. 150 SpecialFolder .............................................................. 336 Spin-Button................................................................. 271 Split().............................................................................. 251 SQL.................................................................................. 377 Großschrift.............................................................. 377 typische Fehler ...................................................... 388 Sqrt() .............................................................................. 297 Stack............................................................................... 228 StackPanel ................................................................... 483 Startausdruck ............................................................... 93 Startformular ............................................................. 510 Startmethode ............................................................. 177 Startparameter .......................................................... 183 Startzustand ................................................................. 22 static............................................................................... 209 Statusleiste .................................................................. 319 StatusStrip ................................................................... 319 Steuerelement ........................................................... 485 Abstand einstellen .................................................. 32 aktivieren ......................................................... 60, 132 Auflistung ............................................................... 246 ausrichten .................................................................. 31 auswählen.................................................................. 20 einfügen...................................................................... 19 Größe ........................................................................... 33 Hintergrundfarbe ................................................... 37 Kontextmenü ........................................................ 312 kopieren ...................................................................... 32 Liste von................................................................... 461 markieren................................................................... 31 Position ................................................................ 33, 58 sichtbar .................................................................... 132 zur Laufzeit erzeugen ................................ 205, 455 zur Laufzeit löschen ................................... 455, 466 Stift ................................................................................. 439 Dicke.......................................................................... 445 Farbe ......................................................................... 445 Storyboard................................................................... 498 StreamReader............................................................. 272 StreamWriter.............................................................. 274 String ............................................................................. 247 string................................................................................ 41 struct.............................................................................. 225 Structured Query Language ................................. 377 Struktur ........................................................................ 224 546 Stunde........................................................................... 264 Style ..................................................................... 309, 311 SubItems ListViewItem.......................................................... 342 submit........................................................................... 425 Substring()................................................................... 259 Subtract() ..................................................................... 269 Subtraktion .................................................................... 50 SUM()............................................................................. 408 Summe berechnen...................................................... 98 switch ............................................................................... 75 Symbolleiste............................................................... 315 Syntaxfehler ............................................................... 117 System.Collections.Specialized........................... 514 System.Data.OleDb........................................ 377, 432 System.Drawing........................................................ 458 System.Globalization.............................................. 354 System.IO.................................................. 272, 273, 471 System.Resources..................................................... 356 System.Text ................................................................ 290 System.Threading .................................................... 354 System.Xaml............................................................... 503 System.Xml................................................................. 289 Systemton ................................................ 326, 329, 330 T Tabelle darstellen ................................................................ 347 Datenbank.............................................................. 368 Tabellenausgabe ....................................................... 262 Tabellenentwurf........................................................ 371 TabIndex ...................................................................... 135 TabStop......................................................................... 135 Tag der Woche ........................................................... 264 Tag des Jahres............................................................. 264 Tag des Monats.......................................................... 264 Tan() ............................................................................... 297 Tangens ........................................................................ 297 Tastatur Ereignis .................................................................... 142 Tastaturbedienung .................................................. 135 Taste Alt............................................................................... 136 F11 ............................................................................... 124 F5 ................................................................................... 28 F9................................................................................ 126 Tasten-Key................................................................... 498 Tastenkombination für Steuerelement ................................................ 136 Strg C......................................................................... 181 Strg F5 ....................................................................... 178 Teilzeichenkette........................................................ 259 Template Formular.................................................................. 509 Projekt ...................................................................... 510 Ternärer Operator ...................................................... 71 Tetris .............................................................................. 455 Text Eigenschaft ............................................... 21, 63, 249 in Zeichnung .......................................................... 447 umwandeln ............................................................... 64 verketten .................................................................... 55 TextBox in Menü.................................................................... 305 WPF............................................................................ 487 TextChanged ........................................... 133, 257, 311 Textfeld........................................................................... 63 alles auswählen .................................................... 142 Änderung ................................................................ 133 kopieren ...................................................................... 63 koppeln .................................................................... 141 mehrzeilig .................................................................. 63 ReadOnly................................................................. 314 this............................................................... 190, 196, 244 TickFrequency Schieberegler............................................................. 92 TimeOfDay .................................................................. 264 Timer ............................................................ 59, 320, 455 TimeSpan ........................................................... 266, 267 Title................................................................................. 331 title (HTML) ................................................................. 417 TitleAlignment Axis ............................................................................ 346 Today ............................................................................. 264 TodayDayStyle........................................................... 430 ToDouble()..................................................................... 64 ToInt32() ............................................................. 179, 324 Toolbox........................................................................... 17 ToolStrip....................................................................... 315 ToolStripComboBox................................................ 318 ToShortDateString() ...................................... 394, 429 ToString() ..................................................................... 196 Transformation ......................................................... 498 Trennzeichen ............................................................. 251 Trim()............................................................................. 250 TrimEnd()..................................................................... 250 TrimStart()................................................................... 250 true .................................................................................... 43 Truncate() .................................................................... 297 try.................................................................................... 122 Typ ermitteln ................................................... 203, 205 Type Converter.......................................................... 483 typeof ............................................................................ 204 U Übergabe Ausgabeparameter ............................................. 163 per Referenz .................................................. 163, 200 per Wert ................................................................... 162 Überladen .................................................................... 196 Überschreiben ........................................................... 197 Überwachungsfenster ............................................ 126 Uhrzeit .......................................................................... 264 berechnen ............................................................... 266 UID ................................................................................. 411 Umwandlung in ganze Zahl ......................................................... 324 in Zahl.......................................................................... 64 Und-Operator................................................................ 54 Ungleich ................................................................ 53, 384 Unterformular ........................................................... 242 Untermenü ................................................................. 303 Unterstrich (Platzhalter)........................................ 385 UPDATE ..................................................... 377, 382, 387 Up-Down-Button ...................................................... 271 using .................................................... 25, 199, 273, 377 UTF-8 ............................................................................. 417 V Value DataGridView ....................................................... 351 DateTimePicker .................................................... 271 Fortschrittsbalken ............................................... 321 NumericUpDown .................................................... 66 Schieberegler ............................................................ 91 Textfeld (HTML).................................................... 424 value Accessor ................................................................... 193 547 Index Index ValueChanged DateTimePicker .................................................... 271 NumericUpDown .................................................... 67 Schieberegler............................................................. 91 Values Dictionary ............................................................... 238 VALUES (SQL) ............................................................. 388 Variable........................................................................... 39 ausblenden ................................................................ 45 Gültigkeitsbereich................................................... 39 Kontrolle.................................................................. 126 Name............................................................................ 39 öffentlich .................................................................... 44 Startwert..................................................................... 46 Verbindung Datenbank .............................................................. 376 Vererbung.................................................................... 211 Vergleichsoperator .................................................. 384 Verkettung .................................................................. 198 Verknüpfung .............................................................. 360 erstellen ................................................................... 373 Verweis ......................................................................... 191 auf Ereignismethode .......................................... 205 auf Nichts ................................................................ 204 umwandeln ................................................... 153, 246 Verweistyp................................................................... 163 Verzeichnis Dateiliste ................................................................. 280 ermitteln.................................................................. 280 Existenz.................................................................... 280 Information über ................................................. 280 Liste ........................................................................... 280 setzen........................................................................ 280 wählen, Dialog ...................................................... 335 wechseln .................................................................. 285 Verzweigung................................................................. 67 Vieleck........................................................................... 443 Vielgestaltigkeit ........................................................ 217 View ListView.................................................................... 339 Visible............................................................................ 132 Visual Studio Community 2017 ............................ 16 void................................................................................... 25 Vokabel-Lernprogramm ........................................ 468 Vorlage WPF............................................................................ 481 548 W Wahrheitswert .............................................................. 81 Webserver.................................................................... 414 lokaler....................................................................... 415 WeekendDayStyle .................................................... 430 Werkzeugkasten........................................................... 17 Wertebereich................................................................. 43 Werttyp............................................................... 163, 200 Struktur.................................................................... 224 WHERE .......................................................................... 383 while ................................................................................. 95 Width................................................................................ 33 Zeichenstift............................................................. 445 Window ........................................................................ 483 Windows Forms in WPF......................................... 502 Windows Presentation Foundation.................. 481 Windows 10.......................................................... 16, 184 Windows 7 ............................................................ 16, 184 Windows 8............................................................ 16, 184 WindowsBase ............................................................. 503 WindowsFormsHost ............................................... 502 WindowsFormsIntegration.................................. 503 Wochentag .................................................................. 264 Wörterbuch................................................................. 235 WPF ................................................................................ 481 WPF in Windows Forms......................................... 503 WrapPanel WPF............................................................................ 486 Write() ................................................................. 178, 276 WriteAttributeString()............................................ 290 WriteEndElement() .................................................. 290 WriteLine()................................................ 178, 182, 276 WriteStartDocument()............................................ 290 WriteStartElement() ................................................ 290 Wurzel ........................................................................... 297 XmlNodeType ............................................................ xmlns............................................................................. XmlTextReader.......................................................... XmlTextWriter........................................................... 291 483 291 290 Y Y (Maus) ........................................................................ 144 Y, Location ..................................................................... 33 Year................................................................................. 264 Z Zahlenauswahlfeld............................................ 66, 257 Zeichen, prüfen.......................................................... 274 Zeichenkette ............................................................... 247 durchsuchen........................................................... 253 einfügen................................................................... 256 ersetzen.................................................................... 261 Index ......................................................................... 250 Zeichenkette (Forts.) Länge ........................................................................ 248 löschen ..................................................................... 258 mit Backslash ........................................................ 278 Teilzeichenkette.................................................... 259 trimmen................................................................... 250 zerlegen.................................................................... 251 Zeichenkodierung .................................................... 417 Zeichnen ...................................................................... 439 dauerhaft ................................................................ 449 Zeichnung löschen ..................................................................... 445 Zeile lesen .......................................................................... 274 Zeilenumbruch............................................................. 37 Regeln .......................................................................... 30 Zeit.................................................................................. 264 Zeitgeber ......................................................................... 59 Zeitintervall ................................................................ 267 Zufallsgenerator.............................. 96, 146, 455, 468 Zuweisung ...................................................................... 26 Zweidimensionale Grafik ...................................... 491 X X (Maus)........................................................................ 144 X, Location...................................................................... 33 x:Class ........................................................................... 483 x:Name ......................................................................... 484 XAML ............................................................................. 481 mit Programmiercode ....................................... 482 XML-Datei.......................................................... 287, 512 XML-Knoten ............................................................... 288 549 Wissen, wie’s geht. Thomas Theis ist Diplom-Ingenieur für Technische Informatik und hat langjährige Erfahrung als IT-Dozent, unter anderem an der Fachhochschule Aachen. Er leitet Schulungen zu C/C++, Visual C#, Visual Basic sowie Webprogrammierung und ist Autor zahlreicher erfolgreicher Fachbücher. Einsteiger und Neulinge schätzen seine Fähigkeit, auch komplizierte Sachverhalte leicht verständlich zu machen und dabei den Spaß am Programmieren nie aus den Augen zu verlieren. Thomas Theis Einstieg in C# mit Visual Studio 2017 – Ideal für Programmiereinsteiger 549 Seiten, broschiert, 5. Auflage 2017 29,90 Euro, ISBN 978-3-8362-4493-0 www.rheinwerk-verlag.de/4351 Wir hoffen sehr, dass Ihnen diese Leseprobe gefallen hat. Sie dürfen sie gerne empfehlen und weitergeben, allerdings nur vollständig mit allen Seiten. Bitte beachten Sie, dass der Funktionsumfang dieser Leseprobe sowie ihre Darstellung von der E-Book-Fassung des vorgestellten Buches abweichen können. Diese Leseprobe ist in all ihren Teilen urheberrechtlich geschützt. Alle Nutzungs- und Verwertungsrechte liegen beim Autor und beim Verlag. Teilen Sie Ihre Leseerfahrung mit uns!