LeseprobeJeder kann programmieren lernen! Thomas Theis fhrt Sie gekonnt in die Grundlagen von C# ein und macht Sie mit Visual Studio ver-traut. Probieren Sie es gleich aus! Auerdem enthlt diese Leseprobe die Lsung zu Kapitel 1 und 2, das Inhaltsverzeichnis und das ge-samte Stichwortverzeichnis des Buches.
Thomas Theis
Einstieg in C# mit Visual Studio 2015 Ideal fr Programmiereinsteiger geeignet553 Seiten, broschiert, 4. Auflage 2015 24,90 Euro, ISBN 978-3-8362-3705-5
www.rheinwerk-verlag.de/3814
Einfhrung Grundlagen Lsungen
Inhaltsverzeichnis
Index
Der Autor
Leseprobe weiterempfehlen
Know-how fr Kreative.Wissen, wies geht.
https://www.rheinwerk-verlag.de/einstieg-in-c-mit-visual-studio-2015_3814/?GPP=lpnmailto:?body=Leseproben-Empfehlung:%20%C2%BBEinstieg%20in%20C#%20mit%20Visual%20Studio%202015%20%E2%80%93%20Ideal%20f%C3%BCr%20Programmiereinsteiger%20geeignet%C2%AB%20von%20Rheinwerk,%20http://gxmedia.galileo-press.de/leseproben/3814/leseprobe_rheinwerk_einstieg_csharp_mit_visual_studio_2015.pdf&subject=Leseprobe:%20%C2%BBEinstieg%20in%20C#%20mit%20Visual%20Studio%202015%20%E2%80%93%20Ideal%20f%C3%BCr%20Programmiereinsteiger%20geeignet%C2%AB
15
1Kapitel 1
Einfhrung
In diesem Kapitel erlernen Sie anhand eines ersten Projekts den Umgang
mit der Entwicklungsumgebung und den Steuerelementen. Anschlieend
werden Sie in der Lage sein, Ihr erstes eigenes Windows-Programm zu
erstellen.
C#C# ist eine objektorientierte Programmiersprache, die von Microsoft im
Zusammenhang mit dem .NET Framework eingefhrt wurde. Mithilfe der
Entwicklungsumgebung Visual Studio 2015 knnen Sie unter anderem in
der Sprache C# programmieren. Visual Studio 2015 ist der Nachfolger von
Visual Studio 2013. Innerhalb von Visual Studio stehen Ihnen noch weitere
Sprachen zur Programmentwicklung zur Verfgung.
1.1 Aufbau dieses Buchs
BeispieleDieses Buch vermittelt Ihnen zunchst einen einfachen Einstieg in die Pro-
grammierung mit C# und Visual Studio 2015. Die Bearbeitung der Beispiele
und das selbststndige Lsen der vorliegenden bungsaufgaben helfen
dabei. Dadurch werden Sie schnell erste Erfolgserlebnisse haben, die Sie
zum Weitermachen motivieren. In spteren Kapiteln werden Ihnen dann
zunehmend auch komplexere Themen vermittelt.
GrundlagenVon Anfang an wird mit anschaulichen Windows-Anwendungen gearbei-
tet. Die Grundlagen der Programmiersprache und die Standardelemente
einer Windows-Anwendung, wie Sie sie schon von anderen Windows-Pro-
grammen her kennen, werden gemeinsam vermittelt. Die Anschaulichkeit
einer Windows-Anwendung hilft dabei, den eher theoretischen Hinter-
grund der Programmiersprache leichter zu verstehen.
3705.book Seite 15 Dienstag, 8. September 2015 3:39 15
1 Einfhrung
16
1.2 Visual Studio 2015
Community-Version Fr dieses Buch wird die frei verfgbare Entwicklungsumgebung Visual
Studio Community 2015 eingesetzt. Sie knnen sie unter Windows 7 bis ein-
schlielich Windows 10 nutzen. Diese Version von Visual Studio knnen
Sie bei Microsoft herunterladen (www.visualstudio.com/de-de) und auf
Ihrem PC installieren. Eine Installationsanleitung finden Sie in Anhang A.
Die Projekte in diesem Buch wurden unter Windows 10 bearbeitet. Auch
die Screenshots sind unter dieser Windows-Version entstanden.
Visual Studio 2015 bietet eine komfortable Entwicklungsumgebung. Sie
umfasst einen Editor zur Erstellung des Programmcodes, einen Compiler
zur Erstellung der ausfhrbaren Programme, einen Debugger zur Fehlersu-
che und vieles mehr. Eine Anleitung zur Installation finden Sie im Anhang.
Statt der hier empfohlenen Community-Version knnen Sie alternativ
auch verschiedene frei verfgbare Express-Versionen von Visual Studio
2015 nutzen. Sie knnen sie von der Microsoft-Internetseite per Web-
Installer auf Ihrem Rechner installieren.
Noch eine Anmerkung in eigener Sache: Fr die Hilfe bei der Erstellung die-
ses 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
zunchst so aussehen wie in Abbildung 1.1 gezeigt.
Abbildung 1.1 Erstes Programm nach dem Aufruf
3705.book Seite 16 Dienstag, 8. September 2015 3:39 15
1.4 Visual Studio-Entwicklungsumgebung
17
1Nach Bettigung des Buttons Hallo soll sich dann der Text in der obersten
Zeile entsprechend verndern (siehe Abbildung 1.2).
Abbildung 1.2 Nach einem Klick auf den Button Hallo
1.4 Visual Studio-Entwicklungsumgebung
Whrend der Projekterstellung werden Sie die Visual Studio-Entwicklungs-
umgebung Schritt fr Schritt kennenlernen.
1.4.1 Ein neues Projekt
Nach dem Aufruf des Programms Visual Studio Community 2015 mssen
Sie zur Erstellung eines neuen C#-Projekts den Menpunkt Datei Neues
Projekt Installiert Vorlagen Visual C# Windows Forms-
Anwendung auswhlen. Als Projektname bietet die Entwicklungsumge-
bung den Namen WindowsFormsApplication1 an, dieser sollte der ber-
sichtlichkeit halber gendert werden, zum Beispiel in MeinErstes.
Es erscheinen nun einige Elemente der Entwicklungsumgebung. Folgende
sind besonders wichtig:
Form Das Benutzerformular (engl. Form) enthlt die Oberflche fr den Benut-zer des Programms (siehe Abbildung 1.3).
Abbildung 1.3 Benutzerformular
Toolbox Der Werkzeugkasten (engl. Toolbox) enthlt die Steuerelemente frden Benutzer, mit denen er den Ablauf des Programms steuern kann. Sie
3705.book Seite 17 Dienstag, 8. September 2015 3:39 15
1 Einfhrung
18
werden vom Programmentwickler in das Formular eingefgt (siehe
Abbildung 1.4).
Abbildung 1.4 Der Werkzeugkasten mit verschiedenen
Kategorien von Steuerelementen
Eigenschaften-
Fenster
Das Eigenschaften-Fenster (engl. Properties Window) dient demAnzeigen und ndern der Eigenschaften von Steuerelementen inner-
halb des Formulars durch den Programmentwickler (siehe Abbildung
1.5). Ich empfehle Ihnen, sich die Eigenschaften in alphabetischer Rei-
henfolge anzeigen zu lassen. Bettigen Sie dazu einfach unter Form1
das zweite Symbol von links.
Abbildung 1.5 Eigenschaften-Fenster
Projektmappen-
Explorer
Der Projektmappen-Explorer (engl. Solution Explorer) zeigt das geff-nete Projekt und die darin vorhandenen Elemente (siehe Abbildung 1.6).
Abbildung 1.6 Projektmappen-Explorer
3705.book Seite 18 Dienstag, 8. September 2015 3:39 15
1.4 Visual Studio-Entwicklungsumgebung
19
1Elemente
anzeigen
Sollte der Werkzeugkasten, das Eigenschaften-Fenster oder der Pro-
jektmappen-Explorer nicht angezeigt werden, dann knnen Sie das be-
treffende Element ber das Men Ansicht einblenden. Ist das Formular
nicht sichtbar, blenden Sie es einfach ber einen Doppelklick auf den Na-
men (Form1.cs) im Projektmappen-Explorer ein. Sollten die Eigenschaf-
ten eines Steuerelements nicht im bereits sichtbaren Eigenschaften-
Fenster angezeigt werden, dann markieren Sie zunchst den Namen der
Formulardatei (Form1.cs) im Projektmappen-Explorer und anschlie-
end das betreffende Steuerelement.
Anfangs schreiben Sie nur einfache Programme mit wenigen Elementen,
daher bentigen Sie den Projektmappen-Explorer jetzt noch nicht. Es
empfiehlt sich, das Eigenschaften-Fenster nach oben zu vergrern.
1.4.2 Einfgen von Steuerelementen
Label, ButtonZunchst sollen drei Steuerelemente in das Formular eingefgt werden:
ein Bezeichnungsfeld (Label) und zwei Befehlsschaltflchen (Buttons). Ein
Bezeichnungsfeld dient im Allgemeinen dazu, feste oder vernderliche
Texte auf der Benutzeroberflche anzuzeigen. In diesem Programm soll
das Label einen Text anzeigen. Ein Button dient zum Starten bestimmter
Programmteile oder, allgemeiner ausgedrckt, zum Auslsen von Ereignis-
sen. In diesem Programm sollen die Buttons dazu dienen, den Text anzu-
zeigen bzw. das Programm zu beenden.
Allgemeine Steuer-
elemente
Um ein Steuerelement einzufgen, ziehen Sie es mithilfe der Maus aus
dem Werkzeugkasten an die gewnschte Stelle im Formular. Alle Steuer-
elemente finden sich im Werkzeugkasten unter Alle Windows Forms.
bersichtlicher ist jedoch der Zugriff ber Allgemeine Steuerelemente
(engl. Common Controls), siehe Abbildung 1.7.
Abbildung 1.7 Allgemeine Steuerelemente im Werkzeugkasten
3705.book Seite 19 Dienstag, 8. September 2015 3:39 15
1 Einfhrung
20
Steuerelement
auswhlen
Ein Doppelklick auf ein Steuerelement im Werkzeugkasten fgt es
ebenfalls in die Form ein. Position und Gre des Elements knnen an-
schlieend noch verndert werden. Dazu whlen Sie das betreffende
Steuerelement vorher durch Anklicken aus (siehe Abbildung 1.8). Ein ber-
flssiges Steuerelement knnen Sie durch Auswhlen und Drcken der
Taste (Entf) entfernen.
Abbildung 1.8 Ausgewhlter Button
Die Gre und andere Eigenschaften des Formulars selbst knnen Sie
ebenfalls verndern. Dazu whlen Sie es vorher durch Anklicken einer
freien Stelle im Formular aus.
1.4.3 Arbeiten mit dem Eigenschaften-Fenster
Die eingefgten Steuerelemente haben zunchst einheitliche Namen und
Aufschriften, diese sollten Sie allerdings zur einfacheren Programment-
wicklung ndern. Es haben sich bestimmte Namenskonventionen einge-
brgert, welche die Lesbarkeit erleichtern. Diese Namen beinhalten den
Typ (mit drei Buchstaben abgekrzt) und die Aufgabe des Steuerelements
(mit groem Anfangsbuchstaben).
cmd, txt, lbl, ... Ein Button (eigentlich Command Button), der die Anzeige der Zeit auslsen
soll, wird beispielsweise mit cmdZeit bezeichnet. Weitere Vorsilben sind txt
(Textfeld/TextBox), lbl (Bezeichnungsfeld/Label), opt (Optionsschaltfl-
che/RadioButton), frm (Formular/Form) und chk (Kontrollkstchen/Check-
Box).
Zur nderung des Namens eines Steuerelements muss es zunchst ausge-
whlt werden. Das knnen Sie entweder durch Anklicken des Steuerele-
ments auf dem Formular oder durch Auswahl desselben aus der Liste am
oberen Ende des Eigenschaften-Fensters tun.
Eigenschaften-
Fenster
Im Eigenschaften-Fenster werden alle Eigenschaften des ausgewhlten
Steuerelements angezeigt. Die Liste ist zweispaltig: In der linken Spalte
steht der Name der Eigenschaft, in der rechten ihr aktueller Wert. Die
3705.book Seite 20 Dienstag, 8. September 2015 3:39 15
1.4 Visual Studio-Entwicklungsumgebung
21
1Eigenschaft (Name) steht am Anfang der Liste der Eigenschaften. Die
betreffende Zeile whlen Sie durch Anklicken aus und geben hier den
neuen Namen ein. Nach Besttigung mit der Taste () ist die Eigenschaft
gendert (siehe Abbildung 1.9).
Abbildung 1.9 Button nach der Namensnderung
TextDie Aufschrift von Buttons, Labels und Formularen ist in der Eigenschaft
Text angegeben. Sobald diese Eigenschaft verndert wird, erscheint die ver-
nderte Aufschrift in dem betreffenden Steuerelement. Auch der Name
und die Aufschrift des Formulars sollten gendert werden. Im Folgenden
sind die gewnschten Eigenschaften fr die Steuerelemente dieses Pro-
gramms in Tabellenform angegeben, siehe Tabelle 1.1.
StartzustandHiermit legen Sie den Startzustand fest, also die Eigenschaften, welche die
Steuerelemente zu Beginn des Programms bzw. eventuell whrend des
gesamten Programms haben sollen. Viele Eigenschaften knnen Sie auch
Typ Eigenschaft Einstellung
Formular Text Mein erstes Programm
Button Name cmdHallo
Text Hallo
Button Name cmdEnde
Text Ende
Label Name lblAnzeige
Text (leer)
BorderStyle FixedSingle
Tabelle 1.1 Steuerelemente mit Eigenschaften
3705.book Seite 21 Dienstag, 8. September 2015 3:39 15
1 Einfhrung
22
noch whrend 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 whlen den betreffenden Eintrag aus,
siehe Abbildung 1.10. Zur nderung einiger Eigenschaften mssen Sie
gegebenenfalls ein Dialogfeld aufrufen.
Abbildung 1.10 Label nach der nderung von Name
und BorderStyle
Im Label soll zunchst der Text (leer) erscheinen. Hierzu whlen Sie den
vorhandenen Text durch Anklicken aus und ndern ihn.
Liste der Steuer-
elemente
Sie finden alle in diesem Formular vorhandenen Steuerelemente in der
Liste, die sich am oberen Ende des Eigenschaften-Fensters ffnen lsst.
Dabei zeigt sich ein Vorteil der einheitlichen Namensvergabe: Die Steuer-
elemente des gleichen Typs stehen immer direkt untereinander.
1.4.4 Speichern eines Projekts
Alles speichern Die Daten eines C#-Projekts werden innerhalb von Visual Studio in ver-
schiedenen Dateien gespeichert. Zum Speichern des gesamten Projekts
verwenden Sie den Menpunkt Datei Alles Speichern. Diesen Vorgang
sollten Sie in regelmigen Abstnden durchfhren, damit keine nderun-
gen verloren gehen knnen.
3705.book Seite 22 Dienstag, 8. September 2015 3:39 15
1.4 Visual Studio-Entwicklungsumgebung
23
1Die in diesem Skript angegebenen Namen erleichtern eine schnelle und
eindeutige Orientierung und das sptere Auffinden von lteren Pro-
grammen.
1.4.5 Das Codefenster
EreignisDer Ablauf eines Windows-Programms wird im Wesentlichen durch das
Auslsen von Ereignissen durch den Benutzer gesteuert. Er lst z. B. die
Anzeige des Texts Hallo aus, indem er auf den Button Hallo klickt. Der
Entwickler muss dafr sorgen, dass aufgrund dieses Ereignisses auch tat-
schlich der gewnschte 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.
EreignismethodeZum Schreiben einer Ereignismethode fhren Sie am besten einen Dop-
pelklick auf dem betreffenden Steuerelement aus. Daraufhin erscheint das
Codefenster. Zwischen der Formularansicht und der Codeansicht knnen
Sie anschlieend ber die Menpunkte Ansicht Code bzw. Ansicht
Designer hin- und herschalten. Das ist auch ber die Registerkarten ober-
halb des Formulars bzw. des Codefensters mglich (siehe Abbildung 1.11).
Abbildung 1.11 Registerkarten
Nach erfolgtem Doppelklick auf den Button Hallo erscheinen im Code-
fenster die folgenden Eintrge:
using System;using System.Windows.Forms;
namespace MeinErstes{
public partial class Form1 : Form{
3705.book Seite 23 Dienstag, 8. September 2015 3:39 15
1 Einfhrung
24
public Form1(){
InitializeComponent();}
private void cmdHallo_Click(object sender, EventArgs e){}
}}
Listing 1.1 Projekt MeinErstes, Button Hallo, ohne Code
Zur Erluterung:
Grundstzlich gilt, dass Sie sich nicht von der Vielzahl der automatischerzeugten Zeilen und den noch unbekannten Inhalten abschrecken las-
sen sollten.
Zunchst das Wichtigste: Innerhalb der geschweiften Klammern { } derEreignismethode cmdHallo_Click() wird spter Ihr eigener Programm-
code hinzugefgt.
Zu den anderen Bestandteilen (die erst spter fr das eigene Programmie-
ren wichtig werden):
Namensraum C# ist eine objektorientierte Sprache. Ein wichtiges Element objektori-entierter Sprachen sind die so genannten Klassen. Klassen erffnen wei-
tere Programmiermglichkeiten. Namensrume wiederum beinhalten
zusammengehrige Klassen.
using In obigem Listing knnen Sie erkennen, dass einige Programmzeilen,die mit using beginnen, bereits entfernt wurden. Das Schlsselwort
using dient zum Einbinden von Namensrumen in das aktuelle Projekt.
Da wir die Klassen in diesen Namensrumen nicht bentigen, wurden
die betreffenden Zeilen entfernt.
Seit der Version 2015 von Visual Studio werden solche berflssigen Ele-mente in grauer Schriftfarbe dargestellt. Falls sich der Cursor in einer der
betreffenden Zeilen befindet, erscheint links von der Zeile eine gelbe
Glhbirne. Platzieren Sie den Mauszeiger ber dieser Glhbirne, knnen
Sie sich Hinweise dazu anzeigen lassen, wie die berflssigen Elemente
ganz entfernt werden knnen.
3705.book Seite 24 Dienstag, 8. September 2015 3:39 15
1.4 Visual Studio-Entwicklungsumgebung
25
1namespace Oberhalb von public partial class ... und von private void ... erschei-
nen auerdem seit Visual Studio 2015 automatisch weitere Informatio-
nen zur Klasse Form1 und ihren Elementen in kleiner grauer Schrift, wie
zum Beispiel 0 references oder 3 references. Auch diese knnen wir
zunchst noch ignorieren.
Dieses erste Projekt verfgt ber einen eigenen Namensraum (engl.namespace), daher namespace MeinErstes.
public partial class Alle Elemente des aktuellen Formulars Form1 stehen innerhalb derffentlich zugnglichen Klasse Form1, daher public class Form1. Ein Teil
der Elemente steht in dieser Datei, ein anderer Teil, der ebenfalls auto-
matisch erzeugt wurde, steht in einer anderen, hier nicht sichtbaren
Datei, daher der Zusatz partial (dt. teilweise).
Die Methode InitializeComponent() beinhaltet Programmzeilen, diedas Aussehen und Verhalten der Steuerelemente des Programms be-
stimmen.
private void Der Zusatz private bedeutet, dass die Ereignismethode cmdHalloClick()nur in dieser Klasse bekannt ist. Mit void wird gekennzeichnet, dass
diese Methode lediglich etwas ausfhrt, aber kein Ergebnis zurck-
liefert.
Auf weitere Einzelheiten dieser automatisch erzeugten Bestandteilewird zu einem spteren Zeitpunkt eingegangen, da es hier noch nicht
notwendig ist und eher verwirren wrde.
Der anfnglich ausgefhrte Doppelklick fhrt immer zu dem Ereignis, das
am hufigsten mit dem betreffenden Steuerelement verbunden wird.
ClickDas ist beim Button natrlich das Ereignis Click. Zu einem Steuerelement
gibt es aber auch noch andere mgliche Ereignisse.
Bei den nachfolgenden Programmen werden nicht mehr alle Teile des Pro-
grammcodes im Buch abgebildet, sondern nur noch
die Teile, die vom Entwickler per Codeeingabe erzeugt werden,
und die Teile des automatisch erzeugten Codes, die wichtig fr das allge-meine Verstndnis sind.
Den vollstndigen Programmcode knnen Sie aber jederzeit betrachten,
wenn Sie die Beispielprojekte laden bzw. ausprobieren.
3705.book Seite 25 Dienstag, 8. September 2015 3:39 15
1 Einfhrung
26
1.4.6 Schreiben von Programmcode
In der Methode cmdHallo_Click() soll eine Befehlszeile eingefgt werden,
sodass sie anschlieend 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 Anfhrungszeichen gesetzt werden, da C# sonst an-
nimmt, dass es sich um eine Variable mit dem Namen Hallo handelt.
Anweisung Der Inhalt einer Methode setzt sich aus einzelnen Anweisungen zusam-
men, die nacheinander ausgefhrt werden. Die vorliegende Methode ent-
hlt nur eine Anweisung; in ihr wird mithilfe des Gleichheitszeichens eine
Zuweisung durchgefhrt.
Zuweisung Bei einer Zuweisung wird der Ausdruck rechts vom Gleichheitszeichen aus-
gewertet und der Variablen, der Objekteigenschaft oder der Steuerelement-
eigenschaft links vom Gleichheitszeichen zugewiesen. Die Zeichenkette
Hallo wird der Eigenschaft Text des Steuerelements lblAnzeige mittels fol-
gender Schreibweise Steuerelement.Eigenschaft = Wert zugewiesen. Das
fhrt dann zur Anzeige des Werts.
Nach dem Wechsel auf die Formularansicht knnen Sie das nchste Steuer-
element auswhlen, fr das eine Ereignismethode geschrieben werden soll.
Code editieren Innerhalb des Codefensters kann Text mit den gngigen Methoden der
Textverarbeitung editiert, kopiert, verschoben und gelscht werden.
In der Ereignismethode cmdEnde_Click() soll der folgende Code stehen:
private void cmdEnde_Click(object sender, EventArgs e){
Close();}
Listing 1.3 Projekt MeinErstes, Button Ende
Close() Die Methode Close() dient dem Schlieen eines Formulars. Da es sich um
das einzige Formular dieses Projekts handelt, wird dadurch das Programm
beendet und die gesamte Windows-Anwendung geschlossen.
3705.book Seite 26 Dienstag, 8. September 2015 3:39 15
1.4 Visual Studio-Entwicklungsumgebung
27
1Dies waren einige Beispiele zur nderung der Eigenschaften eines Steuer-
elements zur Laufzeit des Programms durch Programmcode. Sie erinnern
sich: Zu Beginn hatten wir bereits die Starteigenschaften der Steuerele-
mente im Eigenschaften-Fenster eingestellt.
1.4.7 Kommentare
Bei lngeren Programmen mit vielen Anweisungen gehrt es zum guten
Programmierstil, Kommentarzeilen zu schreiben. In diesen Zeilen werden
einzelne Anweisungen oder auch lngere Blcke von Anweisungen erlu-
tert, damit Sie selbst oder auch ein anderer Programmierer sie spter leich-
ter nachvollziehen knnen. Alle Zeichen innerhalb eines Kommentars
werden nicht bersetzt oder ausgefhrt.
/* Kommentar */Ein Kommentar beginnt mit der Zeichenkombination /*, endet mit der
Zeichenkombination */ und kann sich ber mehrere Zeilen erstrecken.
// KommentarEine andere Mglichkeit ergibt sich durch die Zeichenkombination //. Ein
solcher Kommentar erstreckt sich nur bis zum Ende der Zeile.
Der folgende Programmcode wurde beispielsweise um einen Kommentar
ergnzt:
private void cmdEnde_Click(object sender, EventArgs e){
/* Diese Anweisung beendetdas Programm */
Close();}
Listing 1.4 Projekt MeinErstes, Button Ende, mit Kommentar
Code auskommen-
tieren
Hier noch ein kleiner Trick: Sollen bestimmte Programmzeilen fr einen
Test des Programms kurzfristig nicht ausgefhrt werden, knnen Sie sie
auskommentieren, indem Sie die Zeichenkombination // vor die betreffen-
den Zeilen setzen. Das geht sehr schnell, indem Sie die betreffende(n)
Zeile(n) markieren und anschlieend das entsprechende Symbol im linken
Bereich der Symbolleiste anklicken, siehe Abbildung 1.12. Rechts daneben
befindet sich das Symbol, welches die Auskommentierung nach dem Test
wieder rckgngig macht.
3705.book Seite 27 Dienstag, 8. September 2015 3:39 15
1 Einfhrung
28
Abbildung 1.12 Kommentar ein/aus
1.4.8 Starten, Ausfhren und Beenden des Programms
Programm starten Nach dem Einfgen der Steuerelemente und dem Erstellen der Ereignis-
methoden ist das Programm fertig und kann gestartet werden. Dazu bet-
tigen Sie den Start-Button in der Symbolleiste (dreieckiger grner Pfeil
nach rechts). Alternativ starten Sie das Programm ber die Funktionstaste
(F5) oder den Menpunkt Debuggen Debugging Starten. Das For-
mular erscheint, und das Bettigen der Buttons fhrt zum programmier-
ten Ergebnis.
Programm beenden Zur regulren Beendigung eines Programms ist der Button mit der Auf-
schrift Ende vorgesehen. Mchten Sie ein Programm whrend des Verlaufs
vorzeitig abbrechen, knnen Sie auch den Ende-Button in der Symbolleiste
(rotes Quadrat) bettigen.
Fehler Tritt whrend der Ausfhrung eines Programms ein Fehler auf, werden Sie
hierauf hingewiesen, und das Codefenster zeigt die entsprechende Ereig-
nismethode sowie die fehlerhafte Zeile an. In diesem Fall beenden Sie das
Programm, korrigieren den Code und starten das Programm wieder.
Programm testen Es ist empfehlenswert, das Programm bereits whrend der Entwicklung
mehrmals durch einen Aufruf zu testen und nicht erst, wenn das Pro-
gramm vollstndig erstellt worden ist. Ein geeigneter Zeitpunkt dazu er-
gibt sich zum Beispiel
nach dem Einfgen der Steuerelemente und dem Zuweisen der Eigen-schaften, die Sie zu Programmbeginn bentigen, oder
nach dem Erstellen jeder Ereignismethode.
1.4.9 Ausfhrbares Programm
.exe-Datei Nach erfolgreichem Test des Programms knnen Sie die ausfhrbare Datei
(.exe-Datei) auch auerhalb der Entwicklungsumgebung aufrufen. Haben
Sie an den Grundeinstellungen nichts verndert und die vorgeschlagenen
Namen verwendet, findet sich die zugehrige .exe-Datei des aktuellen
3705.book Seite 28 Dienstag, 8. September 2015 3:39 15
1.4 Visual Studio-Entwicklungsumgebung
29
1Projekts im Verzeichnis Dokumente\Visual Studio 2015\Projects\MeinErs-
tes\MeinErstes\bin\Debug. Das Programm kann also ganz normal im Win-
dows-Explorer direkt ber Doppelklick gestartet werden.
Die Weitergabe eines eigenen Windows-Programms auf einen anderen PC
ist etwas aufwendiger. Dieser Vorgang wird in Abschnitt A.4 beschrieben.
1.4.10 Schlieen und ffnen eines Projekts
Projekt schlieenUm ein Projekt zu schlieen, whlen Sie den Menpunkt Datei Projekt-
mappe schliessen. Falls Sie Vernderungen vorgenommen haben, wer-
den Sie vorher gefragt, ob Sie diese nderungen speichern mchten.
Wollen Sie die Projektdaten sicherheitshalber zwischendurch speichern, ist
das ber den Menpunkt Datei Alles speichern mglich. Das ist bei
lngeren Entwicklungsphasen sehr zu empfehlen.
Projekt ffnenZum ffnen eines vorhandenen Projekts whlen Sie den Menpunkt
Datei Projekt ffnen. Im darauffolgenden Dialogfeld Projekt ffnen
whlen Sie zunchst das gewnschte Projektverzeichnis aus und anschlie-
end die gleichnamige Datei mit der Endung .sln.
Alle Beispielprojekte finden Sie auf www.rheinwerk-verlag.de/3814 unter
Materialien zum Buch zum Download. Sollte eines der Projekte einmal
nicht gestartet werden knnen, sollten Sie es ber den Menpunkt Erstel-
len Projektmappe neu erstellen neu erstellen.
1.4.11 bung
bung NameErzeugen Sie ein Windows-Programm mit einem Formular, das zwei But-
tons und ein Label beinhaltet (siehe Abbildung 1.13). Bei Bettigung des ers-
ten Buttons erscheint im Label Ihr Name. Bei Bettigung des zweiten
Buttons wird das Programm beendet. Namensvorschlge: Projektname
Name, Buttons cmdMyName und cmdEnde, Label lblMyName.
Abbildung 1.13 bung Name
3705.book Seite 29 Dienstag, 8. September 2015 3:39 15
1 Einfhrung
30
1.4.12 Empfehlungen fr Zeilenumbrche
Zeilenumbruch Zeilenumbrche erhhen die Lesbarkeit des Programmcodes. Sie knnen
jedoch nicht an jeder Stelle innerhalb einer Anweisung durchgefhrt wer-
den. Nachfolgend werden einige Stellen empfohlen:
nach einer ffnenden Klammer, wie bereits gezeigt
vor einer schlieenden Klammer
nach einem Komma
nach den meisten Operatoren, also auch nach dem Zuweisungsoperator(=) hinter lblAnzeige.Text, siehe Abschnitt 2.2
nach einem Punkt hinter einem Objektnamen, also auch nach demPunkt hinter dem Objektnamen lblAnzeige
Auf keinen Fall drfen Sie einen Zeilenumbruch innerhalb einer Zeichen-
kette durchfhren.
1.5 Arbeiten mit Steuerelementen
1.5.1 Steuerelemente formatieren
Hilfslinien Zur besseren Anordnung der Steuerelemente auf dem Formular knnen
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.
Mehrere Steuerele-
mente markieren
Weitere Mglichkeiten bieten die Menpunkte im Men Format. In vie-
len Fllen mssen vorher mehrere Steuerelemente auf einmal markiert
werden (siehe Abbildung 1.14).
Abbildung 1.14 Mehrere markierte Elemente
3705.book Seite 30 Dienstag, 8. September 2015 3:39 15
1.5 Arbeiten mit Steuerelementen
31
1Das geschieht entweder
durch Umrahmung der Elemente mit einem Rechteck, nachdem Siezuvor das Steuerelement Zeiger ausgewhlt haben, oder
durch Mehrfachauswahl, indem Sie ab dem zweiten auszuwhlendenSteuerelement die ()-Taste (wie fr Grobuchstaben) oder die (Strg)-
Taste gedrckt halten.
Men Formatber das Men Format haben Sie anschlieend folgende Mglichkeiten
zur Anpassung der Steuerelemente:
Die ausgewhlten Steuerelemente knnen horizontal oder vertikalzueinander ausgerichtet werden (Men Format Ausrichten).
Auch die horizontalen und/oder vertikalen Dimensionen der ausge-whlten Steuerelemente knnen angeglichen werden (Men Format
Grsse angleichen).
Einheitliche
Abstnde
Zudem knnen die horizontalen und vertikalen Abstnde zwischen denausgewhlten Steuerelementen angeglichen, vergrert, verkleinert
oder entfernt werden (Men Format Horizontaler Abstand/Ver-
tikaler Abstand).
Die Steuerelemente knnen auerdem horizontal oder vertikal inner-halb des Formulars zentriert werden (Men Format auf Formular
zentrieren).
Sollten sich die Steuerelemente teilweise berlappen, knnen Sie ein-zelne Steuerelemente in den Vorder- bzw. Hintergrund schieben (Men
Format Reihenfolge).
Sie knnen alle Steuerelemente gleichzeitig gegen versehentliches Ver-schieben absichern (Men Format Steuerelemente Sperren). Diese
Sperrung gilt nur whrend der Entwicklung des Programms.
Abbildung 1.15 zeigt ein Formular mit drei Buttons, die alle linksbndig aus-
gerichtet 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 anschlieend die einzelnen Mg-
lichkeiten des Format-Mens aus.
3705.book Seite 31 Dienstag, 8. September 2015 3:39 15
1 Einfhrung
32
Abbildung 1.15 Nach der Formatierung
1.5.2 Steuerelemente kopieren
Steuerelemente
kopieren
Zur schnelleren Erzeugung eines Projekts knnen vorhandene Steuerele-
mente einschlielich aller ihrer Eigenschaften kopiert werden. Markieren
Sie hierzu die gewnschten Steuerelemente, und kopieren Sie sie entweder
ber das Men Bearbeiten Kopieren und das Men Bearbeiten Einfgen oder
mit den Tastenkombinationen (Strg) + (C) und (Strg) + (V).
Anschlieend sollten Sie die neu erzeugten Steuerelemente direkt umbe-
nennen und an den gewnschten Positionen anordnen.
bung
Laden Sie das Projekt MeinErstes aus Abschnitt 1.3 und kopieren Sie ein-
zelne Steuerelemente. Kontrollieren Sie anschlieend die Liste der vorhan-
denen Steuerelemente im Eigenschaften-Fenster auf eine einheitliche
Namensgebung.
1.5.3 Eigenschaften zur Laufzeit ndern
Size, Location Steuerelemente haben die Eigenschaften Size (mit den Komponenten
Width und Height) und Location (mit den Komponenten X und Y) zur
Angabe von Gre 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). Smtliche Werte werden
in Pixeln angegeben.
3705.book Seite 32 Dienstag, 8. September 2015 3:39 15
1.5 Arbeiten mit Steuerelementen
33
1Alle diese Eigenschaften knnen sowohl whrend der Entwicklungszeit als
auch whrend der Laufzeit eines Projekts verndert werden. Zur nderung
whrend der Entwicklungszeit knnen Sie die Eigenschaftswerte wie
gewohnt im Eigenschaften-Fenster eingeben. Als Beispiel fr nderun-
gen whrend der Laufzeit soll hingegen das folgende Programm (Projekt
Steuerelemente) dienen (siehe Abbildung 1.16).
Abbildung 1.16 Position und Gre bestimmen
Zunchst ein Hinweis zu den bentigten Namensrumen, die oberhalb der
Klasse eingebunden werden:
using System;using System.Drawing;using System.Windows.Forms;...
Listing 1.5 Projekt Steuerelemente, Namensrume
Gegenber dem vorherigen Projekt ist noch der Namensraum System.Dra-
wing hinzugekommen, der beim Zugriff auf Positions-, Gren- oder Farb-
angaben bentigt wird. Die drei genannten Namensrume reichen bei
vielen Projekten aus.
Es wird nachfolgend generell nur der Teil des Programmcodes angezeigt,
der verndert wurde:
private void cmdPositionRel_Click(...){
cmdTest.Location = new Point(cmdTest.Location.X + 20, cmdTest.Location.Y);
}
3705.book Seite 33 Dienstag, 8. September 2015 3:39 15
1 Einfhrung
34
private void cmdPositionAbs_Click(...){
cmdTest.Location = new Point(100, 200);}
private void cmdGreRel_Click(...){
cmdTest.Size = new Size(cmdTest.Size.Width + 20, cmdTest.Size.Height);
}
private void cmdGreAbs_Click(...){
cmdTest.Size = new Size(50, 100);}
Listing 1.6 Projekt Steuerelemente
Zur Erluterung:
Verkrzte
Darstellung
Der Kopfteil der einzelnen Methoden wurde aus Grnden der bersicht-lichkeit jeweils in verkrzter Form abgebildet. Das wird bei den meisten
nachfolgenden Beispielen ebenfalls so sein, auer wenn es genau auf die
Inhalte des Methodenkopfs ankommt.
Das Formular enthlt fnf Buttons. Die oberen vier Buttons dienen derVernderung von Position und Gre des fnften Buttons.
Die Position eines Elements kann relativ zur aktuellen Position oder aufabsolute Werte eingestellt werden. Das Gleiche gilt fr die Gre eines
Elements.
Bei beiden Angaben handelt es sich um Wertepaare (X/Y bzw. Breite/Hhe).
new Point Zur Einstellung der Position dient die Struktur Point. Ein Objekt dieserStruktur liefert ein Wertepaar. In diesem Programm wird mit new jeweils
ein neues Objekt der Struktur Point erzeugt, um das Wertepaar bereitzu-
stellen.
X, Y Bei Bettigung des Buttons Position Abs wird die Position des fnftenButtons auf die Werte X=100 und Y=200 gestellt, jeweils gemessen von der
linken oberen Ecke des Formulars.
Bei Bettigung des Buttons Position Rel wird die Position des fnftenButtons auf die Werte X = cmdTest.Location.X + 20 und Y = cmdTest.Loca-
tion.Y gestellt. Bei X wird also der alte Wert der Komponente X um 20
3705.book Seite 34 Dienstag, 8. September 2015 3:39 15
1.5 Arbeiten mit Steuerelementen
35
1erhht, das Element bewegt sich nach rechts. Bei Y wird der alte Wert der
Komponente Y nicht verndert, das Element bewegt sich somit nicht
nach oben oder unten.
Size Zur Einstellung der Gre dient die Struktur Size.
Width, Height Bei Bettigung des Buttons Grsse Abs wird die Gre des fnftenButtons auf die Werte Width = 50 und Height = 100 gestellt.
Bei Bettigung des Buttons Grsse Rel wird die Gre des fnftenButtons auf die Werte Width = cmdTest.Size.Width + 20 und Height = cmd-
Test.Size.Height gestellt. Bei Width wird also der alte Wert der Kompo-
nente Width um 20 erhht, das Element wird breiter. Bei Height wird
der frhere Wert der Komponente Height nicht verndert, das Element
verndert seine Hhe daher nicht.
Nach einigen Klicks sieht das Formular aus wie das in Abbildung 1.17.
Abbildung 1.17 Vernderung von Eigenschaften zur Laufzeit
1.5.4 Vergabe und Verwendung von Namen
Beachten Sie in allen Programmen, dass jedes Steuerelement seinen eige-
nen, eindeutigen Namen hat und immer mit diesem Namen angesprochen
werden muss. Besonders am Anfang passiert es erfahrungsgem hufig,
dass ein Programm nur deshalb nicht zum gewnschten Erfolg fhrt, weil
ein nicht vorhandener Name verwendet wurde. In diesem Zusammenhang
mchte ich noch einmal auf die Namenskonventionen hinweisen:
Buttons sollten Namen wie z. B. cmdEnde, cmdAnzeigen, cmdBerechnen usw.haben.
Labels sollten Namen wie z. B. lblAnzeige, lblName, lblUhrzeit, lblBe-ginnDatum haben.
3705.book Seite 35 Dienstag, 8. September 2015 3:39 15
1 Einfhrung
36
Diese Namen liefern eine eindeutige Information ber Typ und Funktion
des Steuerelements. Falls Sie beim Schreiben von Programmcode anschlie-
end diese Namen z. B. vollstndig in Kleinbuchstaben eingeben, werden
Sie nach Verlassen der Zeile darauf aufmerksam gemacht. Sie knnen so
schnell erkennen, ob Sie tatschlich ein vorhandenes Steuerelement ver-
wendet haben.
1.5.5 Verknpfung von Texten, mehrzeilige Texte
+ und \n Es knnen mehrere Texte in einer Ausgabe mithilfe des Zeichens + mitein-
ander verknpft werden. Falls Sie eine mehrzeilige Ausgabe wnschen,
knnen Sie einen Zeilenvorschub mithilfe der Zeichenfolge "\n" (fr new
line) erzeugen.
Nachfolgend wird das Projekt Steuerelemente um ein Label ergnzt, in dem
die aktuelle Position und Gre des Buttons angezeigt werden. Das soll
nach Bettigung des Buttons Anzeige geschehen:
private void cmdAnzeige_Click(...){
lblAnzeige.Text = "Position: X: " + cmdTest.Location.X +", Y: " + cmdTest.Location.Y + "\n" + "Gre: Breite: " +cmdTest.Size.Width + ", Hhe: " + cmdTest.Size.Height;
}
Listing 1.7 Projekt Steuerelemente, mit Anzeige
Nach einigen Klicks und der Bettigung des Buttons Anzeige sieht das For-
mular aus wie das in Abbildung 1.18.
Abbildung 1.18 Anzeige der Eigenschaften
3705.book Seite 36 Dienstag, 8. September 2015 3:39 15
1.5 Arbeiten mit Steuerelementen
37
11.5.6 Eigenschaft BackColor, Farben allgemein
BackColorDie Hintergrundfarbe eines Steuerelements wird mit der Eigenschaft Back-
Color festgelegt. Dabei knnen Sie die Farbe zur Entwicklungszeit leicht
mithilfe einer Farbpalette oder aus Systemfarben auswhlen.
ColorHintergrundfarben und andere Farben knnen Sie auch zur Laufzeit ein-
stellen. Dabei bedienen Sie sich der Farbwerte, die Sie ber die Struktur
Color auswhlen.
Ein Beispiel, ebenfalls im Projekt Steuerelemente:
private void cmdFarbe_Click(object sender, EventArgs e){
BackColor = Color.Yellow;lblAnzeige.BackColor = Color.FromArgb(192, 255, 0);
}
Listing 1.8 Projekt Steuerelemente, mit Farben
Zur Erluterung:
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() Auerdem bietet die Struktur die Methode FromArgb(). Diese knnen Sieauf verschiedene Arten aufrufen. Eine dieser Arten erwartet genau drei
Parameter, nmlich die Werte fr Rot, Grn 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
3705.book Seite 37 Dienstag, 8. September 2015 3:39 15
39
2
Kapitel 2
Grundlagen
In diesem Kapitel erlernen Sie auf anschauliche Weise die Sprach-
grundlagen von C# in Verbindung mit den gngigen Steuerelementen
von Windows-Programmen.
In den folgenden Abschnitten lernen Sie wichtige Elemente der Program-
mierung, wie Variablen, Operatoren, Verzweigungen und Schleifen, ge-
meinsam mit wohlbekannten, hufig verwendeten Steuerelementen
kennen.
2.1 Variablen und Datentypen
Variablen dienen der vorbergehenden Speicherung von Daten, die sich
whrend der Laufzeit eines Programms ndern knnen. Eine Variable
besitzt einen eindeutigen Namen, unter dem sie angesprochen werden
kann.
2.1.1 Namen, Werte
NamensregelnFr die Namen von Variablen gelten in C# die folgenden Regeln:
Sie beginnen mit einem Buchstaben.
Sie knnen nur aus Buchstaben, Zahlen und einigen wenigen Sonderzei-chen (wie z. B. dem Unterstrich _ ) bestehen.
Innerhalb eines Gltigkeitsbereichs darf es keine zwei Variablen mitdem 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.
3705.book Seite 39 Dienstag, 8. September 2015 3:39 15
2 Grundlagen
40
2.1.2 Deklarationen
Neben dem Namen besitzt jede Variable einen Datentyp, der die Art der
Information bestimmt, die gespeichert werden kann. Der Entwickler
whlt den Datentyp danach aus, ob er Texte, Zahlen ohne Nachkomma-
stellen, Zahlen mit Nachkommastellen oder z. B. logische Werte speichern
mchte.
Auswahl des
Datentyps
Auerdem muss er sich noch Gedanken ber die Gre des Bereichs ma-
chen, den die Zahl oder der Text annehmen knnte, und ber die ge-
wnschte Genauigkeit bei Zahlen. Im folgenden Abschnitt finden Sie eine
Liste der gngigsten Datentypen.
Variablen mssen in C# immer mit einem Datentyp deklariert werden. Das
beugt Fehlern vor, die aufgrund einer falschen Verwendung der Variablen
entstehen knnten.
2.1.3 Datentypen
Die wichtigsten von C# untersttzten Datentypen knnen in einige groe
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 bis9.223.372.036.854.775.807
Auerdem gibt es Datentypen zur Speicherung von Zahlen mit Nachkom-
mastellen:
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
3705.book Seite 40 Dienstag, 8. September 2015 3:39 15
2.1 Variablen und Datentypen
41
2
Einige weitere ntzliche Datentypen sind:
der Datentyp bool, mit den Werten true oder false (wahr oder falsch)
der Datentyp char, fr einzelne Zeichen
string der Datentyp string, fr Zeichenketten mit variabler Lnge
Im folgenden Beispiel werden Variablen dieser Typen deklariert, mit Wer-
ten 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;
3705.book Seite 41 Dienstag, 8. September 2015 3:39 15
2 Grundlagen
42
/* Boolesche Variable, Zeichen, Zeichenkette */Bo = true;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 Bettigung des Buttons stellt das Programm die Ausgabe wie in Abbil-
dung 2.1 dar.
Abbildung 2.1 Wichtige Datentypen
Zur Erluterung:
Deklaration Variablen werden mithilfe der Anweisung ;deklariert. Mehrere Variablen desselben Datentyps knnen, durch
3705.book Seite 42 Dienstag, 8. September 2015 3:39 15
2.1 Variablen und Datentypen
43
2
Kommata getrennt, innerhalb einer Anweisung deklariert werden (z. B.
int x, y;).
Variablen knnen bereits bei der Deklaration einen Wert erhalten, zumBeispiel: short Sh = 30000;.
Wertebereich Bei den Datentypen fr ganze Zahlen fhrt die Zuweisung einer zugroen Zahl zu einer berschreitung des Wertebereichs und zu einer
Fehlermeldung.
Hexadezimal Ganze Zahlen knnen 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 2x162 + 15x161 +
5x160 = 512 + 240 + 5 = 757.
Zahlen mit Nach-
kommastellen
Die Datentypen fr Zahlen mit Nachkommastellen unterscheiden sichin ihrer Genauigkeit. Nachkommastellen mssen im Programmcode
durch einen Dezimalpunkt abgetrennt werden. In der Ausgabe wird da-
gegen ein Dezimalkomma dargestellt. Die Zuweisung einer zu groen
Zahl fhrt zu einer Fehlermeldung. Die Zuweisung einer zu kleinen Zahl
wiederum fhrt zur Anzeige von Unendlich (!) bzw. zu einer unge-
nauen Speicherung.
Division ganzer
Zahlen
Bei der Division von zwei ganzen Zahlen sollten Sie beachten, dass dieNachkommastellen abgeschnitten werden. Mchten Sie das nicht, ms-
sen Sie zumindest eine der beiden Zahlen als Zahl mit Nachkomma-
stellen kennzeichnen, z. B. durch das Anhngen von .0: Statt 1 schreiben
Sie 1.0.
Krzel f und m float-Werte sollten mit einem f gekennzeichnet werden, decimal-Wertemit einem m. Damit erhlt die gesamte Division im vorliegenden Pro-
gramm einen float- bzw. decimal-Wert.
Exponential-
schreibweise
Sehr groe oder sehr kleine Zahlen knnen im Programmcode auch inder Exponentialschreibweise zugewiesen werden. Zwei Beispiele: 1.5e3
fr 1500.0 oder 1.5e-3 fr 0.0015.
true, false Werte fr den Datentyp bool werden mit true und false zugewiesen,aber mit True und False ausgegeben.
Anfhrungszeichen Werte fr Zeichen mssen in einfachen Anfhrungszeichen und fr Zei-chenketten in doppelten Anfhrungszeichen angegeben werden.
Die Datentypen int, double, bool und string werden am Hufigsten ein-gesetzt.
3705.book Seite 43 Dienstag, 8. September 2015 3:39 15
2 Grundlagen
44
bung
bung
Datentypen
Schreiben Sie ein Programm, in welchem Ihre Adresse, Ihr Nach- und Vor-
name, Alter und Gehalt jeweils in Variablen eines geeigneten Datentyps ge-
speichert und anschlieend wie in Abbildung 2.2 ausgegeben werden.
Abbildung 2.2 bung Datentypen
2.1.4 Gltigkeitsbereich
Lokal Variablen, die innerhalb einer Methode vereinbart wurden, haben ihre Gl-
tigkeit nur in der Methode. Auerhalb 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 Verfgung. Beim nchsten Aufruf der glei-
chen Methode werden diese Variablen neu deklariert und erhalten neue
Werte.
Klassenweit gltig Variablen, die auerhalb von Methoden vereinbart werden, sind innerhalb
der gesamten Klasse gltig, 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.
private Diese klassenweit gltigen Variablen werden mit dem Schlsselwort pri-
vate deklariert. Weitere Einzelheiten zu klassenweit gltigen Variablen fin-
den Sie in Abschnitt 5.2. Sie sind auerhalb der Klasse nicht gltig.
public Variablen, die mit dem Schlsselwort public vereinbart werden, sind f-
fentlich. Damit sind sie auch auerhalb der jeweiligen Klasse, also z. B. auch
in anderen Formularen gltig. Mehr dazu ebenfalls in Abschnitt 5.2.
Gibt es in einem Programmabschnitt mehrere Variablen mit dem gleichen
Namen, gelten die folgenden Regeln:
Lokale Variablen mit gleichem Namen in der gleichen Methode sindnicht zulssig.
3705.book Seite 44 Dienstag, 8. September 2015 3:39 15
2.1 Variablen und Datentypen
45
2
Ausblenden Eine klassenweit gltige Variable wird innerhalb einer Methode von ei-ner lokalen Variablen mit dem gleichen Namen ausgeblendet.
Im folgenden Beispiel werden Variablen unterschiedlicher Gltigkeitsbe-
reiche deklariert, an verschiedenen Stellen verndert und ausgegeben (Pro-
jekt Gltigkeitsbereich):
public partial class Form1 : Form{
...private int Mx = 0;
private void cmdAnzeigen1_Click(...){
int x = 0;Mx = Mx + 1;x = x + 1;lblAnzeige.Text = "x: " + x + " Mx: " + Mx;
}
private void cmdAnzeigen2_Click(...){
int Mx = 0;Mx = Mx + 1;lblAnzeige.Text = "Mx: " + Mx;
}}
Listing 2.2 Projekt Gltigkeitsbereich
Zur Erluterung:
In der ersten Methode wird der Wert der klassenweit gltigen VariablenMx bei jedem Aufruf erhht. Die lokale Variable x wird immer wieder auf
1 gesetzt (siehe Abbildung 2.3).
Abbildung 2.3 Lokale und klassenweit gltige Variablen
3705.book Seite 45 Dienstag, 8. September 2015 3:39 15
2 Grundlagen
46
In der zweiten Methode blendet die lokale Variable Mx die gleichnamigeklassenweit gltige Variable aus. Die lokale Variable wird immer wieder
auf 1 gesetzt (siehe Abbildung 2.4).
Abbildung 2.4 Lokale Variable
Startwert setzen Hinweis: Die Variablen wurden vor ihrer ersten Benutzung initialisiert,
d. h., sie wurden mit einem Startwert besetzt.
bung
bung Gltig-
keitsbereich
Erstellen Sie ein Programm, in dem zwei Buttons, ein Label und drei Varia-
blen eines geeigneten Datentyps eingesetzt werden:
die klassenweit gltige Variable x
die Variable y, die nur lokal in der Methode zum Click-Ereignis des ers-ten Buttons gltig ist
die Variable z, die nur lokal in der Methode zum Click-Ereignis des zwei-ten Buttons gltig ist
In der ersten Methode werden x und y jeweils um 0,1 erhht und angezeigt
(siehe Abbildung 2.5).
Abbildung 2.5 Ausgabe der ersten Methode nach einigen Klicks
In der zweiten Methode werden x und z jeweils um 0,1 erhht und ange-
zeigt (siehe Abbildung 2.6).
3705.book Seite 46 Dienstag, 8. September 2015 3:39 15
2.1 Variablen und Datentypen
47
2
Abbildung 2.6 Ausgabe der zweiten Methode nach weiteren Klicks
2.1.5 Konstanten
Konstanten repr-
sentieren Werte
Konstanten sind vordefinierte Werte, die whrend der Laufzeit nicht ver-
ndert werden knnen. Am besten geben Sie Konstanten aussagekrftige
Namen, damit sie leichter zu behalten sind als die Werte, die sie reprsen-
tieren. Konstanten werden an einer zentralen Stelle definiert und knnen
an verschiedenen Stellen des Programms genutzt werden. Somit muss eine
eventuelle nderung einer Konstanten zur Entwurfszeit nur an einer Stelle
erfolgen. Der Gltigkeitsbereich von Konstanten ist analog zum Gltig-
keitsbereich von Variablen.
Integrierte
Konstanten
Zu den Konstanten zhlen auch die integrierten Konstanten. Auch sie re-
prsentieren Zahlen, die aber nicht so einprgsam sind wie die Namen der
Konstanten.
Im folgenden Beispiel werden mehrere Konstanten vereinbart und genutzt
(Projekt Konstanten):
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;
}}
Listing 2.3 Projekt Konstanten, Teil 1
3705.book Seite 47 Dienstag, 8. September 2015 3:39 15
2 Grundlagen
48
Zur Erluterung:
const Konstanten werden mithilfe des Schlsselworts const definiert.
Die Konstanten MaxWert und Eintrag werden mit klassenweiter Gltig-keit festgelegt.
Innerhalb der Methode werden die beiden lokalen Konstanten MaxWertund MinWert festgelegt. MaxWert blendet die klassenweit gltige Kon-
stante gleichen Namens aus, wie Sie in Abbildung 2.7 sehen knnen.
Abbildung 2.7 Konstanten
2.1.6 Enumerationen
Konstanten
aufzhlen
Enumerationen sind Aufzhlungen von Konstanten, die thematisch zu-
sammengehren. 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 fr C# zahlreiche
vordefinierte Enumerationen. hnlich wie bei den integrierten Konstan-
ten sind die Namen der Enumerationen und deren Elemente besser lesbar
als die durch sie reprsentierten Zahlen.
Ein Beispiel: Die Enumeration DialogResult ermglicht dem Programmie-
rer, die zahlreichen mglichen Antworten des Benutzers beim Einsatz von
Windows-Standarddialogfeldern (Ja, Nein, Abbrechen, Wiederholen,
Ignorieren, ...) anschaulich einzusetzen.
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
3705.book Seite 48 Dienstag, 8. September 2015 3:39 15
2.1 Variablen und Datentypen
49
2
}
private void cmdEnumeration1_Click(...){
lblAnzeige.Text = "Farbe: " + Farbe.Gelb +" " + (int)Farbe.Gelb;
}
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
Zur Erluterung:
Klassenweit gltig Es wird die Enumeration Farbe vom Datentyp int vereinbart. Da es sichum einen Typ handelt und nicht um eine Variable oder Konstante, muss
sie auerhalb von Methoden vereinbart werden. Damit ist sie automa-
tisch fr die gesamte Klasse gltig.
Cast (int) In der ersten Ereignismethode wird ein Element der eigenen Enumera-tion Farbe verwendet. Zunchst wird der Name des Elements ausgege-
ben: Gelb. Die Zahl, welche das Element reprsentiert, kann erst nach
einer Umwandlung in den entsprechenden Datentyp ausgegeben wer-
den. Diese Umwandlung wird mithilfe eines Casts vorgenommen: (int)
(siehe Abbildung 2.8).
Abbildung 2.8 Erste Enumeration
DayOfWeek In der zweiten Ereignismethode werden zwei Elemente der vordefi-nierten Enumeration DayOfWeek verwendet, siehe Abbildung 2.9. Sie
3705.book Seite 49 Dienstag, 8. September 2015 3:39 15
2 Grundlagen
50
knnen sie zur Ermittlung des Wochentags eines gegebenen Datums
verwenden.
Abbildung 2.9 Zweite Enumeration
2.2 Operatoren
Zum Zusammensetzen von Ausdrcken werden in C#, wie in jeder anderen
Programmiersprache auch, Operatoren verwendet. In diesem Buch wur-
den schon die Operatoren = fr Zuweisungen und + fr Verkettungen ge-
nutzt.
Prioritt Es gibt verschiedene Kategorien von Operatoren. Vorrangregeln (Priorit-
ten) sind fr die Reihenfolge der Abarbeitung zustndig, falls mehrere Ope-
ratoren innerhalb eines Ausdrucks verwendet werden. Diese Vorrang-
regeln finden Sie weiter unten in diesem Abschnitt. Falls Sie sich bei der
Verwendung dieser Regeln nicht sicher sind, empfiehlt es sich, die Reihen-
folge durch eigene Klammersetzung explizit festzulegen.
2.2.1 Rechenoperatoren
Rechenoperatoren Rechenoperatoren dienen der Durchfhrung von Berechnungen, siehe Ta-
belle 2.1.
Operator Beschreibung
+ Addition
- Subtraktion oder Negation
* Multiplikation
/ Division
Tabelle 2.1 Rechenoperatoren
3705.book Seite 50 Dienstag, 8. September 2015 3:39 15
2.2 Operatoren
51
2
GanzzahldivisionBei der Division von zwei ganzen Zahlen sollten Sie beachten, dass die
Nachkommastellen abgeschnitten werden. Wenn Sie das nicht mchten,
mssen Sie zumindest eine der beiden Zahlen als Zahl mit Nachkomma-
stellen kennzeichnen, z. B. durch Anhngen von .0: Statt 5 schreiben Sie
also 5.0.
ModuloDer Modulo-Operator % berechnet den Rest einer Division. Einige Beispiele
sehen Sie in Tabelle 2.2.
++, --Die Operatoren ++ und -- dienen als Schreibabkrzung und sollen mithilfe
des Projekts Rechenoperatoren erlutert werden:
private void cmdAnzeigen1_Click(...){
int x = 5;x++;++x;x = x + 1;lblA.Text = "Ergebnis: " + x;
}
private void cmdAnzeigen2_Click(...){
int x = 5;lblA.Text = "Ergebnis: " + x++;
}
% Modulo
++ Erhhung um 1
-- Verminderung um 1
Operator Beschreibung
Tabelle 2.1 Rechenoperatoren (Forts.)
Ausdruck Ergebnis Erklrung
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
Tabelle 2.2 Modulo-Operator
3705.book Seite 51 Dienstag, 8. September 2015 3:39 15
2 Grundlagen
52
private void cmdAnzeigen3_Click(...){
int x = 5;lblA.Text = "Ergebnis: " + ++x;
}
Listing 2.5 Projekt Rechenoperatoren
Zur Erluterung:
In der ersten Methode hat x zunchst den Wert 5. Der Wert kann mit ++xoder mit x++ oder mit x = x + 1 jeweils um 1 erhht werden. Anschlieend
hat x dann den Wert 8.
x++ In der zweiten Methode wird x zunchst ausgegeben und anschlieendum 1 erhht. Das liegt daran, dass der Operator ++ hinter x steht. In der
Ausgabe sehen Sie noch den alten Wert 5, nach der Anweisungszeile er-
hlt x den Wert 6.
++x In der dritten Methode wird x zunchst um 1 erhht und anschlieendausgegeben. In diesem Fall steht der Operator ++ vor x. In der Ausgabe
sehen Sie den neuen Wert 6, nach der Anweisungszeile behlt x ebenfalls
den Wert 6.
x=x+1 Die Schreibweise x = x + 1; als eigene Anweisungszeile schafft hier Klar-heit.
Fr den Operator -- gilt sinngem das Gleiche.
Von links nach
rechts
Multiplikation und Division innerhalb eines Ausdrucks sind gleichrangig
und werden von links nach rechts in der Reihenfolge ihres Auftretens aus-
gewertet. Dasselbe gilt fr Additionen und Subtraktionen, wenn sie zusam-
men in einem Ausdruck auftreten. Multiplikation und Division werden da-
bei vor Addition und Subtraktion ausgefhrt.
Klammern Mit Klammern kann diese Rangfolge jedoch auer Kraft gesetzt werden,
damit bestimmte Teilausdrcke vor anderen Teilausdrcken ausgewertet
werden. In Klammern gesetzte Operationen haben grundstzlich immer
Vorrang. Innerhalb der Klammern gilt dann jedoch wieder die normale
Rangfolge der Operatoren.
Projekt Im Projekt Rechenoperatoren knnen Sie nun auch die beiden Berechnun-
gen mit dem Operator % leicht selber nachvollziehen.
3705.book Seite 52 Dienstag, 8. September 2015 3:39 15
2.2 Operatoren
53
2
bung
bung Rechen-
operatoren
Berechnen Sie die beiden folgenden Ausdrcke, speichern Sie das Ergebnis
in einer Variablen eines geeigneten Datentyps, und zeigen Sie es anschlie-
end an:
1. Ausdruck: 3 * 2.5 + 4 * 2
2. Ausdruck: 3 * (-2.5 + 4) * 2
2.2.2 Vergleichsoperatoren
VergleichVergleichsoperatoren (siehe Tabelle 2.3) dienen dazu, festzustellen, ob be-
stimmte Bedingungen zutreffen oder nicht. Das Ergebnis kann beispiels-
weise zur Ablaufsteuerung von Programmen genutzt werden. In Abschnitt
2.4 wird hierauf noch genauer eingegangen.
Einige Beispiele sehen Sie in Tabelle 2.4.
Operator Beschreibung
< kleiner als
grer als
>= grer als oder gleich
== gleich
!= ungleich
Tabelle 2.3 Vergleichsoperatoren
Ausdruck Ergebnis
5 > 3 true
3 == 3.2 false
5 + 3 * 2 >= 12 false
"Maier" == "Mayer" false
Tabelle 2.4 Nutzung von Vergleichsoperatoren
3705.book Seite 53 Dienstag, 8. September 2015 3:39 15
2 Grundlagen
54
Projekt Alle Vergleiche innerhalb dieses Abschnitts knnen Sie auch mithilfe des
Codes im Projekt Vergleichsoperatoren selber nachvollziehen.
bung
bung Vergleichs-
operatoren
Ermitteln Sie das Ergebnis der beiden folgenden Ausdrcke, speichern Sie
es in einer Variablen eines geeigneten Datentyps, und zeigen Sie es an:
1. Ausdruck: 12 3 >= 4 * 2.5
2. Ausdruck: "Maier" != "Mayer"
2.2.3 Logische Operatoren
Logik Logische Operatoren dienen dazu, mehrere Bedingungen zusammenzufas-
sen. Das Ergebnis kann ebenfalls etwa zur Ablaufsteuerung von Program-
men genutzt werden (siehe hierzu auch Abschnitt 2.4). Die logischen Ope-
ratoren sehen Sie in Tabelle 2.5.
! && || ^ Es seien die Variablen A = 1, B = 3 und C = 5 gesetzt. Die Ausdrcke in der ers-
ten Spalte von Tabelle 2.6 ergeben dann jeweils die Ergebnisse in der zwei-
ten Spalte.
Operator Beschreibung Das Ergebnis ist true, wenn ...
! Nicht ... der Ausdruck false ist.
&& Und ... beide Ausdrcke true sind.
|| inklusives Oder ... mindestens ein Ausdruck true ist.
^ exklusives Oder ... genau ein Ausdruck true ist.
Tabelle 2.5 Logische Operatoren
Ausdruck Ergebnis
!(A < B) false
(B > A) && (C > B) true
(B < A) || (C < B) false
(B < A) ^ (C > B) true
Tabelle 2.6 Ausdrcke mit logischen Operatoren
3705.book Seite 54 Dienstag, 8. September 2015 3:39 15
2.2 Operatoren
55
2
ProjektAlle Berechnungen und Erluterungen innerhalb dieses Abschnitts kn-
nen Sie auch mithilfe des Codes im Projekt LogischeOperatoren nachvoll-
ziehen.
bung
bung Logische-
Operatoren
Ermitteln Sie das Ergebnis der beiden folgenden Ausdrcke, speichern Sie
es in einer Variablen eines geeigneten Datentyps, und zeigen Sie es an:
1. Ausdruck: 4 > 3 && 4 > 3
2. Ausdruck: 4 > 3 || 4 > 3
&, |Sie knnen auch die logischen bitweisen Operatoren & (statt &&) und | (statt
||) verwenden. Hierbei werden alle Teile des Vergleichsausdrucks ausge-
wertet. Im Gegensatz dazu wird bei den Operatoren && und || die Auswer-
tung abgebrochen, sobald sich der Wert des Ausdrucks nicht mehr vern-
dern kann. Die Ergebnisse unterscheiden sich allerdings nur dann, wenn
innerhalb des Vergleichsausdrucks Werte verndert werden, z. B. mit den
Operatoren ++ oder --.
2.2.4 Verkettungsoperator
Umwandlung in
Zeichenketten
Der Operator + dient der Verkettung von Zeichenketten. Ist einer der Aus-
drcke keine Zeichenfolge, sondern eine Zahl, wird er (wenn mglich) in ei-
ne Zeichenfolge verwandelt. Das Gesamtergebnis ist dann wiederum eine
Zeichenfolge. Beispiel:
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
3705.book Seite 55 Dienstag, 8. September 2015 3:39 15
2 Grundlagen
56
Zur Erluterung:
Die Zeichenkette a wird aus Variablen und Werten unterschiedlicher Da-tentypen zusammengesetzt.
Die letzte Anweisung wurde auskommentiert, weil sie zu einem Fehlerfhrt. Die int-Variable x kann nicht direkt als Wert fr die Eigenschaft
Text verwendet werden. Sie muss zunchst umgewandelt werden.
Das Ergebnis ist in Abbildung 2.10 zu sehen.
Ein weiteres Beispiel hierfr ist brigens bereits in Abschnitt 1.4.5 zufinden.
Abbildung 2.10 Verkettung
2.2.5 Zuweisungsoperatoren
Zeichen = Den einfachsten Zuweisungsoperator, das Gleichheitszeichen, haben Sie
bereits genutzt. Zur Verkrzung von Anweisungen gibt es aber noch weite-
re Zuweisungsoperatoren. Eine Auswahl sehen Sie in Tabelle 2.7.
Operator Beispiel Ergebnis
= x = 7 x erhlt den Wert 7.
+= x += 5 Der Wert von x wird um 5 erhht.
-= x -= 5 Der Wert von x wird um 5 verringert.
*= x *= 3 Der Wert von x wird auf das Dreifache erhht.
/= 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.
+= z += "abc" Die Zeichenkette z wird um den Text abc verlngert.
Tabelle 2.7 Zuweisungsoperatoren
3705.book Seite 56 Dienstag, 8. September 2015 3:39 15
2.2 Operatoren
57
2
2.2.6 Rangfolge der Operatoren
PriorittEnthlt ein Ausdruck mehrere Operationen, werden die einzelnen Teilaus-
drcke in einer bestimmten Rangfolge ausgewertet und aufgelst, die als
Rangfolge bzw. Prioritt der Operatoren bezeichnet wird. Dabei gilt die in
Tabelle 2.8 dargestellte Rangfolge.
Je weiter oben die Operatoren in der Tabelle stehen, desto hher ist ihre
Prioritt.
KlammernWie schon bei den Rechenoperatoren erwhnt: Mit Klammern kann diese
Rangfolge auer Kraft gesetzt werden, damit bestimmte Teilausdrcke vor
anderen Teilausdrcken ausgewertet werden. In Klammern gesetzte Ope-
rationen haben grundstzlich Vorrang. Innerhalb der Klammern gilt je-
doch wieder die normale Rangfolge der Operatoren.
bung
bung OperatorenSind die Bedingungen in Tabelle 2.9 wahr oder falsch? Lsen Sie die Aufga-
be mglichst ohne Zuhilfenahme des PC.
Operator Beschreibung
- ! negatives Vorzeichen, logisches Nicht
* / % Multiplikation, Division, Modulo
+ - Addition, Subtraktion
< > = Vergleichsoperatoren fr kleiner und grer
== != Vergleichsoperatoren fr gleich und ungleich
&& logisches Und
|| logisches Oder
Tabelle 2.8 Rangfolge der Operatoren
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
Tabelle 2.9 bung Operatoren
3705.book Seite 57 Dienstag, 8. September 2015 3:39 15
2 Grundlagen
58
2.3 Einfache Steuerelemente
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 Program-
miersprache durch anschauliche Praxisbeispiele zu vertiefen.
Daher wird in diesem Abschnitt mit vier weiteren Steuerelementen gear-
beitet, bevor im nchsten Abschnitt die Verzweigungen zur Programm-
steuerung vorgestellt werden: den Steuerelementen Panel, Zeitgeber, Text-
feld und Zahlenauswahlfeld.
2.3.1 Panel
Container Ein Panel dient normalerweise als Container fr andere Steuerelemente. In
unserem Beispiel wird es zur visuellen Darstellung eines Rechtecks und fr
eine kleine Animation genutzt.
Die Eigenschaften BackColor (Hintergrundfarbe), Location (Position) und
Size (Gre) sind Ihnen schon von anderen Steuerelementen her bekannt.
Mithilfe des nachfolgenden Programms im Projekt Panel wird ein Panel
durch Bettigung von vier Buttons um 10 Pixel nach oben, unten, links
oder rechts verschoben. Es hat die Gre 100 100 Pixel, die Startposition
X=145 und Y=80 sowie eine eigene Hintergrundfarbe. Die Bewegung wird
mithilfe der Struktur Point durchgefhrt.
In Abbildung 2.11 und Abbildung 2.12 ist das Panel im Startzustand bzw.
nach einigen Klicks zu sehen.
4 z=10 w=100 z==11 && z>w || w-z==90
5 x=1.0 y=5.7 x>=.9 && y=.9 && !(y0 && n2>0 || n1>n2 && n2!=17
8 n1=1 n2=17 n1>0 && (n2>0 || n1>n2) && n2!=17
Nr. Werte Bedingung
Tabelle 2.9 bung Operatoren (Forts.)
3705.book Seite 58 Dienstag, 8. September 2015 3:39 15
2.3 Einfache Steuerelemente
59
2
Abbildung 2.11 Panel, Startzustand
Abbildung 2.12 Panel, nach ein paar Klicks
Der Programmcode:
private void cmdOben_Click(...){
p.Location = new Point(p.Location.X, p.Location.Y - 10);}
private void cmdLinks_Click(...){
p.Location = new Point(p.Location.X - 10, p.Location.Y);}
3705.book Seite 59 Dienstag, 8. September 2015 3:39 15
2 Grundlagen
60
private void cmdRechts_Click(...){
p.Location = new Point(p.Location.X + 10, p.Location.Y);}
private void cmdUnten_Click(...){
p.Location = new Point(p.Location.X, p.Location.Y + 10);}
Listing 2.7 Projekt Panel
2.3.2 Zeitgeber
Timer-Intervall
Enabled
Ein Zeitgeber (Timer) erzeugt in festgelegten Abstnden Zeittakte. Diese
Zeittakte sind Ereignisse, die der Entwickler mit verschiedenen Aktionen
verbinden kann. Das zugehrige Ereignis heit Tick. Ein Zeitgeber kann wie
jedes andere Steuerelement zum Formular hinzugefgt werden. Da es sich
aber beim Zeitgeber um ein nicht sichtbares Steuerelement handelt, wird
er unterhalb des Formulars angezeigt. Auch zur Laufzeit ist er nicht sicht-
bar. Seine wichtigste Eigenschaft ist das Zeitintervall, in dem das Ereignis
auftreten soll. Dieses Zeitintervall wird in Millisekunden angegeben. Die Ei-
genschaft Enabled dient der Aktivierung bzw. Deaktivierung des Zeitgebers.
Sie knnen sie zur Entwicklungszeit oder zur Laufzeit auf true oder false
stellen.
Im nachfolgenden Programm im Projekt Zeitgeber erscheint zunchst ein
Formular mit zwei Buttons. Bettigen 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 fr die Eigenschaft Interval auf 500 gesetzt wurde. Nach
Bettigung des Stop-Buttons kommt kein weiteres x mehr hinzu.
Abbildung 2.13 Nach einigen Sekunden
3705.book Seite 60 Dienstag, 8. September 2015 3:39 15
2.3 Einfache Steuerelemente
61
2
Der zugehrige 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
bung
bung Panel-
Zeitgeber
Erstellen Sie eine Windows-Anwendung. In der Mitte eines Formulars sol-
len zu Beginn vier Panels verschiedener Farbe der Gre 20 20 Pixel plat-
ziert werden, siehe Abbildung 2.14.
Abbildung 2.14 Startzustand
Sobald ein Start-Button bettigt wird, sollen sich diese vier Panels diago-
nal in ca. fnf bis zehn Sekunden zu den Ecken des Formulars bewegen, je-
des Panel in eine andere Ecke (siehe Abbildung 2.15).
3705.book Seite 61 Dienstag, 8. September 2015 3:39 15
2 Grundlagen
62
Abbildung 2.15 Nach einigen Sekunden
bung
bung Kran Diese bung gehrt nicht zum Pflichtprogramm. Sie ist etwas umfangrei-
cher, verdeutlicht aber die Mglichkeiten einer schnellen Visualisierung
von Prozessen durch C# innerhalb von Visual Studio durch einige wenige
Programmzeilen.
Konstruieren Sie aus mehreren Panels einen Kran (Fundament, senkrech-
tes Hauptelement, waagerechter Ausleger, senkrechter Haken am Ausle-
ger). Der Benutzer soll die Mglichkeit haben, ber insgesamt acht Buttons
die folgenden Aktionen auszulsen:
Haken um 10 Pixel ausfahren bzw. einfahren
Ausleger um 10 Pixel ausfahren bzw. einfahren
Kran um 10 Pixel nach rechts bzw. links fahren
Kran um 10 Pixel in der Hhe ausfahren bzw. einfahren
Denken Sie daran, dass bei vielen Bewegungen mehrere Steuerelemente
bewegt werden mssen, da der Kran sonst seinen Zusammenhalt verliert.
Manche Aktionen resultieren nur aus Grenvernderungen (Eigenschaf-
ten Width und Height), andere nur aus Ortsvernderungen (Location), wie-
der andere aus beidem. In Abbildung 2.16 und Abbildung 2.17 sehen Sie den
Kran im Startzustand bzw. nach einigen Klicks.
Manche Bewegungen des Krans werden vermutlich wenig natrlich wir-
ken. Mit zunehmendem Programmierwissen werden Sie dieses Problem
spter aber beheben knnen.
3705.book Seite 62 Dienstag, 8. September 2015 3:39 15
2.3 Einfache Steuerelemente
63
2
Abbildung 2.16 Startzustand
Abbildung 2.17 Nach einigen Aktionen
2.3.3 Textfelder
EingabefeldEin Textfeld dient in erster Linie dazu, die Eingabe von Text oder Zahlen
vom Benutzer entgegenzunehmen. Diese Eingaben werden in der Eigen-
schaft Text des Textfelds gespeichert. Das Aussehen und das Verhalten ei-
nes Textfelds werden u. a. durch folgende Eigenschaften bestimmt:
MultiLine: Steht MultiLine auf true, knnen Sie bei der Eingabe und beider Anzeige mit mehreren Textzeilen arbeiten.
ScrollBars: Sie knnen ein Textfeld mit vertikalen und/oder horizonta-len Bildlaufleisten zur Eingabe und Anzeige lngerer Texte versehen.
3705.book Seite 63 Dienstag, 8. September 2015 3:39 15
2 Grundlagen
64
MaxLength: Mit dieser Eigenschaft knnen Sie die Anzahl der Zeichen desTextfelds beschrnken. Ist keine Beschrnkung vorgesehen, kann das
Textfeld insgesamt 32768 Zeichen aufnehmen.
Passwort PasswordChar: Falls Sie fr diese Eigenschaft im Entwurfsmodus einPlatzhalterzeichen eingegeben haben, wird whrend der Laufzeit fr je-
des eingegebene Zeichen nur dieser Platzhalter angezeigt. Diese Eigen-
schaft wird vor allem bei Passwortabfragen verwendet.
Der Inhalt eines Textfelds kann mit den gewohnten Mitteln (z. B. (Strg) +
(C) und (Strg) + (V)) in die Zwischenablage kopiert bzw. aus der Zwischen-
ablage eingefgt werden.
Im nachfolgenden Programm im Projekt Textfelder kann der Benutzer in
einem Textfeld einen Text eingeben. Nach Bettigung des Buttons Ausga-
be wird der eingegebene Text in einem zusammenhngenden Satz ausge-
geben (siehe Abbildung 2.18).
Abbildung 2.18 Eingabe ins Textfeld
Der Code lautet wie folgt:
private void cmdAusgabe_Click(...){
lblAusgabe.Text = "Sie haben '" + txtEingabe.Text +"' eingegeben";
}
Listing 2.9 Projekt Textfelder
Zur Erluterung:
In der Eigenschaft Text des Textfelds wird die Eingabe gespeichert. DieEigenschaft wird in einen lngeren Ausgabetext eingebettet.
Zahlen eingeben Bei der Eingabe und Auswertung von Zahlen sind einige Besonderheiten zu
beachten. Im nachfolgenden Programm, ebenfalls im Projekt Textfelder,
3705.book Seite 64 Dienstag, 8. September 2015 3:39 15
2.3 Einfache Steuerelemente
65
2
kann der Benutzer in einem Textfeld eine Zahl eingeben. Nach Bettigung
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;
}
Listing 2.10 Projekt Textfelder, Zahleneingabe
Zur Erluterung:
ToDouble()Es soll dafr gesorgt werden, dass der Inhalt des Textfelds explizit in eine
Zahl (mit mglichen Nachkommastellen) umgewandelt wird. Das errei-
chen Sie mithilfe der Methode ToDouble() aus der Klasse Convert. Die Klasse
Convert bietet eine Reihe von Methoden fr die Umwandlung (sprich Kon-
vertierung) in andere Datentypen.
Wenn eine Zeichenkette eingegeben wurde, die eine Zahl darstellt, wirdsie auf die oben angegebene Weise in eine Zahl umgewandelt, mit der
dann gerechnet werden kann.
Stellt die eingegebene Zeichenkette keine Zahl dar, kommt es zu einemLaufzeitfehler. Diese Situation sollten Sie natrlich vermeiden:
Sie knnen dafr vorher berprfen, ob es sich bei der Zeichenkette
um eine gltige Zahl handelt, und entsprechend reagieren. Das wird
Ihnen mglich sein, sobald Sie die in Abschnitt 2.4 beschriebenen
Verzweigungen zur Programmsteuerung beherrschen.
Ausnahme-
behandlung
Allgemein knnen Sie Programme so schreiben, dass ein Programm-
abbruch abgefangen wird. Dazu werden Sie in der Lage sein, sobald
Sie die Ausnahmebehandlung (siehe hierzu Kapitel 3, Fehlerbehand-
lung) anwenden knnen.
Einige Beispiele:
Abbildung 2.19 zeigt die Eingabe einer Zahl mit Nachkommastellen.
3705.book Seite 65 Dienstag, 8. September 2015 3:39 15
2 Grundlagen
66
Abbildung 2.19 Eingabe einer Zahl mit Nachkommastellen
Debugging beenden Die Eingabe einer Zeichenkette, wie zum Beispiel abc, fhrt zur Anzeige
einer nicht behandelten Ausnahme. Die Zeile, in welcher der Fehler auftritt,
wird im Code markiert, damit der Fehler beseitigt werden kann (siehe Ab-
bildung 2.20).
Abbildung 2.20 Markierung der Fehlerzeile
Es wird ein zustzliches Dialogfeld angezeigt. Wenn man darin nun den
Button Weiter bettigt, wird das Programm beendet. Whlt man stattdes-
sen den Button Unterbrechen, wird das Programm unterbrochen. Bei ei-
nem unterbrochenen Programm knnen Sie die aktuellen Werte von Va-
riablen kontrollieren, indem Sie die Maus ber diesen Variablen platzieren.
Anschlieend muss das Programm ber den Menpunkt Debuggen De-
bugging beenden beendet werden, bevor es neu gestartet werden kann.
Die Eingabe einer Zahl, bei der ein Punkt anstelle eines Kommas zur Ab-
trennung von Nachkommastellen eingegeben wird, fhrt zu einem ganz
anderen Rechenergebnis, siehe Abbildung 2.21.
3705.book Seite 66 Dienstag, 8. September 2015 3:39 15
2.3 Einfache Steuerelemente
67
2
Abbildung 2.21 Punkt vor den Nachkommastellen
Der Punkt wird ignoriert und die Zahl 3,52 wird dementsprechend als 352
interpretiert, was dann letztlich zu dem Ergebnis 704 fhrt.
2.3.4 Zahlenauswahlfeld
NumericUpDownDas Steuerelement Zahlenauswahlfeld (NumericUpDown) stellt eine andere
Mglichkeit dar, Zahlenwerte an ein Programm zu bermitteln. Die Zah-
lenwerte knnen innerhalb selbst gewhlter Grenzen und in selbst defi-
nierten Schritten ber zwei kleine Pfeiltasten ausgewhlt werden. Sie kn-
nen aber auch weiterhin wie bei einem Textfeld eingegeben werden.
Wichtige Eigenschaften des Steuerelements sind:
Value Value: bezeichnet zur Entwicklungszeit den Startwert und zur Laufzeitden vom Benutzer aktuell eingestellten Wert.
Maximum, Minimum: bestimmen den grtmglichen Wert und den kleinst-mglichen Wert der Eigenschaft Value. Es handelt sich also um die Werte,
die durch die Auswahl mit den Pfeiltasten ganz oben und ganz unten er-
reicht werden knnen.
Increment: Mit Increment wird die Schrittweite eingestellt, mit der sichder Wert (Eigenschaft Value) ndert, wenn der Benutzer eine der kleinen
Pfeiltasten bettigt.
DecimalPlaces: bestimmt die Anzahl der Nachkommastellen in der An-zeige des Zahlenauswahlfelds.
ValueChangedDas wichtigste Ereignis dieses Steuerelements ist ValueChanged. Es tritt bei
der Vernderung der Eigenschaft Value ein und sollte anschlieend zur
Programmsteuerung verwendet werden.
Im nachfolgenden Programm im Projekt ZahlenAufAb werden alle diese Ei-
genschaften und das eben angesprochene Ereignis genutzt. Der Benutzer
kann hierbei Zahlenwerte zwischen 5,0 und +5,0 in Schritten von 0,1 ber
3705.book Seite 67 Dienstag, 8. September 2015 3:39 15
2 Grundlagen
68
ein Zahlenauswahlfeld einstellen. Der ausgewhlte Wert wird unmittelbar
in einem Label angezeigt (siehe Abbildung 2.22).
Abbildung 2.22 Zahlenauswahlfeld
Die Eigenschaften wurden im Eigenschaftenfenster wie folgt festgelegt:
Value: Wert 2, die Anwendung startet also bei dem Wert 2,0 fr das Zah-lenauswahlfeld
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 wurde bisher rein sequenziell abgearbeitet, also eine
Anweisung nach der anderen. Kontrollstrukturen ermglichen eine Steue-
rung dieser Reihenfolge. Diese Kontrollstrukturen unterteilen sich in Ver-
zweigungen und Schleifen. Verzweigungen gestatten es dem Programm,
sich in verschiedene alternative Anweisungsblcke zu verzweigen.
Es gibt die beiden Verzweigungsstrukturen if...else und switch...case.
Diese Auswahlmglichkeiten bergeben anhand von Bedingungen die
Programmausfhrung an einen bestimmten Anweisungsblock. Bedingun-
gen werden mithilfe der bereits vorgestellten Vergleichsoperatoren er-
stellt.
3705.book Seite 68 Dienstag, 8. September 2015 3:39 15
2.4 Verzweigungen
69
2
2.4.1 if...else
Eine Verzweigung mit if...else hat folgenden Aufbau:
if (Bedingung){
Anweisungen1}[ else{
Anweisungen2} ]
if...elseDie Bedingung wird ausgewertet, sie ist entweder wahr oder falsch (true
oder false). Ist die Bedingung wahr, wird der erste Teil (Anweisungen1) aus-
gefhrt. Ist die Bedingung nicht wahr und gibt es einen else-Teil, wird die-
ser Teil (Anweisungen2) ausgefhrt. Der else-Teil ist optional.
Ohne KlammernFalls es sich bei AnweisungenX nur um eine einzelne Anweisung handelt,
knnen in diesem Teil der Verzweigung die geschweiften Klammern weg-
gelassen werden.
GeschachteltVerzweigungen knnen auch ineinander verschachtelt werden, falls es
mehr als zwei Mglichkeiten fr den weiteren Programmverlauf gibt.
Mehrere VergleicheEine Bedingung kann aus einem einfachen Ausdruck mit Vergleichsopera-
toren bestehen oder aus mehreren Vergleichsausdrcken.
Es folgen einige Beispiele im Projekt IfElse, siehe Abbildung 2.23. Die unter-
suchten Zahlenwerte knnen ber Zahlenauswahlfelder eingestellt wer-
den. Testen Sie die Mglichkeiten durch unterschiedliche Einstellungen
der Zahlenauswahlfelder, bevor Sie einen der Buttons bettigen.
Abbildung 2.23 Projekt IfElse
if ohne elseZunchst ein if ohne else:
private void cmdAnzeige1_Click(...){
3705.book Seite 69 Dienstag, 8. September 2015 3:39 15
2 Grundlagen
70
int x = (int)numX.Value;lblAnzeige.Text = "";
if (x > 0){
lblAnzeige.Text = "x ist grer als 0";numX.BackColor = Color.LightGreen;
}}
Listing 2.12 Projekt IfElse, Teil 1
Zur Erluterung:
Die int-Variable x erhlt den Wert, der im Zahlenauswahlfeld numX einge-stellt wurde. Da dieses Feld eine Variable vom Typ decimal liefert, muss
der Wert zunchst mithilfe des Casts (int) umgewandelt werden.
Das Label wird geleert.
Nun zur eigentlichen Verzweigung: Falls der Wert von x grer als 0 ist,wird ein entsprechender Text ausgegeben. Auerdem wird das Zahlen-
auswahlfeld hellgrn eingefrbt (siehe Abbildung 2.24).
Da es sich um zwei Anweisungen handelt, mssen sie in geschweifteKlammern gesetzt werden.
Falls der Wert von x kleiner oder gleich 0 ist, passiert nichts. Das Labelbleibt leer. Es gibt keinen else-Teil, in dem etwas ausgefhrt werden
knnte.
Einrckung Die Anweisungen innerhalb des if-Blocks werden eingerckt. Dadurchist das Programm leichter lesbar. Dies ist prinzipiell eine empfehlens-
werte Vorgehensweise, insbesondere bei weiteren Verschachtelungen
innerhalb des Programms.
Abbildung 2.24 Bedingung trifft zu
3705.book Seite 70 Dienstag, 8. September 2015 3:39 15
2.4 Verzweigungen
71
2
if-elseNun folgt ein if mit else. Es wird also in jedem Fall etwas ausgefhrt:
private void cmdAnzeige2_Click(...){
int x = (int)numX.Value;
if (x > 0){
lblAnzeige.Text = "x ist grer als 0";numX.BackColor = Color.LightGreen;
}else{
lblAnzeige.Text = "x ist kleiner als 0 oder gleich 0";numX.BackColor = Color.LightBlue;
}}
Listing 2.13 Projekt IfElse, Teil 2
Zur Erluterung:
Falls der Wert von x jetzt kleiner oder gleich 0 ist, wird auch etwas ausge-geben. Auerdem wird das Zahlenauswahlfeld nunmehr hellblau einge-
frbt (siehe Abbildung 2.25).
Da es sich auch im else-Teil um zwei Anweisungen handelt, mssen sieebenfalls in geschweifte Klammern gesetzt werden.
Abbildung 2.25 Zweig mit else
Ternrer OperatorDer ternre Operator ? : stellt eine alternative, verkrzte Schreibweise fr
eine Verzweigung mit if-else dar. Nachfolgend dasselbe Beispiel wie im
zweiten Teil des Projekts, diesmal jedoch mit dem ternren Operator:
private void cmdAnzeige3_Click(...){
3705.book Seite 71 Dienstag, 8. September 2015 3:39 15
2 Grundlagen
72
int x = (int)numX.Value;
lblAnzeige.Text = x > 0 ? "x > 0" : "x
2 Grundlagen
74
Zur Erluterung:
Nun werden beide Zahlenauswahlfelder ausgewertet.
Logisches Und Falls beide Werte grer als 0 sind, wird der erste Text angezeigt.
Falls einer der beiden Werte kleiner oder gleich 0 ist, wird der zweiteText angezeigt (siehe Abbildung 2.27).
Da jeweils nur eine Anweisung ausgefhrt wird, knnen die geschweif-ten Klammern weggelassen werden.
Abbildung 2.27 Logisches Und
Logisches Oder Der logische Oder-Operator || liefert ein anderes Ergebnis:
private void cmdAnzeige6_Click(...){
int x = (int)numX.Value;int y = (int)numY.Value;numX.BackColor = Color.White;
if (x > 0 || y > 0)lblAnzeige.Text = "x oder y oder beide sind grer als 0";
elselblAnzeige.Text = "Keine der Zahlen ist grer als 0";
}
Listing 2.17 Projekt IfElse, Teil 6
Zur Erluterung:
Logisches Oder Falls einer der Werte oder beide Werte grer als 0 sind, wird der ersteText angezeigt (siehe Abbildung 2.28).
3705.book Seite 74 Dienstag, 8. September 2015 3:39 15
2.4 Verzweigungen
75
2
Abbildung 2.28 Logisches Oder
Falls beide Werte kleiner oder gleich 0 sind, wird der zweite Text ange-zeigt.
Einen Unterschied zum normalen Oder bildet der Exklusiv-Oder-Ope-
rator ^:
private void cmdAnzeige7_Click(...){
int x = (int)numX.Value;int y = (int)numY.Value;numX.BackColor = Color.White;lblAnzeige.Text = "";
if (x > 0 ^ y > 0)lblAnzeige.Text = "Nur x oder nur y ist grer als 0";
}
Listing 2.18 Projekt IfElse, Teil 7
Zur Erluterung:
Logisches
Exklusiv-Oder
Es wird dann etwas angezeigt, wenn nur x oder nur y grer als 0 ist(siehe Abbildung 2.29).
Falls beide Werte kleiner oder gleich 0 sind oder beide Werte grer als0 sind, wird nichts angezeigt.
3705.book Seite 75 Dienstag, 8. September 2015 3:39 15
2 Grundlagen
76
Abbildung 2.29 Logisches Exklusiv-Oder
2.4.2 switch...case
Mehrfachauswahl Eine Verzweigung kann in bestimmten F