Know-how Wissen, wie’s fürgeht. Kreative. Leseprobe Jeder kann programmieren lernen! Thomas Theis führt Sie gekonnt in die Grundlagen von Visual Basic ein. Probieren Sie es gleich aus. Außerdem enthält diese Leseprobe die Lösung zu Kapitel 1 und 2, das Inhaltsverzeichnis und das gesamte Stichwortverzeichnis des Buches. »Einführung« »Grundlagen« »Lösungen« Inhaltsverzeichnis Index Der Autor Leseprobe weiterempfehlen Thomas Theis Einstieg in Visual Basic 2015 – Ideal für Programmiereinsteiger geeignet 552 Seiten, broschiert, 5. Auflage 2015 29,90 Euro, ISBN 978-3-8362-3703-1 www.rheinwerk-verlag.de/3813 Kapitel 1 Einführung 1 In diesem Kapitel erlernen Sie anhand eines ersten Projekts den Umgang mit der Entwicklungsumgebung und den Steuerelementen. Sie sind anschließend in der Lage, Ihr erstes eigenes Windows-Programm zu erstellen. Visual Basic 2015 ist der Nachfolger von Visual Basic 2013 und damit eine weitere Version von Visual Basic .NET. Hierbei handelt es sich um eine objektorientierte Programmiersprache. Mithilfe der Entwicklungsumgebung Visual Studio 2015 können Sie u. a. in Visual Basic programmieren. 1.1 Aufbau dieses Buchs Dieses Buch vermittelt Ihnen zunächst einen einfachen Einstieg in die Programmierung mit Visual Basic und dem Visual Studio 2015. Die Bearbeitung der Beispiele und das selbständige Lösen der vorliegenden Übungsaufgaben helfen dabei, da sie für schnelle Erfolgserlebnisse sorgen, die Sie zum Weitermachen motivieren sollen. In späteren Kapiteln werden auch die komplexen 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 schon von anderen Windows-Programmen kennen, werden gemeinsam vermittelt. Die Anschaulichkeit einer Windows-Anwendung hilft Ihnen dabei, den eher theoretischen Hintergrund der Programmiersprache leichter zu verstehen. Grundlagen 1.2 Visual Studio 2015 Es wird die frei verfügbare Entwicklungsumgebung Visual Studio Community 2015 eingesetzt. Sie können sie unter Windows 7 bis Windows 10 nutzen. Diese Version von Visual Studio können Sie bei Microsoft Community-Version 17 1 1.4 Einführung Visual-Basic-Entwicklungsumgebung 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 ausführbaren Programme, einen Debugger zur Fehlersuche und vieles mehr. Zur Installation verweise ich auf den Anhang. Statt der hier empfohlenen Community-Version können Sie auch verschiedene frei verfügbare Express-Versionen von Visual Studio 2015 nutzen. Sie können sie von der Microsoft-Internetseite per Web-Installer auf Ihrem Rechner installieren. 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 die Schritte durchlaufen, die zur Erstellung eines einfachen Programms mithilfe von Visual Basic notwendig sind. Das Programm soll nach dem Aufruf zunächst aussehen wie in Abbildung 1.1. 1 Abbildung 1.2 Nach Betätigung des Buttons »Hallo« 1.4 Visual-Basic-Entwicklungsumgebung Während der Projekterstellung lernen Sie Schritt für Schritt die Visual-Studio-Entwicklungsumgebung für Visual Basic kennen. 1.4.1 Ein neues Projekt Nach dem Aufruf des Programms Visual Studio Community 2015 müssen Sie zur Erstellung eines neuen Projekts den Menüpunkt Datei • Neues Projekt • Installiert • Vorlagen • Visual Basic • Windows FormsAnwendung auswählen. Als Projektname wird WindowsApplication1 vorgeschlagen. Sie sollten ihn ändern, z. B. in MeinErstes. Es erscheinen einige Elemente der Entwicklungsumgebung. Folgende Elemente sind besonders wichtig: 왘 Das Benutzerformular (engl.: Form) enthält die Oberfläche für den Benutzer des Programms (siehe Abbildung 1.3). Form Abbildung 1.1 Erstes Programm, nach dem Aufruf Nach Betätigung des Buttons Hallo soll sich der Text in der obersten Zeile verändern, siehe Abbildung 1.2. Abbildung 1.3 Benutzerformular 왘 Der Werkzeugkasten (engl.: Toolbox) enthält die Steuerelemente für den Benutzer, mit denen er den Ablauf des Programms steuern kann. Sie 18 Toolbox 19 1 1.4 Einführung Visual-Basic-Entwicklungsumgebung werden vom Programmentwickler in das Formular eingefügt (siehe Abbildung 1.4). 1 Abbildung 1.6 Projektmappen-Explorer Abbildung 1.4 Werkzeugkasten, mit Kategorien von Steuerelementen EigenschaftenFenster 왘 Das Eigenschaften-Fenster (engl.: Properties Window) dient zum 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. Dazu einfach das zweite Symbol von links, unter Form1, betätigen. Sollten der Werkzeugkasten, das Eigenschaften-Fenster oder der Projektmappen-Explorer nicht angezeigt werden, dann können Sie das betreffende Element über das Menü Ansicht einblenden. Sollte das Formular einmal nicht sichtbar sein, können Sie es über einen Doppelklick auf den Namen (Form1.vb) im Projektmappen-Explorer einblenden. Sollten die Eigenschaften eines Steuerelements nicht im bereits sichtbaren Eigenschaften-Fenster angezeigt werden, dann markieren Sie zunächst den Namen der Formulardatei (Form1.vb) im Projektmappen-Explorer und anschließend das betreffende Steuerelement. Elemente anzeigen Zunächst werden nur einfache Programme mit wenigen Elementen geschrieben, daher benötigen Sie den Projektmappen-Explorer 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 20 왘 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 den Text anzeigen bzw. das Programm beenden. Label, Button Um ein Steuerelement einzufügen, ziehen Sie es mithilfe der Maus vom Werkzeugkasten an die gewünschte Stelle im Formular. Alle Steuerelemente finden sich im Werkzeugkasten unter Alle Windows Forms. Allgemeine Steuerelemente 21 1 1.4 Einführung Übersichtlicher ist der Zugriff über Allgemeine Steuerelemente (engl.: Common Controls), siehe Abbildung 1.7. Visual-Basic-Entwicklungsumgebung Ein Button (eigentlich: Command Button), der die Anzeige der Zeit auslösen soll, wird beispielsweise mit cmdZeit bezeichnet. Weitere Vorsilben sind txt (Textfeld/TextBox), lbl (Bezeichnungsfeld/Label), opt (Optionsschaltfläche/RadioButton), frm (Formular/Form) und chk (Kontrollkästchen/ CheckBox). cmd, txt, lbl, ... 1 Zur Änderung des Namens eines Steuerelementes müssen Sie es zunächst auswählen. Die Auswahl kann entweder durch Anklicken des Steuerelements auf dem Formular oder durch Auswahl aus der Liste am oberen Ende des Eigenschaften-Fensters geschehen. Abbildung 1.7 Werkzeugkasten, Kategorie »Allgemeine Steuerelemente« Steuerelement auswählen Ein Doppelklick auf ein Steuerelement im Werkzeugkasten fügt es ebenfalls in die Form ein. Anschließend können Ort und Größe noch verändert werden. Dazu müssen Sie das betreffende Steuerelement vorher durch Anklicken ausgewählt haben, siehe Abbildung 1.8. Ein überflüssiges Steuerelement können Sie durch Auswählen und Drücken der Taste (Entf) entfernen. 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 Spalte ihr aktueller Wert. Die Eigenschaft (Name) steht am Anfang der Liste der Eigenschaften. Die betreffende Zeile wird durch Anklicken ausgewählt, und der neue Name wird eingegeben. Nach Bestätigung mit der Taste (¢) ist die Eigenschaft geändert, siehe Abbildung 1.9. EigenschaftenFenster Abbildung 1.8 Ausgewählter Button Abbildung 1.9 Button, nach der Namensänderung Die Größe und andere Eigenschaften des Formulars selbst können auch verändert werden. Dazu müssen Sie es vorher durch Anklicken auf einer freien Stelle auswählen. 1.4.3 Arbeiten mit dem Eigenschaften-Fenster Die eingefügten Steuerelemente haben zunächst einheitliche Namen und Aufschriften, diese sollten allerdings zur einfacheren Programmentwicklung geändert werden. Es haben sich bestimmte Namenskonventionen eingebürgert, welche die Lesbarkeit erleichtern. Diese Namen beinhalten den Typ (mit drei Buchstaben abgekürzt) und die Aufgabe des Steuerelements (mit großem Anfangsbuchstaben). 22 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 den Namen und die Aufschrift des Formulars sollten Sie ändern. Im Folgenden sind die gewünschten Eigenschaften für die Steuerelemente dieses Programms in Tabellenform angegeben, siehe Tabelle 1.1. Eigenschaft Text Zu diesem Zeitpunkt 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 während der Laufzeit des Programms durch den Programmcode verändern lassen. Startzustand 23 1 1.4 Einführung Typ Eigenschaft Einstellung Formular Text Mein Erstes Button Name cmdHallo Text Hallo Name cmdEnde Text Ende Name lblAnzeige Text (leer) BorderStyle FixedSingle Button Label Tabelle 1.1 Steuerelemente mit Eigenschaften Bei einem Label ergibt die Einstellung der Eigenschaft BorderStyle auf FixedSingle einen Rahmen. Zur Änderung auf FixedSingle müssen Sie die Liste bei der Eigenschaft aufklappen und den betreffenden Eintrag auswählen, siehe Abbildung 1.10. Zur Änderung einiger Eigenschaften müssen Sie eventuell sogar ein Dialogfeld aufrufen. Visual-Basic-Entwicklungsumgebung 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 direkt untereinander. Liste der Steuerelemente 1 1.4.4 Speichern eines Projekts Die Daten eines Visual-Basic-Projekts werden in verschiedenen Dateien gespeichert. Zum Speichern des gesamten Projekts wird der Menüpunkt Datei • Alles Speichern verwendet. Diesen Vorgang sollten Sie in regelmäßigen Abständen durchführen, damit keine Änderungen verloren gehen können. Alles speichern Die in diesem Skript angegebenen Namen dienen als Empfehlung. Sie erleichtern die eindeutige Orientierung und das spätere Auffinden von alten 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. Sie als Entwickler müssen dafür sorgen, dass aufgrund dieses Ereignisses der gewünschte Text angezeigt wird. Zu diesem Zweck schreiben Sie Programmcode und ordnen diesen Code dem Ereignis zu. Der Code wird in einer Ereignisprozedur abgelegt. Ereignis Zum Schreiben einer Ereignisprozedur führen Sie am besten einen Doppelklick auf das betreffende Steuerelement aus. Es erscheint das Codefenster. Zwischen der Formular- und der Code-Ansicht 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. Ereignisprozedur Abbildung 1.10 Label, nach der Änderung von Name und BorderStyle Im Label soll zunächst der Text (leer) erscheinen. Hierzu müssen Sie den vorhandenen Text durch Anklicken auswählen und ändern. 24 Abbildung 1.11 Registerkarten 25 1 1.4 Einführung Nach erfolgtem Doppelklick auf den Button Hallo erscheinen im Codefenster folgende Einträge: Public Class Form1 Private Sub cmdHallo_Click(sender As Object, e As EventArgs) Handles cmdHallo.Click End Sub End Class Listing 1.1 Projekt »MeinErstes«, Button »Hallo«, ohne Code Innerhalb der Ereignisprozedur ist der Platz für den eigenen Programmcode. 1.4.6 Schreiben von Programmcode 1 In der Prozedur cmdHallo_Click() soll eine Befehlszeile eingefügt werden, sodass sie anschließend wie folgt aussieht: Public Class Form1 Private Sub cmdHallo_Click(sender As Object, e As EventArgs) Handles cmdHallo.Click lblAnzeige.Text = "Hallo" End Sub End Class Listing 1.2 Projekt »MeinErstes«, Button »Hallo«, mit Code VB.NET ist eine objektorientierte Sprache. Ein wichtiges Element objektorientierter Sprachen sind Klassen. Alle Elemente des aktuellen Formulars Form1 stehen innerhalb der Klasse Form1 (zwischen Public Class und End Class). Auf die Einzelheiten der Objektorientierung wird zu einem späteren Zeitpunkt eingegangen, da das hier noch nicht notwendig ist und eher verwirren würde. Der Text muss in Anführungszeichen gesetzt werden, da Visual Basic sonst annimmt, dass es sich um eine Variable mit dem Namen Hallo handelt. Der Inhalt einer Prozedur setzt sich aus einzelnen Anweisungen zusammen, die nacheinander ausgeführt werden. Die vorliegende Prozedur enthält nur eine Anweisung; in ihr erfolgt mithilfe des Gleichheitszeichens eine Zuweisung. Anweisung Sub Der Programmcode der Ereignisprozedur steht später zwischen Private Sub und End Sub. Der Name der Prozedur besteht aus den zwei Teilen Name des Steuerelements und Ereignis. Zuweisung Zeilenumbruch Die Anweisung Private Sub ... ist recht lang, daher wurde sie auf mehrere Zeilen verteilt. Visual Basic ermöglicht Zeilenumbrüche an bestimmten Stellen einer Anweisung auf einfache Art und Weise. Das erhöht wesentlich die Lesbarkeit von Programmen. Aus Druckgründen werden in diesem Buch häufig längere Anweisungen auf mehrere Zeilen verteilt. Die Regeln für Zeilenumbrüche finden Sie in Abschnitt 1.4.12. Der anfänglich ausgeführte Doppelklick führt immer zu dem Ereignis, das am häufigsten mit dem betreffenden Steuerelement verbunden wird. Das ist beim Button natürlich das Ereignis Click. Zu einem Steuerelement gibt es aber auch noch andere mögliche Ereignisse. Bei einer Zuweisung wird der Ausdruck rechts vom Gleichheitszeichen ausgewertet und der Variablen, der Objekt-Eigenschaft oder der Steuerelementeigenschaft links vom Gleichheitszeichen zugewiesen. Die Zeichenkette Hallo wird der Eigenschaft Text des Steuerelements lblAnzeige mithilfe der Schreibweise Steuerelement.Eigenschaft = Wert zugewiesen. Das führt zur Anzeige des Werts. Class Oberhalb von Public Class ... und von Private Sub ... erscheinen seit Visual Studio 2015 automatisch weitere Informationen zur Klasse Form1 und ihren Elementen in kleiner grauer Schrift, wie zum Beispiel 0 references oder 2 references. Auch sie können wir zunächst ignorieren. 26 Visual-Basic-Entwicklungsumgebung Nach dem Wechsel auf die Formularansicht können Sie das nächste Steuerelement auswählen, für das eine Ereignisprozedur geschrieben werden soll. Innerhalb des Codefensters können Sie Text mit den gängigen Methoden der Textverarbeitung editieren, kopieren, verschieben und löschen. Code editieren Sollten Sie bereits bei der Eingabe des Programmcodes Syntaxfehler gemacht haben, wird das angezeigt. Sie sollten den Code unmittelbar entsprechend korrigieren. Syntaxfehler In der Ereignisprozedur cmdEnde_Click() soll der folgende Code stehen: 27 1 1.4 Einführung Private Sub cmdEnde_Click(sender As Object, e As EventArgs) Handles cmdEnde.Click Close() End Sub Listing 1.3 Projekt »MeinErstes«, Button »Ende« Die Methode Close() dient zum Schließen eines Formulars. Da es sich um das einzige Formular dieses Projekts handelt, wird dadurch das Programm beendet und die gesamte Windows-Anwendung geschlossen. Me Das aktuelle Objekt einer Klasse wird mit Me bezeichnet. Da wir uns innerhalb der Klasse für das aktuelle Formular befinden, bezieht sich Me auf dieses Formular. Die Anweisung zum Schließen dieses Formulars könnte also auch lauten: Me.Close(). In vielen Fällen ist Me allerdings überflüssig und kann weggelassen werden. Graue Schriftfarbe Seit der Version 2015 von Visual Studio werden überflüssige Elemente im Programmcode deutlicher gekennzeichnet, indem sie in grauer Schriftfarbe dargestellt werden. Falls sich der Cursor in der betreffenden Zeile befindet, dann erscheint links von der Zeile eine gelbe Glühbirne. Platzieren Sie die Maus über dieser Glühbirne, dann wird der Zugang zu Hinweisen ermöglicht, wie die überflüssigen Elemente entfernt werden können. In Abbildung 1.12 sehen Sie ein Beispiel: Im Programmcode wurde Me.Close() statt Close() notiert. Visual-Basic-Entwicklungsumgebung 1.4.7 Kommentare Bei längeren Programmen mit vielen Anweisungen gehört es zum guten Programmierstil, Kommentarzeilen zu schreiben. In diesen Zeilen werden einzelne Anweisungen oder auch längere Blöcke von Anweisungen erläutert, damit Sie selbst oder auch ein anderer Programmierer sie später leichter verstehen. Eine Kommentarzeile beginnt mit einem einfachen Hochkomma. Alle Zeichen bis zum Ende der Zeile werden als Kommentar angesehen und folglich nicht übersetzt oder ausgeführt. 1 Einfaches Hochkomma Der folgende Programmcode wurde um eine Kommentarzeile ergänzt: Private Sub cmdEnde_Click(sender As Object, e As EventArgs) Handles cmdEnde.Click ' Schließt die Anwendung Close() End Sub Listing 1.4 Projekt »MeinErstes«, Button »Ende«, mit Kommentar Ein kleiner Trick: Sollen bestimmte Programmzeilen für einen Test des Programms kurzfristig nicht ausgeführt werden, können Sie sie auskommentieren, indem Sie das Hochkomma vor die betreffenden Zeilen setzen. Das geht sehr schnell, indem Sie die betreffende(n) Zeile(n) markieren und anschließend das entsprechende Symbol im linken Bereich der Symbolleiste anklicken, siehe Abbildung 1.13. Rechts daneben befindet sich das Symbol, das die Auskommentierung nach dem Test wieder rückgängig macht. Code auskommentieren Abbildung 1.13 Kommentar ein/aus 1.4.8 Starten, Ausführen und Beenden des Programms Abbildung 1.12 »Me« kann entfernt werden. Das waren Beispiele zur Änderung der Eigenschaften eines Steuerelements zur Laufzeit des Programms durch Programmcode. Sie erinnern sich: Zu Beginn hatten wir die Starteigenschaften der Steuerelemente im Eigenschaften-Fenster eingestellt. 28 Nach dem Einfügen der Steuerelemente und dem Erstellen der Ereignisprozeduren ist das Programm fertig, und Sie können es starten. Dazu wird der Starten-Button in der Symbolleiste (dreieckiger grüner Pfeil nach rechts) betätigt. Alternativ starten Sie das Programm über die Funktionstaste (F5) oder den Menüpunkt Debuggen • Debugging starten. Das Formular erscheint, das Betätigen der Buttons führt zum programmierten Ergebnis. Programm starten 29 1 1.4 Einführung Programm beenden Zur regulären Beendigung eines Programms dient der Button mit der Aufschrift Ende. Möchten Sie ein Programm während des Verlaufs abbrechen, können Sie auch den End-Button in der Symbolleiste (rotes Quadrat) betätigen. Fehler Tritt während der Ausführung eines Programms ein Fehler auf, wird das angezeigt, und das Codefenster zeigt die entsprechende Ereignisprozedur sowie die fehlerhafte Zeile an. Beenden Sie das Programm, korrigieren Sie den Code und starten Sie das Programm wieder. Programm testen Es wird empfohlen, das Programm bereits während der Entwicklung mehrmals durch Aufruf zu testen und nicht erst, wenn das Programm vollständig erstellt worden ist. Geeignete Zeitpunkte sind z. B. 왘 nach dem Einfügen der Steuerelemente und dem Zuweisen der Eigenschaften, die sie zu Programmbeginn haben sollen, 왘 nach dem Erstellen jeder Ereignisprozedur. Visual-Basic-Entwicklungsumgebung wählen Sie zunächst das gewünschte Projektverzeichnis aus und anschließend die gleichnamige Datei mit der Endung .sln. 1 Alle Beispielprojekte finden Sie auf www.rheinwerk-verlag.de/3813 unter »Materialien zum Buch« zum Download. Sie können diese Projekte auf Ihre Festplatte kopieren. Sollte eines der Projekte einmal nicht gestartet werden können, dann sollten Sie es neu über den Menüpunkt Erstellen • Projektmappe neu erstellen erstellen. 1.4.11 Übung Erstellen Sie ein Windows-Programm mit einem Formular, das zwei Buttons und ein Label beinhaltet, siehe Abbildung 1.14. Bei Betätigung des ersten Buttons erscheint im Label Ihr Name. Bei Betätigung des zweiten Buttons wird das Programm beendet. Namensvorschläge: Projektname ÜName, Buttons cmdMyName und cmdEnde, Label lblMyName. Übung ÜName 1.4.9 Ausführbares Programm .exe-Datei Nach erfolgreichem Test des Programms könnten Sie auch die ausführbare Datei (.exe-Datei) 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 Eigene Dokumente\Visual Studio 2015\Projects\ MeinErstes\MeinErstes\bin\Debug. Sie können das Programm also im Windows-Explorer direkt über Doppelklick starten. Die Weitergabe eines eigenen Windows-Programms auf einen anderen PC ist etwas aufwendiger. Der Vorgang wird im Anhang beschrieben. 1.4.10 Projekt schließen, Projekt öffnen Projekt schließen Sie können ein Projekt über den Menüpunkt Datei • Projektmappe schließen schließen. Falls Sie Veränderungen vorgenommen haben, werden Sie gefragt, ob Sie diese Änderungen speichern möchten. Möchten 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. Projekt öffnen 30 Zum Öffnen eines vorhandenen Projekts wählen Sie den Menüpunkt Datei • Projekt öffnen. Im darauffolgenden Dialogfeld Projekt öffnen Abbildung 1.14 Übung ÜName 1.4.12 Regeln für Zeilenumbrüche Visual Basic ermöglicht Zeilenumbrüche an bestimmten Stellen einer Anweisung auf einfache Art und Weise. Das erhöht die Lesbarkeit des Programmcodes. Einige Regeln wurden bereits im ersten Programm angewandt. Hier noch einmal die Prozedur cmdHallo_Click(): Zeilenumbruch Private Sub cmdHallo_Click(sender As Object, e As EventArgs) Handles cmdHallo.Click lblAnzeige.Text = "Hallo" End Sub Listing 1.5 Projekt »MeinErstes«, Ausschnitt Ein Zeilenumbruch ist möglich: Regeln 왘 nach einer öffnenden Klammer, siehe erste Prozedurzeile 왘 vor einer schließenden Klammer, siehe dritte Prozedurzeile 왘 nach einem Komma, siehe zweite Prozedurzeile 31 1 1.5 Einführung Außerdem wäre ein Zeilenumbruch z. B. auch möglich: 왘 nach den meisten Operatoren, also auch nach dem Zuweisungsoperator (=) hinter lblAnzeige.Text, siehe Abschnitt 2.2.5 왘 nach einem Punkt hinter einem Objektnamen, also auch nach dem Punkt hinter dem Objektnamen lblAnzeige Auf keinen Fall dürfen Zeilenumbrüche innerhalb einer Zeichenkette durchgeführt werden. Weitere Möglichkeiten für Zeilenumbrüche werden jeweils an der passenden Stelle erläutert. Unterstrich Falls Sie das Zeichen _ (Unterstrich) am Ende einer Zeile notieren, dann kann anschließend in jedem Fall ein Zeilenumbruch durchgeführt werden, unabhängig von den oben genannten Regeln. 1.5 Arbeiten mit Steuerelementen 1.5.1 Steuerelemente formatieren Hilfslinien Zur besseren Anordnung der Steuerelemente auf dem Formular können Sie sie mithilfe der Maus nach Augenmaß verschieben. Dabei erscheinen automatisch Hilfslinien, falls das aktuelle Element horizontal oder vertikal parallel zu einem anderen Element steht. Mehrere Steuerelemente markieren 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.15. Arbeiten mit Steuerelementen 왘 durch Mehrfachauswahl, indem ab dem zweiten auszuwählenden Steuerelement die (ª)-Taste (wie für Großbuchstaben) oder die (Strg)Taste gedrückt wird. Über das Menü Format haben Sie anschließend folgende Möglichkeiten zur Anpassung der Steuerelemente: 1 Menü »Format« 왘 Die ausgewählten Steuerelemente können horizontal oder vertikal zueinander ausgerichtet werden (Menü Format • Ausrichten). 왘 Die horizontalen und/oder vertikalen Dimensionen der ausgewählten Steuerelemente können angeglichen werden (Menü Format • Größe angleichen). 왘 Die horizontalen und vertikalen Abstände zwischen den ausgewählten Steuerelementen können angeglichen, vergrößert, verkleinert oder entfernt werden (Menü Format • Horizontaler Abstand/Vertikaler Abstand). Einheitliche Abstände 왘 Die Steuerelemente können horizontal oder vertikal innerhalb des Formulars zentriert werden (Menü Format • Auf Formular zentrieren). 왘 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.16 zeigt ein Formular mit drei Buttons, die alle links ausgerichtet sind und im gleichen vertikalen Abstand voneinander stehen. Abbildung 1.15 Mehrere markierte Elemente Das geschieht entweder Abbildung 1.16 Nach der Formatierung 왘 durch Umrahmung der Elemente mit einem Rechteck, nachdem Sie zuvor das Steuerelement (Maus-)Zeiger ausgewählt haben, oder 32 33 1 1.5 Einführung Arbeiten mit Steuerelementen Übung 1 Laden Sie das Projekt MeinErstes aus dem vorherigen Abschnitt, markieren Sie darin mehrere Steuerelemente und testen Sie die einzelnen Möglichkeiten des Format-Menüs. 1.5.2 Steuerelemente kopieren Steuerelemente kopieren Zur schnelleren Erzeugung eines Projekts können vorhandene Steuerelemente einschließlich aller ihrer Eigenschaften kopiert werden. Markieren Sie hierzu die gewünschten Steuerelemente und kopieren Sie sie entweder 왘 über das Menü Bearbeiten • Kopieren und das Menü Bearbeiten • Einfügen oder 왘 mit den Tasten (Strg) + (C) und (Strg)+ (V). Anschließend sollten die neu erzeugten Steuerelemente direkt umbenannt und an der gewünschten Stelle angeordnet werden. Übung Laden Sie das Projekt MeinErstes aus Abschnitt 1.4 und kopieren Sie einzelne Steuerelemente. Kontrollieren Sie anschließend die Liste der vorhandenen Steuerelemente im Eigenschaften-Fenster auf 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 Größe und Position. X und Y geben die Koordinaten der oberen linken Ecke des Steuerelements an, gemessen von der oberen linken Ecke des umgebenden Elements (meist das Formular). Alle Werte werden in Pixeln gemessen. Alle diese Eigenschaften können sowohl während der Entwicklungszeit als auch während der Laufzeit eines Projekts verändert werden. Zur Änderung während der Entwicklungszeit können Sie die Eigenschaft wie gewohnt im Eigenschaften-Fenster eingeben. Als Beispiel für Änderungen während der Laufzeit soll das folgende Programm (Projekt Steuerelemente) dienen, siehe Abbildung 1.17. 34 Abbildung 1.17 Position und Größe bestimmen Der Programmcode: Public Class Form1 Private Sub cmdPositionRel_Click(...) Handles ... cmdTest.Location = New Point( cmdTest.Location.X + 20, cmdTest.Location.Y) End Sub Private Sub cmdPositionAbs_Click(...) Handles ... cmdTest.Location = New Point(100, 200) End Sub Private Sub cmdGrößeRel_Click(...) Handles ... cmdTest.Size = New Size( cmdTest.Size.Width + 20, cmdTest.Size.Height) End Sub Private Sub cmdGrößeAbs_Click(...) Handles ... cmdTest.Size = New Size(50, 100) End Sub End Class Listing 1.6 Projekt »Steuerelemente« Zur Erläuterung: 왘 Der Kopf der einzelnen Prozeduren wurde 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 Prozedurkopfs ankommt. 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. 35 1 1.5 Einführung 왘 Die Position eines Elements kann relativ zur aktuellen Position oder auf absolute Werte eingestellt werden. Das Gleiche gilt für die Größe eines Elements. 왘 Bei beiden Angaben handelt es sich um Wertepaare (X/Y bzw. Breite/Höhe). New Point 왘 Zur Einstellung der Position dient die Struktur Point. Ein Objekt dieser Struktur liefert ein Wertepaar. In diesem Programm wird mit New jeweils ein neues Objekt der Struktur Point erzeugt, um das Wertepaar bereitzustellen. X, Y 왘 Bei Betätigung des Buttons Position Abs wird die Position des fünften Buttons auf die Werte X=100 und Y=200 gestellt, gemessen von der linken oberen Ecke des Formulars. 왘 Bei Betätigung des Buttons Position Rel wird die Position des fünften Buttons auf die Werte X = cmdTest.Location.X + 20 und Y = cmdTest.Location.Y gestellt. Bei X wird also der alte Wert der Komponente X um 20 erhöht, das Element bewegt sich nach rechts. Bei Y wird der alte Wert der Komponente Y nicht verändert, das Element bewegt sich nicht nach oben oder unten. Width, Height 왘 Zur Einstellung der Größe dient die Struktur Size. 왘 Bei Betätigung des Buttons Größe Abs wird die Größe des fünften Buttons auf die Werte Width = 50 und Height = 100 gestellt. 왘 Bei Betätigung des Buttons Größe Rel wird die Größe des fünften Buttons auf die Werte Width = cmdTest.Size.Width + 20 und Height = cmdTest.Size.Height gestellt. Bei Width wird also der alte Wert der Komponente Width um 20 erhöht, das Element wird breiter. Bei Height wird der alte Wert der Komponente Height nicht modifiziert, das Element verändert seine Höhe nicht. Nach einigen Klicks sieht das Formular aus wie in Abbildung 1.18. Arbeiten mit Steuerelementen 1.5.4 Vergabe und Verwendung von Namen 1 Beachten Sie in allen Programmen, dass jedes Steuerelement seinen eigenen, eindeutigen Namen hat und immer mit diesem Namen angesprochen werden muss. Es passiert erfahrungsgemäß besonders am Anfang häufig, dass ein Programm nicht zum gewünschten Erfolg führt, weil ein nicht vorhandener Name verwendet wird. In diesem Zusammenhang weise ich noch einmal auf die Namenskonventionen hin: 왘 Buttons sollten Namen wie z. B. cmdEnde, cmdAnzeigen, cmdBerechnen usw. haben. 왘 Labels sollten Namen wie z. B. lblAnzeige, lblName, lblUhrzeit, 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 automatisch korrigiert. Daran können Sie schnell erkennen, ob Sie tatsächlich ein vorhandenes Steuerelement verwendet haben. 1.5.5 Verknüpfung von Texten, mehrzeilige Texte Es lassen sich mehrere Texte in einer Ausgabe mithilfe des Zeichens & miteinander verknüpfen. Falls Sie eine mehrzeilige Ausgabe wünschen, müssen Sie zusätzlich einen Zeilenvorschub mithilfe der integrierten VisualBasic-Konstante vbCrLf eingeben. & und vbCrLf Nachfolgend wird das Projekt Steuerelemente 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: Public Class Form1 [...] Private Sub cmdAnzeige_Click(...) Handles ... lblAnzeige.Text = "Position: X: " & cmdTest.Location.X & ", Y: " & cmdTest.Location.Y & vbCrLf & "Größe: Breite: " & cmdTest.Size.Width & ", Höhe: " & cmdTest.Size.Height End Sub End Class Abbildung 1.18 Veränderung von Eigenschaften zur Laufzeit Listing 1.7 Projekt »Steuerelemente«, mit Anzeige 36 37 1 1.5 Einführung Nach einigen Klicks und der Betätigung des Buttons Anzeige sieht das Formular aus wie in Abbildung 1.19. Arbeiten mit Steuerelementen Das Formular sieht nach der Änderung der Eigenschaft Farbe aus wie in Abbildung 1.20, wobei sich die Farbänderung bei der Schwarz-Weiß-Darstellung im gedruckten Buch leider nicht gut wiedergeben lässt. 1 Abbildung 1.19 Anzeige der Eigenschaften 1.5.6 Eigenschaft BackColor, Farben allgemein BackColor Abbildung 1.20 Nach Änderung der Eigenschaft »Farbe« Die Hintergrundfarbe eines Steuerelements wird mit der Eigenschaft BackColor festgelegt. Dabei können Sie die Farbe zur Entwicklungszeit leicht mithilfe einer Farbpalette oder aus Systemfarben auswählen. Color Hintergrundfarben und andere Farben können auch zur Laufzeit eingestellt werden, dabei verwenden Sie Farbwerte. Diese Farbwerte können Sie über die Struktur Color auswählen. Ein Beispiel, ebenfalls im Projekt Steuerelemente: Public Class Form1 [...] Private Sub cmdFarbe_Click(...) Handles ... BackColor = Color.Yellow lblAnzeige.BackColor = Color.FromArgb(192, 255, 0) End Sub End Class 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 ist es das Formular selbst. FromArgb() 38 왘 Außerdem bietet die Struktur die Methode FromArgb(). Sie lässt sich 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. 39 Kapitel 2 Grundlagen 2 In diesem Kapitel erlernen Sie auf anschauliche Weise die Sprachgrundlagen von Visual Basic 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 und häufig verwendeten Steuerelementen kennen. 2.1 Variablen und Datentypen Variablen dienen zur vorübergehenden Speicherung von Daten, die sich zur Laufzeit eines Programms ändern können. Eine Variable besitzt einen eindeutigen Namen, unter dem sie angesprochen werden kann. 2.1.1 Namen und Werte Für die Namen von Variablen gelten in Visual Basic die folgenden Regeln: Namensregeln 왘 Sie beginnen mit einem Buchstaben. 왘 Sie können nur aus Buchstaben, Zahlen und einigen wenigen Sonderzeichen (z. B. dem Unterstrich _ ) bestehen. 왘 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, sollte ihr vorher ein Wert zugewiesen werden. Dadurch werden Programme eindeutiger, lesbarer und fehlerfreier. 41 2 2.1 Grundlagen Auswahl des Datentyps 2.1.2 Deklarationen Einige weitere nützliche Datentypen sind: Neben dem Namen besitzt jede Variable einen Datentyp, der die Art der Information bestimmt, die gespeichert werden kann. Sie als Entwickler wählen den Datentyp danach aus, ob Sie Text, Zahlen ohne Nachkommastellen, Zahlen mit Nachkommastellen oder z. B. logische Werte speichern möchten. 왘 der Datentyp Boolean mit den Werten True oder False (wahr oder falsch) Außerdem müssen Sie 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. In Abschnitt 2.1.3 finden Sie eine Liste der Datentypen. Variablen sollten in Visual Basic 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 Visual Basic unterstützten Datentypen lassen sich in einige große Gruppen unterteilen: 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 Integer 왘 den Datentyp Integer 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 Single 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 42 Variablen und Datentypen 왘 der Datentyp Date mit Werten für Datumsangaben vom 1. Januar des Jahres 1 bis zum 31. Dezember 9999 2 Date 왘 der Datentyp Char für einzelne Zeichen 왘 der Datentyp String für Zeichenketten mit variabler Länge String Im folgenden Beispiel werden Variablen dieser Typen deklariert, mit Werten versehen und in einem Label angezeigt (Projekt Datentypen). Public Class Form1 Private Sub cmdAnzeige_Click(...) Handles ... ' Ganze Zahlen Dim By As Byte Dim Sh As Short Dim It As Integer Dim Lg As Long ' Zahlen mit Nachkommastellen Dim Sg As Single Dim Db As Double Dim Dm As Decimal ' Boolesche Variable, Datum, Zeichen, Zeichenkette Dim Bo As Boolean Dim Dt As Date Dim Ch As Char Dim St As String ' Ganze Zahlen By = 200 Sh = 30000 It = 2000000000 Lg = 3000000000 ' Zahlen mit Nachkommastellen Sg = 1 / 7 Db = 1 / 7 Dm = 1D / 7 43 2 2.1 Grundlagen ' Boolesche Variable, Datum, Zeichen, Zeichenkette Bo = True Dt = "18.02.2015" Ch = "a" St = "Zeichenkette" lblAnzeige.Text = "Byte: " & By & vbCrLf & "Short: " & Sh & vbCrLf & "Integer: " & It & vbCrLf & "Long: " & Lg & vbCrLf & vbCrLf & "Single: " & Sg & vbCrLf & "Double: " & Db & vbCrLf & "Decimal: " & Dm & vbCrLf & vbCrLf & "Boolean: " & Bo & vbCrLf & "Date: " & Dt & vbCrLf & "Char: " & Ch & vbCrLf & "String: " & St End Sub End Class Listing 2.1 Projekt »Datentypen« Das Programm hat nach Betätigung des Buttons die Ausgabe wie in Abbildung 2.1 dargestellt. Variablen und Datentypen 왘 Variablen können bereits bei der Deklaration einen Wert erhalten, zum Beispiel: Dim Sh As Short = 30000. 2 왘 Bei den Datentypen für ganze Zahlen führt die Zuweisung einer zu großen Zahl zu einer Fehlermeldung. 왘 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 erscheint dagegen ein Dezimalkomma. Die Zuweisung einer zu großen oder zu kleinen Zahl führt zur Anzeige von »Unendlich« bzw. zu einer ungenauen Speicherung. Genauigkeit 왘 Sehr große oder sehr kleine Zahlen lassen sich im Programmcode auch in der Exponentialschreibweise eingeben. Zwei Beispiele: 1.5e3 für 1500.0 oder 1.5e-3 für 0.0015. Beim Wechsel der Zeile werden diese Zahlen dann unmittelbar in Zahlen mit Nachkommastellen umgewandelt. Exponentialschreibweise 왘 Werte für Zeichen, Zeichenketten und Datumsvariablen müssen in doppelten Anführungszeichen angegeben werden. 왘 Die Datentypen Integer, Double, Boolean und String werden am häufigsten eingesetzt. Übung Schreiben Sie ein Programm, in dem Ihr Nachname, Vorname, Ihre Adresse, Ihr Geburtsdatum und Ihr Alter jeweils in Variablen eines geeigneten Datentyps gespeichert und anschließend wie in Abbildung 2.2 ausgegeben werden. Übung ÜDatentypen Abbildung 2.2 Übung ÜDatentypen Abbildung 2.1 Wichtige Datentypen Dim … As 44 Zur Erläuterung: 2.1.4 Gültigkeitsbereich 왘 Variablen werden mit Dim ... As ... deklariert. Mehrere Variablen desselben Datentyps können, durch Kommata getrennt, innerhalb einer Zeile deklariert werden (z. B. Dim x, y As Integer). Variablen, die innerhalb einer Prozedur vereinbart wurden, haben ihre Gültigkeit nur in der Prozedur. Außerhalb der Prozedur sind sowohl Name als auch Wert unbekannt. Solche Variablen bezeichnet man auch als lokale Lokal 45 2 2.1 Grundlagen Variablen. Sobald die Prozedur abgearbeitet wurde, steht der Wert auch nicht mehr zur Verfügung. Beim nächsten Aufruf derselben Prozedur werden diese Variablen neu deklariert und erhalten neue Werte. Static Anders verhält es sich mit statischen Variablen. Sie behalten ihren Wert, solange das Programm läuft. Ein wiederholter Aufruf derselben Prozedur kann auf den letzten gespeicherten Wert einer Variablen zugreifen. Eine statische Variable vereinbaren Sie z. B. wie folgt: Static Sx As Integer. Private, Dim Variablen, die außerhalb von Prozeduren vereinbart werden, sind innerhalb der gesamten Klasse gültig, hier also innerhalb der Klasse des Formulars. Ihr Wert kann in jeder Prozedur gesetzt oder abgerufen werden und bleibt erhalten, solange das Formular im laufenden Programm existiert. Sie können die Variablen sowohl mit dem Schlüsselwort Private als auch mit dem Schlüsselwort Dim deklarieren. Sie sind außerhalb der Klasse nicht gültig. Weitere Einzelheiten zu klassenweit gültigen Variablen finden Sie in Kapitel 5. Public lblAnzeige.Text = "Sx: " & Sx & " x: " & x & " Mx: " & Mx End Sub 2 Private Sub cmdAnzeigen2_Click(...) Handles ... Dim Mx As Integer Mx = Mx + 1 lblAnzeige.Text = "Mx: " & Mx End Sub End Class Listing 2.2 Projekt »Gültigkeitsbereich« Zur Erläuterung: 왘 In der ersten Prozedur wird der Wert der statischen Variablen Sx und 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. Variablen, die mit dem Schlüsselwort Public vereinbart werden, sind öffentlich. Damit sind sie auch außerhalb der jeweiligen Klasse gültig, also z. B. in anderen Formularen. Mehr dazu ebenfalls in Kapitel 5. Gibt es in einem Programmabschnitt mehrere Variablen mit dem gleichen Namen, gelten folgende Regeln: 왘 Lokale Variablen mit gleichem Namen in der gleichen Prozedur sind nicht zulässig. Ausblenden Variablen und Datentypen 왘 Eine klassenweit gültige Variable wird innerhalb einer Prozedur von einer lokalen Variablen mit dem gleichen Namen ausgeblendet. Abbildung 2.3 Lokale, statische und klassenweit gültige Variable 왘 In der zweiten Prozedur 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. Im folgenden Beispiel werden Variablen unterschiedlicher Gültigkeitsbereiche deklariert, an verschiedenen Stellen verändert und ausgegeben (Projekt Gültigkeitsbereich). Public Class Form1 Private Mx As Integer Private Sub cmdAnzeigen1_Click(...) Handles ... Static Sx As Integer Dim x As Integer Sx = Sx + 1 Mx = Mx + 1 x = x + 1 46 Abbildung 2.4 Lokale Variable Hinweis: Die Variablen wurden vor ihrer ersten Benutzung nicht initialisiert, d. h., sie wurden nicht mit einem Startwert besetzt. In Visual Basic haben Zahlenvariablen zwar automatisch den Startwert 0, trotzdem sollten Sie die Initialisierung im Sinne eines sauberen Programmierstils im Normalfall selbst vornehmen. Startwert setzen 47 2 2.1 Grundlagen Übung Übung ÜGültigkeitsbereich 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 Prozedur zum Click-Ereignis des ersten Buttons gültig ist 왘 die Variable z, die nur lokal in der Prozedur zum Click-Ereignis des zweiten Buttons gültig ist In der ersten Prozedur werden x und y jeweils um 0,1 erhöht und angezeigt, siehe Abbildung 2.5. In der zweiten Prozedur werden x und z jeweils um 0,1 erhöht und angezeigt, siehe Abbildung 2.6. Variablen und Datentypen Zu den Konstanten zählen auch die integrierten Konstanten, wie z. B. vbCrLf. Auch sie repräsentieren Zahlen, die aber nicht so einprägsam sind wie die Namen der Konstanten. Integrierte Konstanten 2 Im folgenden Beispiel werden mehrere Konstanten vereinbart und genutzt (Projekt Konstanten). Public Class Form1 Private Const MaxWert = 75 Private Const Eintrag = "Picture" Private Sub cmdKonstanten_Click(...) Handles ... Const MaxWert = 55 Const MinWert = 5 lblAnzeige.Text = (MaxWert - MinWert) / 2 & vbCrLf & Eintrag End Sub End Class Listing 2.3 Projekt »Konstanten« Abbildung 2.5 Ausgabe der ersten Methode nach einigen Klicks Zur Erläuterung: 왘 Konstanten werden mithilfe des Schlüsselworts Const definiert. Const 왘 Die Konstanten MaxWert und Eintrag werden mit klassenweiter Gültigkeit festgelegt. Abbildung 2.6 Ausgabe der zweiten Methode nach weiteren Klicks 2.1.5 Konstanten Konstanten repräsentieren Werte Konstanten sind vordefinierte Werte, die während der Laufzeit nicht verändert werden können. Geben Sie Konstanten im Allgemeinen aussagekräftige Namen, dadurch sind sie leichter zu behalten 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 müssen Sie eine eventuelle Änderung einer Konstanten zur Entwurfszeit nur an einer Stelle vornehmen. Der Gültigkeitsbereich von Konstanten ist analog zum Gültigkeitsbereich von Variablen. 왘 Innerhalb der Prozedur werden die beiden lokalen Konstanten MaxWert und MinWert festgelegt. MaxWert blendet die klassenweit gültige Konstante gleichen Namens aus, wie es in unten stehender Abbildung 2.7 zu sehen ist. 왘 Außerdem kommt noch die integrierte Konstante vbCrLf zum Einsatz. Abbildung 2.7 Konstanten 48 49 2 2.2 Grundlagen Konstanten aufzählen 2.1.6 Enumerationen Zur Erläuterung: 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. 왘 Enumerationen werden mithilfe des Schlüsselworts Enum definiert. Innerhalb von Visual Basic gibt es 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. Operatoren Enum 2 왘 Es wird die Enumeration Zahl vom Datentyp Integer vereinbart. Da es sich um einen Typ handelt und nicht um eine Variable oder Konstante, muss sie außerhalb von Prozeduren vereinbart werden. Damit ist sie automatisch für die gesamte Klasse gültig. 왘 In der ersten Ereignisprozedur werden zwei Elemente der eigenen Enumeration Zahl verwendet. Die beiden Zahlen, die sie repräsentieren, werden miteinander multipliziert, siehe Abbildung 2.8. Ein Beispiel: Die Enumeration DialogResult ermöglicht es Ihnen als Programmierer, die zahlreichen möglichen 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 Class Form1 [...] Private Enum Zahl As Integer Eins = 1 Zwei = 2 Drei = 3 Vier = 4 End Enum [...] Private Sub cmdEnumeration1_Click(...) Handles ... lblAnzeige.Text = Zahl.Zwei * Zahl.Drei End Sub Private Sub cmdEnumeration2_Click(...) Handles ... lblAnzeige.Text = "Sonntag: " & FirstDayOfWeek.Sunday & ", Samstag: " & FirstDayOfWeek.Saturday End Sub End Class Listing 2.4 Projekt »Konstanten«, Teil 2 50 Abbildung 2.8 Erste Enumeration 왘 In der zweiten Ereignisprozedur werden zwei Elemente der vordefinierten Enumeration FirstDayOfWeek verwendet, siehe Abbildung 2.9. Sie können sie zur Ermittlung des Wochentags eines gegebenen Datums verwenden. Abbildung 2.9 Zweite Enumeration 2.2 Operatoren Zum Zusammensetzen von Ausdrücken nutzt Visual Basic, wie jede andere Programmiersprache auch, Operatoren. In diesem Buch wurden schon die Operatoren = für Zuweisungen und & für Verkettungen verwendet. Es gibt verschiedene Kategorien von Operatoren. Vorrangregeln (Prioritäten) sind für die Reihenfolge der Abarbeitung zuständig, falls mehrere Operatoren innerhalb eines Ausdrucks eingesetzt werden. Diese Vorrangregeln sind weiter unten in diesem Abschnitt angegeben. Falls Sie sich bei der Ver- Priorität 51 2 2.2 Grundlagen wendung dieser Regeln nicht sicher sind, empfiehlt es sich, durch eigene Klammersetzung die Reihenfolge explizit festzulegen. 2.2.1 Rechenoperatoren Rechenoperatoren Rechenoperatoren dienen zur Durchführung von Berechnungen, siehe Tabelle 2.1. Operator Beschreibung + Addition - Subtraktion oder Negation * Multiplikation / Division \ Ganzzahldivision ^ Potenzierung Mod Modulo Tabelle 2.1 Rechenoperatoren Ganzzahldivision Die Ganzzahldivision erfolgt in zwei Schritten. Im ersten Schritt werden Dividend und Divisor einzeln gerundet. Im zweiten Schritt werden die beiden verbliebenen Zahlen geteilt, anschließend werden die Ziffern nach dem Komma abgeschnitten. Tabelle 2.2 zeigt einige Beispiele. 52 Ergebnis Erklärung 19 Mod 4 3 19 durch 4 ist 4 Rest 3 19.5 Mod 4.2 2.7 19,5 durch 4,2 ist 4 Rest 2,7 Zur Potenzierung einer Zahl dient der Operator ^ (hoch), Beispiele siehe Tabelle 2.4. Ausdruck Ergebnis 2^5 32 3^2^3 729 2 ^ 5.4 42.2242531447326 (-2) ^ 5 -32 Tabelle 2.4 Potenzierung 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, die zusammen in einem Ausdruck auftreten. Multiplikation und Division werden vor Addition und Subtraktion ausgeführt. Mit Klammern können Sie diese Rangfolge außer Kraft setzen, damit bestimmte Teilausdrücke vor anderen Teilausdrücken ausgewertet werden. In Klammern gesetzte Operationen haben grundsätzlich Vorrang. Innerhalb der Klammern gilt jedoch die normale Rangfolge der Operatoren. Klammern Alle Berechnungen innerhalb dieses Abschnitts können Sie auch mithilfe des Codes im Projekt Rechenoperatoren nachvollziehen. Projekt Ergebnis 19 / 4 4.75 19 \ 4 4 19 \ 4.6 3 Übung 19.5 \ 4.2 5 Berechnen Sie die beiden folgenden Ausdrücke, speichern Sie das Ergebnis in einer Variablen eines geeigneten Datentyps und zeigen Sie es an: Der Modulo-Operator Mod berechnet den Rest einer Division. Zwei Beispiele sehen Sie in Tabelle 2.3. 2 Tabelle 2.3 Modulo-Operator Ausdruck Tabelle 2.2 Ganzzahldivision Modulo Ausdruck Operatoren Übung ÜRechenoperatoren 왘 1. Ausdruck: 3 * –2.5 + 4 * 2 왘 2. Ausdruck: 3 * (-2.5 + 4) * 2 53 2 2.2 Grundlagen 2.2.2 Vergleichsoperatoren Vergleich Vergleichsoperatoren (siehe Tabelle 2.5) dienen dazu festzustellen, ob bestimmte Bedingungen zutreffen oder nicht. Das Ergebnis lässt sich u. a. zur Ablaufsteuerung von Programmen nutzen. Abschnitt 2.4 geht hierauf genauer ein. Ausdruck Ergebnis "aba" Like "a?a" True "asdlfigc" Like "a?d?f*c" True Operatoren 2 Tabelle 2.7 Mustervergleich (Forts.) Operator Beschreibung < kleiner als <= kleiner als oder gleich > größer als >= größer als oder gleich Ermitteln Sie das Ergebnis der beiden folgenden Ausdrücke, speichern Sie es in einer Variablen eines geeigneten Datentyps und zeigen Sie es an: = gleich 왘 1. Ausdruck: 12 – 3 >= 4 * 2.5 <> ungleich 왘 2. Ausdruck: "Maier" Like "M??er" Alle Vergleiche innerhalb dieses Abschnitts können Sie auch mithilfe des Codes im Projekt Vergleichsoperatoren nachvollziehen. Projekt Übung Übung ÜVergleichsoperatoren Tabelle 2.5 Vergleichsoperatoren 2.2.3 Logische Operatoren Einige Beispiele sehen Sie in Tabelle 2.6. Like Ausdruck Ergebnis 5>3 True 3 = 3.2 False 5 + 3 * 2 >= 12 False Logische Operatoren dienen dazu, mehrere Bedingungen zusammenzufassen. Das Ergebnis lässt sich ebenfalls u. a. zur Ablaufsteuerung von Programmen nutzen (siehe hierzu auch Abschnitt 2.4). Die logischen Operatoren sehen Sie in Tabelle 2.8. Operator Beschreibung Das Ergebnis ist True, wenn ... Not Nicht ... der Ausdruck False ist. Tabelle 2.6 Nutzung von Vergleichsoperatoren And Und ... beide Ausdrücke True sind. Darüber hinaus gibt es noch den Operator Like, der zum Mustervergleich dient. Dabei können Sie u. a. die Platzhalter * (eines oder mehrere Zeichen) und ? (genau ein Zeichen) einsetzen. Tabelle 2.7 zeigt einige Beispiele. Or Inklusives Oder ... mindestens ein Ausdruck True ist. Xor Exklusives Oder ... genau ein Ausdruck True ist. Logik Tabelle 2.8 Logische Operatoren Ausdruck Ergebnis "abxba" Like "a*a" True "abxba" Like "a?a" False Es seien die Variablen A = 1, B = 3 und C = 5 gesetzt. Die Ausdrücke in der ersten Spalte von Tabelle 2.9 ergeben dann jeweils die Ergebnisse in der zweiten Spalte. Tabelle 2.7 Mustervergleich 54 55 2 2.2 Grundlagen Ausdruck Ergebnis Not (A < B) False (B > A) And (C > B) True (B < A) Or (C < B) False (B < A) Xor (C > B) True Operatoren Das Ergebnis ist in Abbildung 2.10 zu sehen. Ein weiteres Beispiel stand bereits in Abschnitt 1.5.5. 2 Abbildung 2.10 Verkettung Tabelle 2.9 Ausdrücke mit logischen Operatoren 2.2.5 Zuweisungsoperatoren Projekt Übung ÜLogische Operatoren Alle Berechnungen innerhalb dieses Abschnitts können Sie auch mithilfe des Codes im Projekt LogischeOperatoren nachvollziehen. Übung Ermitteln Sie das Ergebnis der beiden folgenden Ausdrücke, speichern Sie es in einer Variablen eines geeigneten Datentyps und zeigen Sie es an: 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. 2.2.4 Verkettungsoperator *= x *= 3 Der Wert von x wird auf das Dreifache erhöht. Der Operator & dient der Verkettung von Zeichenfolgen. Ist einer der Ausdrücke keine Zeichenfolge, sondern eine Zahl oder Datumsangabe, wird er in einen String verwandelt. Das Gesamtergebnis ist dann wiederum eine Zeichenfolge. Beispiel: /= x /= 3 Der Wert von x wird auf ein Drittel verringert. \= x \= 3 Der Wert von x wird auf ein Drittel verringert. Nachkommastellen werden abgeschnitten. ^= x ^= 3 Der Wert von x wird auf x hoch 3 erhöht. &= z &= "abc" Die Zeichenkette z wird um den Text abc verlängert. 왘 1. Ausdruck: 4 > 3 And –4 > –3 왘 2. Ausdruck: 4 > 3 Or –4 > –3 Umwandlung in String Der einfachste Zuweisungsoperator, das Gleichheitszeichen, wurde bereits genutzt. Es gibt zur Verkürzung von Anweisungen noch einige weitere Zuweisungsoperatoren, siehe Tabelle 2.10. Public Class Form1 Private Sub cmdAnzeige_Click(...) Handles ... Dim gesamt As String Dim s As Single Dim i As Integer Dim d As Date s = 4.6 i = -12 d = "18.07.2015" gesamt = "Hallo " & s & " " & i & " " & d lblAnzeige.Text = gesamt End Sub End Class Zeichen = Tabelle 2.10 Zuweisungsoperatoren 2.2.6 Rangfolge der Operatoren 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. Es gilt die Rangfolge in Tabelle 2.11. Priorität Listing 2.5 Projekt »Verkettungsoperator« 56 57 2 2.3 Grundlagen Operator Beschreibung Nr. Werte Bedingung ^ Exponentialoperator 3 z=10 w=100 z<>0 Or z>w Or w-z=90 - negatives Vorzeichen 4 z=10 w=100 z=11 And z>w Or w-z=90 *, / Multiplikation, Division 5 x=1.0 y=5.7 x>=.9 And y<=5.8 \ Ganzzahldivision 6 x=1.0 y=5.7 x>=.9 And Not(y<=5.8) Mod Modulo 7 n1=1 n2=17 n1>0 And n2>0 Or n1>n2 And n2<>17 +, - Addition, Subtraktion 8 n1=1 n2=17 n1>0 And (n2>0 Or n1>n2) And n2<>17 & Verkettung =, <>, <, >, <=, >=, Like Vergleichsoperatoren (Das Zeichen = steht für den Vergleich, nicht für die Zuweisung.) Not logisches Nicht And logisches Und Or logisches Oder Tabelle 2.11 Rangfolge der Operatoren Die Operatoren, die in der Tabelle weiter oben stehen, haben die höchste Priorität. Klammern Wie schon bei den Rechenoperatoren erwähnt: Mit Klammern können Sie diese Rangfolge außer Kraft setzen, 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. Übung ÜOperatoren Übung Sind die Bedingungen in Tabelle 2.12 wahr oder falsch? Lösen Sie die Aufgabe möglichst ohne PC. Nr. Werte Bedingung 1 a=5 b=10 a>0 And b<>10 2 a=5 b=10 a>0 Or b<>10 Einfache Steuerelemente 2 Tabelle 2.12 Übung ÜOperatoren (Forts.) 2.3 Einfache Steuerelemente Windows-Programmierung mit Visual Basic besteht aus zwei Teilen: der Arbeit mit visuellen Steuerelementen und der Programmierung mit der Sprache. Beides soll in diesem Buch parallel vermittelt werden, damit die eher theoretischen Abschnitte zur Programmiersprache durch eine anschauliche Praxis vertieft werden können. Daher wird in diesem Abschnitt mit vier weiteren Steuerelementen gearbeitet, bevor im nächsten Abschnitt die Verzweigungen zur Programmsteuerung vorgestellt werden: Panel, Zeitgeber, Textfeld und Zahlenauswahlfeld. 2.3.1 Panel Ein Panel dient normalerweise als Container für andere Steuerelemente. In diesem Abschnitt wird es zur visuellen Darstellung eines Rechtecks und für eine kleine Animation genutzt. Container Die Eigenschaften BackColor (Hintergrundfarbe), Location (Position) und Size (Größe) sind schon von anderen Steuerelementen 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. Tabelle 2.12 Übung ÜOperatoren 58 59 2 2.3 Grundlagen In Abbildung 2.11 und Abbildung 2.12 ist das Panel im Startzustand bzw. nach einigen Klicks zu sehen. Einfache Steuerelemente Private Sub cmdLinks_Click(...) Handles ... panMove.Location = New Point(panMove.Location.X - 10, panMove.Location.Y) End Sub 2 Private Sub cmdRechts_Click(...) Handles ... panMove.Location = New Point(panMove.Location.X + 10, panMove.Location.Y) End Sub End Class Listing 2.6 Projekt »Panel« 2.3.2 Zeitgeber Abbildung 2.11 Panel, Startzustand Abbildung 2.12 Panel, nach Verschiebung Der Programmcode: Public Class Form1 Private Sub cmdOben_Click(...) Handles ... panMove.Location = New Point(panMove.Location.X, panMove.Location.Y - 10) End Sub Ein Zeitgeber (engl.: Timer) erzeugt in festgelegten Abständen Zeittakte. Diese Zeittakte sind Ereignisse, die Sie als Entwickler mit Aktionen verbinden können. Das zugehörige Ereignis heißt Tick. Ein Zeitgeber kann wie jedes andere Steuerelement zum Formular hinzugefügt werden. Da es sich aber um ein nicht sichtbares Steuerelement handelt, wird er unterhalb des Formulars angezeigt. Auch zur Laufzeit ist er nicht sichtbar. Timer Seine wichtigste Eigenschaft ist das Zeitintervall, in dem das Ereignis auftreten soll. Dieses Zeitintervall wird in Millisekunden angegeben. Intervall Die Eigenschaft Enabled dient der Aktivierung bzw. Deaktivierung des Zeitgebers. Sie kann zur Entwicklungszeit oder zur Laufzeit auf True oder False gestellt werden. Enabled Im nachfolgenden Programm im Projekt Zeitgeber erscheint zunächst ein Formular mit zwei Buttons. Betätigt man den Start-Button, erscheint ein x in einem Bezeichnungsfeld. Alle 0,5 Sekunden erscheint automatisch ein weiteres x, siehe Abbildung 2.13. Das wird durch den Timer gesteuert, bei dem der Wert für die Eigenschaft Interval auf 500 gesetzt wurde. Nach Betätigung des Stop-Buttons kommt kein weiteres x hinzu. Private Sub cmdUnten_Click(...) Handles ... panMove.Location = New Point(panMove.Location.X, panMove.Location.Y + 10) End Sub Abbildung 2.13 Nach einigen Sekunden 60 61 2 2.3 Grundlagen Einfache Steuerelemente Der zugehörige Code: Public Class Form1 Private Sub timAnzeige_Tick(...) Handles timAnzeige.Tick lblAnzeige.Text &= "x" End Sub 2 Private Sub cmdStart_Click(...) Handles ... timAnzeige.Enabled = True End Sub Private Sub cmdStop_Click(...) Handles ... timAnzeige.Enabled = False End Sub End Class Listing 2.7 Projekt »Zeitgeber« Übung Übung ÜPanelZeitgeber 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. 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 Visual Basic mit wenigen Programmzeilen. Übung ÜKran 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: 왘 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 Höhe ausfahren bzw. einfahren Abbildung 2.14 Startzustand Sobald der Start-Button betätigt wird, sollen diese vier Panels sich diagonal in ca. 5–10 Sekunden zu den Ecken des Formulars bewegen, jedes Panel in eine andere Ecke, siehe Abbildung 2.15. 62 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), manche nur aus Ortsveränderungen (Location), manche aus beidem. In Abbildung 2.16 und Abbildung 2.17 sehen Sie den Kran im Startzustand bzw. nach einigen Klicks. Es können natürlich immer noch widersprüchliche Bewegungen auftreten. Mit weiter zunehmendem Programmierwissen können Sie diesen Problemen später noch abhelfen. 63 2 2.3 Grundlagen Einfache Steuerelemente 왘 MaxLength: Mit dieser Eigenschaft lässt sich die Anzahl der Zeichen des Textfelds beschränken. Ist keine Beschränkung vorgesehen, kann das Textfeld 32K Zeichen aufnehmen. 왘 PasswordChar: Falls für diese Eigenschaft im Entwurfsmodus ein Platzhalterzeichen eingegeben wurde, wird während der Laufzeit für jedes eingegebene Zeichen nur dieser Platzhalter angezeigt. Diese Eigenschaft wird vor allem bei Passwort-Abfragen verwendet. 2 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. Abbildung 2.16 Startzustand 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.18 Eingabe in Textfeld Der Code lautet wie folgt: Abbildung 2.17 Nach einigen Aktionen 2.3.3 Textfelder Eingabefeld 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 gekennzeichnet: 왘 MultiLine: Steht MultiLine auf True, kann bei der Eingabe und bei der Anzeige mit mehreren Textzeilen gearbeitet werden. 왘 ScrollBars: Ein Textfeld lässt sich mit vertikalen und/oder horizontalen Bildlaufleisten zur Eingabe und Anzeige längerer Texte versehen. 64 Public Class Form1 Private Sub cmdAusgabe_Click(...) Handles ... lblAusgabe.Text = "Sie haben '" & txtEingabe.Text & "' eingegeben" End Sub End Class Listing 2.8 Projekt »Textfelder« Zur Erläuterung: 왘 Die Eigenschaft Text des Textfelds speichert die Eingabe. Die Eigenschaft wird in einen längeren Ausgabetext eingebettet. 65 2 2.3 Grundlagen 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 Sub cmdRechnen1_Click(...) Handles ... lblAusgabe.Text = txtEingabe.Text * 2 End Sub Listing 2.9 Projekt »Textfelder«, Zahleneingabe Zur Erläuterung: 왘 Wenn eine Zeichenkette eingegeben wird, die eine Zahl darstellt, dann wird sie implizit, d. h. automatisch, in eine Zahl umgewandelt, mit der dann gerechnet werden kann. 왘 Stellt die eingegebene Zeichenkette keine Zahl dar, kommt es zu einem Laufzeitfehler. Diese Situation sollten Sie natürlich vermeiden: – Sie können vorher überprüfen, ob es sich bei der Zeichenkette um eine gültige Zahl handelt und entsprechend reagieren. Das wird möglich, sobald Sie Verzweigungen zur Programmsteuerung beherrschen. Ausnahmebehandlung Einfache Steuerelemente 2 Abbildung 2.20 Anzeige des Fehlers Es erscheint ein zusätzliches Dialogfeld. Darin können Sie den Button Weiter betätigen, dann wird das Programm beendet. Mit dem Button Unterbrechen wird das Programm unterbrochen. Bei einem unterbrochenen Programm können Sie die aktuellen Werte von Variablen kontrollieren, indem Sie die Maus über dieser Variablen platzieren. Anschließend muss das Programm über den Menüpunkt Debuggen • Debugging beenden beendet werden, bevor es sich neu starten lässt. Die Eingabe einer Zahl, bei der ein Punkt statt einem Komma zur Abtrennung von Nachkommastellen eingegeben wird, führt zu einem ganz anderen Rechenergebnis, siehe Abbildung 2.21. Der Punkt wird ignoriert, die Zahl wird als 352 angesehen und führt so zu dem Ergebnis 704. – Allgemein können Sie Programme so schreiben, dass ein Programmabbruch abgefangen werden kann. Das wird möglich, sobald Sie die Ausnahmebehandlung (siehe hierzu Kapitel 3) beherrschen. Einige Beispiele: Abbildung 2.19 zeigt die Eingabe einer Zahl mit Nachkommastellen. Abbildung 2.21 Punkt vor den Nachkommastellen Sie sollten dafür sorgen, 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 (= Konvertierung) in andere Datentypen. Abbildung 2.19 Eingabe einer Zahl mit Nachkommastellen Debugging beenden 66 Die Eingabe einer Zeichenkette, z. B. abc, führt zur Anzeige einer nicht behandelten Ausnahme. Die Zeile, in der der Fehler auftritt, wird im Code markiert, damit der Fehler beseitigt werden kann (siehe Abbildung 2.20). ToDouble() Private Sub cmdRechnen2_Click(...) Handles ... lblAusgabe.Text = Convert.ToDouble(txtEingabe.Text) * 2 End Sub Listing 2.10 Projekt »Textfelder«, Methode ToDouble() 67 2 2.4 Grundlagen Verzweigungen Zur Erläuterung: 왘 Der eingegebene Text wird mit der Methode ToDouble() in eine Zahl umgewandelt. 왘 Allerdings ist nach wie vor ein Programmabbruch bei falscher Eingabe möglich. 2 Abbildung 2.22 Zahlenauswahlfeld Die Eigenschaften werden zur Entwicklungszeit wie folgt eingestellt: 2.3.4 Zahlenauswahlfeld NumericUpDown Value Das Steuerelement Zahlenauswahlfeld (NumericUpDown) bietet eine andere Möglichkeit, 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 eingegeben werden, wie bei einem Textfeld. 왘 Maximum, Minimum: Werte -5 und +5 왘 Increment: Wert 0,1 왘 DecimalPlaces: Wert 1, zur Anzeige einer einzelnen Nachkommastelle Wichtige Eigenschaften des Steuerelements sind die folgenden: Der Code lautet: 왘 Value bezeichnet zur Entwicklungszeit den Startwert und zur Laufzeit den vom Benutzer aktuell eingestellten Wert. Public Class Form1 Private Sub numEingabe_ValueChanged(...) _ Handles numEingabe.ValueChanged lblAusgabe.Text = numEingabe.Value End Sub End Class 왘 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 stellt die Schrittweite ein, 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. ValueChanged 왘 Value: Wert 2, die Anwendung startet also bei dem Wert 2,0 für das Zahlenauswahlfeld 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. Im nachfolgenden Programm im Projekt ZahlenAufAb werden alle diese Eigenschaften und das genannte Ereignis genutzt. Der Benutzer kann 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. Listing 2.11 Projekt »ZahlenAufAb« 2.4 Verzweigungen Der Programmcode wurde bisher rein sequenziell abgearbeitet, d. h. eine Anweisung nach der anderen. Kontrollstrukturen ermöglichen eine Steuerung dieser Reihenfolge. Die Kontrollstrukturen unterteilen sich in Verzweigungen und Schleifen. Verzweigungen gestatten dem Programm, in verschiedene alternative Anweisungsblöcke zu verzweigen. Es gibt die beiden Verzweigungsstrukturen If ... Then ... Else und Select Case ... Diese Auswahlmöglichkeiten übergeben u. a. aufgrund von Bedingungen die Programmausführung an einen bestimmten Anweisungsblock. Bedingungen erstellen Sie mithilfe der bereits vorgestellten Vergleichsoperatoren. Seltener genutzt werden außerdem noch die Auswahlfunktionen IIf() und Choose(). 68 69 2 2.4 Grundlagen 2.4.1 Einzeiliges If ... Then ... Else Das einzeilige If ... Then ... Else hat folgenden Aufbau: If Bedingung Then Anweisungen1 [ Else Anweisungen2 ] If ... Then ... Else Die Bedingung wird ausgewertet, sie ist entweder wahr oder falsch (True oder False). Ist das Ergebnis der Auswertung True, wird der Then-Teil mit den Anweisungen1 ausgeführt. Ist das Ergebnis der Auswertung False und gibt es einen Else-Teil, wird der Else-Teil mit den Anweisungen2 ausgeführt. Dabei kann es sich sowohl um eine einzelne Anweisung als auch um mehrere Anweisungen handeln, die dann durch einen Doppelpunkt (:) voneinander getrennt sind. In jedem Fall muss der gesamte Block in einer Zeile untergebracht werden. If-Strukturen können auch ineinander verschachtelt werden. Unterstrich Im nachfolgenden Programm im Projekt EinzeiligesIf wird das einzeilige If in vier verschiedenen Beispielen genutzt. Beachten Sie dabei, dass die einzelnen Anweisungen zu lang für den Druck in diesem Buch sind und daher auf mehrere Zeilen verteilt werden, teilweise auch mithilfe des Zeichens _ (Unterstrich). Es handelt sich aber in jedem Fall um einzeilige If-Verzweigungen. Public Class Form1 Private Sub cmdAnzeige1_Click(...) Handles ... Dim x As Integer x = -1 If x < 0 Then lblAnz1.Text = "Negativ" End Sub Private Sub cmdAnzeige2_Click(...) Handles ... Dim x As Integer x = -1 If x > 0 Then lblAnz2.Text = "Positiv" _ Else lblAnz2.Text = "Negativ oder Null" End Sub Private Sub cmdAnzeige3_Click(...) Handles ... Dim x As Integer x = -1 If x > 0 Then lblAnz3.Text = "Positiv" Else If x = 0 Then _ 70 Verzweigungen lblAnz3.Text = "Null" Else lblAnz3.Text = "Negativ" End Sub 2 Private Sub cmdAnzeige4_Click(...) Handles ... Dim x As Integer x = -1 If x > 0 Then x = x + 1 : lblAnz4.Text = "Positiv, x = " & x Else x = x - 1 : lblAnz4.Text = "Negativ oder Null, x = " & x End Sub End Class Listing 2.12 Projekt »EinzeiligesIf« Zur Erläuterung: 왘 Die Integer-Variable x erhält jeweils den Wert -1. Für die Tests in den einzelnen Beispielen sollten Sie diesen Wert natürlich auch einmal ändern. 왘 Beim ersten Beispiel wird nur etwas angezeigt, falls die Variable x negativ ist. 왘 Beim zweiten Beispiel wird in jedem Fall etwas angezeigt. 왘 Beim dritten Beispiel wird für den Fall, dass die Variable x nicht positiv ist, eine weitere Verzweigung durchlaufen. Man nennt diese Verzweigung auch eine innere Verzweigung, im Gegensatz zu einer äußeren Verzweigung. Ist die Variable x = 0, wird wegen der inneren Verzweigung Null angezeigt, anderenfalls wird Negativ angezeigt. 왘 Beim vierten Beispiel werden für beide möglichen Fälle jeweils zwei Anweisungen durchlaufen, die durch einen : (Doppelpunkt) voneinander getrennt sind. In Abbildung 2.23 sehen Sie die Ausgabe nach Betätigung aller vier Buttons. Abbildung 2.23 Einzeiliges If 71 2 2.4 Grundlagen 2.4.2 If...Then...Else-Block Mehrzeilig, Block Für einfache Entscheidungen und einzelne Anweisungen eignet sich das einzeilige If. Sobald mehrere Anweisungen auszuführen sind, wird der Programmcode schnell unübersichtlich. Für diese Zwecke ist ein If...Then...Else-Block wesentlich besser geeignet. Der Block hat folgenden Aufbau: If Bedingung1 Then Anweisungen1 [ ElseIf Bedingung2 Anweisungen2 ] ... [ Else AnweisungenX ] End If Das Programm verzweigt zu den Anweisungen hinter der ersten zutreffenden Bedingung. Falls keine Bedingung zutrifft, werden die Anweisungen hinter dem Else ausgeführt, sofern es diesen Else-Zweig gibt. Anderenfalls wird keine Anweisung durchgeführt. Ein If...Then...Else-Block endet immer mit einem End If. Das nachfolgende Programm im Projekt BlockIf prüft vier verschiedene Fälle. Trifft keiner dieser Fälle zu, wird der Else-Zweig ausgeführt: Public Class Form1 Private Sub cmdAnzeige_Click(...) Handles ... Dim x, y As Integer x = 0 y = 0 If x >= 0 And y >= 0 Then lblAnzeige.Text = "Beide größer oder gleich Null" ElseIf x >= 0 And y < 0 Then lblAnzeige.Text = "Nur X größer oder gleich Null" ElseIf x < 0 And y >= 0 Then lblAnzeige.Text = "Nur Y größer oder gleich Null" ElseIf x >= 0 Then lblAnzeige.Text = "Wird nie angezeigt" Else lblAnzeige.Text = "Beide kleiner Null" End If 72 Verzweigungen End Sub End Class 2 Listing 2.13 Projekt »BlockIf« In Abbildung 2.24 sehen Sie die Ausgabe nach Betätigung des Buttons. Abbildung 2.24 If...Then...Else-Block 2.4.3 Select Case Eine Verzweigung kann in bestimmten Fällen auch mit Select Case ... gebildet werden. Diese Struktur vereinfacht eine Mehrfachauswahl, wenn nur ein Wert untersucht werden muss, und ist wie folgt aufgebaut: Mehrfachauswahl Select Case Testausdruck [ Case Ausdrucksliste1 Anweisungen1 ] [ Case Ausdrucksliste2 Anweisungen2 ] ... [ Case Else AnweisungenX ] End Select Die Struktur Select Case ... verwendet nur einen Testausdruck, der am Beginn der Struktur ausgewertet wird. Sein Wert wird anschließend der Reihe nach mit den Werten der Ausdruckslisten verglichen. Eine Ausdrucksliste kann aus mehreren Ausdrücken oder einer Bereichsangabe mit dem Schlüsselwort To bestehen. Ein Ausdruck kann aus einem Wert oder einer Bedingung mit dem Schlüsselwort Is bestehen. To, Is Bei der ersten Übereinstimmung wird der zugehörige Anweisungsblock ausgeführt und dann wird mit der nächsten Anweisung hinter dem End Select fortgefahren. End Select Der optionale Anweisungsblock hinter dem Case Else wird ausgeführt, falls vorher keine Übereinstimmung gefunden wurde. Das nachfolgende Pro- Case Else 73 2 2.4 Grundlagen gramm im Projekt SelectCase prüft ebenfalls vier verschiedene Fälle. Trifft keiner dieser Fälle zu, wird der Case-Else-Zweig ausgeführt: Public Class Form1 Private Sub cmdAnzeige_Click(...) Handles ... Dim x As Integer x = 20 Select Case x Case 1, 3, 5, 7, 9 lblAnzeige.Text = "Ungerade, Einstellig" Case 2, 4, 6, 8 lblAnzeige.Text = "Gerade, Einstellig" Case Is < 1, Is > 20 lblAnzeige.Text = "Kleiner 1 oder größer 20" Case 10 To 15 lblAnzeige.Text = "Größer gleich 10 und" & " kleiner gleich 15" Case Else lblAnzeige.Text = "Größer 15 und kleiner 21" End Select End Sub End Class Liefert Wert Sowohl True-Ausdruck als auch False-Ausdruck müssen angegeben werden. Im nachfolgenden Programm im Projekt FunktionIIf wird das Maximum der beiden Zahlen x und y ermittelt und ausgegeben: Listing 2.15 Projekt »FunktionIIf« 2.4.5 Funktion Choose Die Funktion Choose() gibt den Wert aus einer Liste zurück, dessen Position dem Indexwert entspricht. Die Positionen in der Liste beginnen allerdings bei 1, nicht bei 0. Die Syntax lautet: Wert aus Liste Choose(Index, Ausdruck1, [Ausdruck2] ...) Im nachfolgenden Programm im Projekt FunktionChoose wird eine Währung aus einer Liste von Währungen ausgewählt und ausgegeben: In diesem Beispiel sind nur die Zahlen größer 15 und kleiner 21 in keiner Ausdrucksliste enthalten. Der entsprechende Text befindet sich also im Case-Else-Zweig, wie Sie in Abbildung 2.25 sehen. Public Class Form1 Private Sub cmdAnzeige_Click(...) Handles ... Dim x As Integer x = 2 lblAnzeige.Text = Choose(x, "US Dollar", "Pfund", "Euro") End Sub End Class Abbildung 2.25 Auswahl mit Select ... Case Listing 2.16 Projekt »FunktionChoose« Die Funktion IIf() ähnelt dem einzeiligen If ... Then ... Else, liefert aber im Unterschied zu diesem direkt einen Wert zurück. Ihre Syntax lautet: 2 Public Class Form1 Private Sub cmdAnzeige_Click(...) Handles ... Dim x, y As Integer x = 5 y = 3 lblAnzeige.Text = IIf(x > y, x, y) End Sub End Class Listing 2.14 Projekt »SelectCase« 2.4.4 Funktion IIf Verzweigungen Zur Erläuterung: 왘 Der Wert x = 2 führt zur Ausgabe von Pfund. IIf(Bedingung, True-Ausdruck, False-Ausdruck) 74 75 2 2.5 Grundlagen unterscheiden bzw. Eigenschaften einstellen. Dazu benötigen Sie Verzweigungen, die Gegenstand des vorherigen Abschnitts waren. 2.4.6 Übungen Übung ÜSteuerbetrag Übung ÜSteuerbetrag 2 Schreiben Sie ein Programm, das zu einem eingegebenen Gehalt den Steuerbetrag berechnet und ausgibt, siehe Abbildung 2.26. In Tabelle 2.13 sind die Steuersätze angegeben. Es wird davon ausgegangen, dass das gesamte Gehalt zum angegebenen Satz versteuert wird. Erstellen Sie das Programm in zwei Versionen: mithilfe von If Else beziehungsweise mithilfe von Select Case. Abbildung 2.26 Übung ÜSteuerbetrag Gehalt Steuersatz von 0 € bis einschließlich 12.000 € 12 % von über 12.000 € bis einschließlich 20.000 € 15 % von über 20.000 € bis einschließlich 30.000 € 20 % über 30.000 € 25 % Tabelle 2.13 Übung ÜSteuerbetrag Übung ÜKranVerzweigung Übung ÜKranVerzweigung Verzweigungen und Steuerelemente 2.5.1 Kontrollkästchen Das Kontrollkästchen (CheckBox) bietet dem Benutzer die Möglichkeit, zwischen zwei Zuständen zu wählen, z. B. An oder Aus, wie bei einem Schalter. Sie können damit auch kennzeichnen, ob Sie eine bestimmte optionale Erweiterung wünschen oder nicht. Der Benutzer bedient ein Kontrollkästchen, indem er ein Häkchen setzt oder entfernt. CheckBox Das wichtigste Ereignis ist beim Kontrollkästchen nicht der Click, sondern das Ereignis CheckedChanged. Dieses Ereignis zeigt nicht nur an, dass der Benutzer das Kontrollkästchen bedient hat, sondern auch, dass es seinen Zustand geändert hat. Das kann beispielsweise auch durch Programmcode geschehen. Eine Ereignisprozedur zu CheckedChanged löst in jedem Fall etwas aus, sobald das Kontrollkästchen (vom Benutzer oder vom Programmcode) geändert wird. CheckedChanged Allerdings wird der Programmablauf meist so gestaltet, dass bei einem anderen Ereignis der aktuelle Zustand des Kontrollkästchens (An/Aus) abgefragt und anschließend entsprechend reagiert wird. An/Aus Die wichtigen Eigenschaften des Kontrollkästchens sind: 왘 Checked – der Zustand der CheckBox, mit den Werten True und False Checked 왘 Text – die Beschriftung neben dem Kontrollkästchen Das Projekt Kontrollkästchen nutzt alle oben genannten Möglichkeiten, siehe Abbildung 2.27. Erweitern Sie die Übung ÜKran. Die Bewegung des Krans soll kontrolliert werden. Kein Teil des Krans darf zu groß oder zu klein werden. Der Kran darf sich nicht über die sinnvollen Begrenzungen hinausbewegen. Nutzen Sie Bedingungen und Verzweigungen, um das zu verhindern. 2.5 Verzweigungen und Steuerelemente Abbildung 2.27 Zustand nach Klick auf Kontrollkästchen In diesem Abschnitt geht es um Kontrollkästchen und Optionsschaltflächen bzw. Gruppen von Optionsschaltflächen. Damit können Sie Zustände 76 77 2 2.5 Grundlagen Der Programmcode: Public Class Form1 Private Sub cmdPrüfen_Click(...) Handles ... If chkSchalter.Checked Then lblTest1.Text = "An" Else lblTest1.Text = "Aus" End If End Sub Private Sub chkSchalter_CheckedChanged(...) _ Handles chkSchalter.CheckedChanged If chkSchalter.Checked Then lblTest2.Text = "An" Else lblTest2.Text = "Aus" End If End Sub Private Sub cmdUmschalten_Click(...) Handles ... chkSchalter.Checked = Not chkSchalter.Checked End Sub End Class Listing 2.17 Projekt »Kontrollkästchen« Zur Erläuterung: 왘 Den Zustand eines Kontrollkästchens (Häkchen gesetzt oder nicht) können Sie im Programm mithilfe einer einfachen Verzweigung auswerten. Wahrheitswert 왘 Normalerweise werden bei einer Bedingung in einer Verzweigung zwei Werte durch Vergleichsoperatoren miteinander verglichen und eines der beiden Ergebnisse True oder False ermittelt. Da die Eigenschaft Checked aber bereits einem solchen Wahrheitswert entspricht, kann die Bedingung auch verkürzt formuliert werden. If chkSchalter.Checked = True ... hätte also das gleiche Ergebnis erzeugt. 왘 Die Prozedur cmdPrüfenClick() wird aufgerufen, wenn der Benutzer den Button Schalter prüfen betätigt. Erst in diesem Moment wird der Zustand des Kontrollkästchens (Eigenschaft Checked gleich True oder 78 Verzweigungen und Steuerelemente False) abgefragt und im ersten Label ausgegeben. Es kann also sein, dass das Kontrollkästchen vor längerer Zeit oder noch nie benutzt wurde. 2 왘 Dagegen wird die Prozedur chkSchalter_CheckedChanged() sofort aufgerufen, wenn der Benutzer das Kontrollkästchen benutzt, also ein Häkchen setzt oder entfernt. Die Prozedur wird auch dann aufgerufen, wenn der Benutzer den Zustand des Kontrollkästchens durch Programmcode ändert. Hier wird der Zustand des Kontrollkästchens also unmittelbar nach der Änderung ausgegeben (im zweiten Label). 왘 Die Prozedur cmdUmschalten_Click() dient zum Umschalten des Kontrollkästchens per Programmcode. Das kommt in Windows-Anwendungen häufig vor, wenn es logische Zusammenhänge zwischen mehreren Steuerelementen gibt. Die Eigenschaft Checked wird mithilfe des logischen Operators Not auf True bzw. auf False gesetzt. Das führt wiederum zum Ereignis chkSchalter_CheckedChanged und dem Ablauf der zugehörigen, oben erläuterten Ereignisprozedur. 2.5.2 Optionsschaltfläche Optionsschaltflächen (RadioButtons) treten immer in Gruppen auf und bieten dem Benutzer die Möglichkeit, zwischen zwei oder mehr Möglichkeiten zu wählen, etwa zwischen den Farben Rot, Grün oder Blau. Bei zusammengehörigen Optionsschaltflächen kann der Benutzer genau eine per Klick auswählen. Alle anderen werden dann unmittelbar als Nicht ausgewählt gekennzeichnet. RadioButton Analog zum Kontrollkästchen ist das wichtigste Ereignis bei einer Optionsschaltfläche CheckedChanged. Dieses Ereignis zeigt an, dass die betreffende Optionsschaltfläche ihren Zustand geändert hat. Das kann auch durch Programmcode geschehen. CheckedChanged Der Programmablauf wird hier meist so gestaltet, dass bei einem anderen Ereignis die aktuelle Auswahl innerhalb der Gruppe abgefragt wird und anschließend je nach Zustand unterschiedlich reagiert wird. Es ist guter Programmierstil und verringert Folgefehler, wenn Sie eine der Optionsschaltflächen der Gruppe bereits zur Entwicklungszeit auf True setzen. Das muss nicht notwendigerweise die erste Optionsschaltfläche der Gruppe sein. Die wichtigen Eigenschaften der Optionsschaltflächen sind Checked (mit den Werten True und False) und Text (zur Beschriftung). Das nachfolgende Checked 79 2 2.5 Grundlagen Programm im Projekt Optionen nutzt alle genannten Möglichkeiten. Es wird der Zustand angezeigt, nachdem der Benutzer 왘 Blau gewählt, 왘 den Button Prüfen betätigt und Verzweigungen und Steuerelemente Private Sub optFarbeBlau_CheckedChanged(...) Handles ... If optFarbeBlau.Checked Then lblAnzeige2.Text = "Blau" End If End Sub 2 왘 Grün gewählt hat (siehe Abbildung 2.28). Private Sub cmdSchalter_Click(...) Handles ... optFarbeRot.Checked = True End Sub End Class Listing 2.18 Projekt »Optionen« Zur Erläuterung: Abbildung 2.28 Zustand nach den genannten Aktionen Der Programmcode: Public Class Form1 Private Sub cmdPrüfen_Click(...) Handles ... If optFarbeRot.Checked Then lblAnzeige1.Text = "Rot" ElseIf optFarbeGrün.Checked Then lblAnzeige1.Text = "Grün" Else lblAnzeige1.Text = "Blau" End If End Sub Private Sub optFarbeRot_CheckedChanged(...) Handles ... If optFarbeRot.Checked Then lblAnzeige2.Text = "Rot" End If End Sub Private Sub optFarbeGrün_CheckedChanged(...) Handles ... If optFarbeGrün.Checked Then lblAnzeige2.Text = "Grün" End If End Sub 80 왘 Den Zustand einer einzelnen Optionsschaltfläche können Sie im Programm mithilfe einer einfachen Verzweigung auswerten. Es muss festgestellt werden, ob diese Optionsschaltfläche ausgewählt oder abgewählt wurde. In beiden Fällen tritt das Ereignis CheckedChanged auf. Auswahl oder Abwahl 왘 Den Zustand einer Gruppe von Optionsschaltflächen können Sie im Programm mithilfe einer mehrfachen Verzweigung auswerten. 왘 Die Prozedur cmdPrüfen_Click() wird aufgerufen, wenn der Benutzer den Button Prüfen betätigt. Erst in diesem Moment wird der Zustand der Gruppe abgefragt und im ersten Label ausgegeben. 왘 Dagegen wird eine der Prozeduren optFarbeRot_CheckedChanged() (bzw. ... Grün ... oder ... Blau ...) sofort aufgerufen, wenn der Benutzer eine der Optionsschaltflächen auswählt. Diese Prozeduren werden jeweils auch dann aufgerufen, wenn der Benutzer den Zustand der zugehörigen Optionsschaltfläche durch Programmcode ändert. Hier wird der Zustand der Gruppe also unmittelbar nach der Änderung ausgegeben (im zweiten Label). 왘 Die Prozedur cmdSchalter_Click() dient der Auswahl einer bestimmten Optionsschaltfläche per Programmcode. Das kommt in WindowsAnwendungen häufig vor, wenn es logische Zusammenhänge zwischen mehreren Steuerelementen gibt. Die Eigenschaft Checked wird auf True gesetzt. Das führt wiederum zum Ereignis CheckedChanged der jeweiligen Optionsschaltfläche und zum Ablauf der zugehörigen, oben erläuterten Ereignisprozedur. 81 2 2.5 Grundlagen Innerhalb eines Formulars oder einer GroupBox (siehe Abschnitt 2.5.4) kann immer nur bei einer Optionsschaltfläche die Eigenschaft Checked den Wert True haben. Sobald eine andere Optionsschaltfläche angeklickt wird, ändert sich der Wert der Eigenschaft bei der bisher gültigen Optionsschaltfläche. Verzweigungen und Steuerelemente End If End Sub End Class 2 Listing 2.19 Projekt »MehrereEreignisse« Zur Erläuterung: 2.5.3 Mehrere Ereignisse in einer Prozedur behandeln Das folgende Projekt MehrereEreignisse stellt eine häufig verwendete Technik vor. Gibt es mehrere Ereignisse, die auf die gleiche oder auf ähnliche Weise behandelt werden sollen, ist es vorteilhaft, diese Ereignisse mit einer gemeinsamen Ereignisprozedur aufzurufen. Handles Das ist möglich, da nach dem Schlüsselwort Handles zu Beginn der Ereignisprozedur mehrere Ereignisse genannt werden können. Das nachfolgende Programm verwendet diese Technik, um den Zustand einer Gruppe von Optionsschaltflächen sofort anzuzeigen, wenn der Benutzer eine der Optionsschaltflächen auswählt, siehe Abbildung 2.29. Abbildung 2.29 Mehrere Ereignisse in einer Prozedur Der Programmcode: Public Class Form1 Private Sub optFarbeRot_CheckedChanged(...) _ Handles optFarbeRot.CheckedChanged, optFarbeGrün.CheckedChanged, optFarbeBlau.CheckedChanged If optFarbeRot.Checked Then lblAnzeige.Text = "Rot" ElseIf optFarbeGrün.Checked Then lblAnzeige.Text = "Grün" Else lblAnzeige.Text = "Blau" 82 왘 Die Prozedur optFarbeRot_CheckedChanged() wird durch alle drei CheckedChanged-Ereignisse aufgerufen. 2.5.4 Mehrere Gruppen von Optionsschaltflächen Falls in den beiden letzten Programmen weitere Optionsschaltflächen hinzugefügt werden, gilt nach wie vor: Nur eine der Optionsschaltflächen ist ausgewählt. Benötigen Sie aber innerhalb eines Formulars mehrere voneinander unabhängige Gruppen von Optionsschaltflächen, wobei in jeder der Gruppen jeweils nur eine Optionsschaltfläche ausgewählt sein soll, müssen Sie jede Gruppe einzeln in einen Container setzen. Ein Formular ist bereits ein Container, wir benötigen also einen weiteren Container. Container Als ein solcher Container kann beispielsweise das Steuerelement Gruppe (GroupBox) dienen. Mit der Zuweisung der Eigenschaft Text der GroupBox geben Sie eine Beschriftung an. GroupBox Falls eine GroupBox markiert ist, dann wird eine neu erzeugte Optionsschaltfläche dieser GroupBox zugeordnet und reagiert gemeinsam mit den anderen Optionsschaltflächen in dieser GroupBox. Anderenfalls wird sie dem Formular zugeordnet und reagiert gemeinsam mit den anderen Optionsschaltflächen, die im Formular außerhalb von GroupBoxen stehen. Sie können eine bereits erzeugte Optionsschaltfläche auch im Nachhinein ausschneiden, das Ziel markieren und sie wieder einfügen, um die Zuordnung zu ändern. Zuordnung Das Projekt Optionsgruppen verwendet zwei voneinander unabhängige Gruppen von Optionen, siehe Abbildung 2.30. 83 2 2.5 Grundlagen Verzweigungen und Steuerelemente AusgabeUnterkunft = "Hotel" End If lblAnzeige.Text = AusgabeUrlaubsort & ", " & AusgabeUnterkunft End Sub End Class 2 Listing 2.20 Projekt »Optionsgruppen« Abbildung 2.30 Zwei Gruppen von RadioButtons Zur Erläuterung: Der zugehörige Code: 왘 Bei einer Urlaubsbuchung können Zielort und Art der Unterkunft unabhängig voneinander gewählt werden. Es gibt also zwei Gruppen von Optionsschaltflächen, jede in einer eigenen GroupBox. Public Class Form1 Private AusgabeUrlaubsort As String Private AusgabeUnterkunft As String Private Sub optBerlin_CheckedChanged(...) _ Handles optBerlin.CheckedChanged, optParis.CheckedChanged, optRom.CheckedChanged ' Urlaubsort If optBerlin.Checked Then AusgabeUrlaubsort = "Berlin" ElseIf optParis.Checked Then AusgabeUrlaubsort = "Paris" Else AusgabeUrlaubsort = "Rom" End If lblAnzeige.Text = AusgabeUrlaubsort & ", " & AusgabeUnterkunft End Sub Private Sub optAppartement_CheckedChanged(...) _ Handles optAppartement.CheckedChanged, optPension.CheckedChanged, optHotel.CheckedChanged ' Unterkunft If optAppartement.Checked Then AusgabeUnterkunft = "Appartement" ElseIf optPension.Checked Then AusgabeUnterkunft = "Pension" Else 84 왘 Bei Auswahl einer der drei Optionsschaltflächen in einer Gruppe wird jeweils die gleiche Prozedur aufgerufen. In den Prozeduren wird den klassenweit gültigen Variablen AusgabeUrlaubsort bzw. AusgabeUnterkunft ein Wert zugewiesen und anschließend ausgegeben. 왘 Die Variablen mussten klassenweit gültig deklariert werden, damit sie in der jeweils anderen Prozedur zur Verfügung stehen. Übung Erweitern Sie die Übung ÜKranVerzweigung. Die Bewegung des Krans soll per Zeitgeber (Timer) gesteuert werden. Der Benutzer wählt zunächst über eine Gruppe von Optionsschaltflächen aus, welche Bewegung der Kran ausführen soll. Anschließend betätigt er den Button Start, siehe Abbildung 2.31. Die Bewegung wird so lange ausgeführt, bis der Benutzer den Button Stop drückt oder eine Begrenzung erreicht wird. Übung ÜKranOptionen Abbildung 2.31 Übung ÜKranOptionen 85 2 2.5 Grundlagen 2.5.5 Prozedur ohne Ereignis, Modularisierung Allgemeine Prozedur Bisher ging es nur um Prozeduren, die mit einem Ereignis zusammenhingen. Darüber hinaus können Sie aber auch unabhängige, allgemeine Prozeduren schreiben, die von anderen Stellen des Programms aus aufgerufen werden. Diese Prozeduren können Sie direkt im Codefenster eingeben. Nachfolgend das Programm im Projekt ProzedurOhneEreignis, es handelt sich dabei um eine geänderte Version des Programms im Projekt Optionsgruppen: Public Class Form1 Private AusgabeUrlaubsort As String Private AusgabeUnterkunft As String Private Sub optUrlaubsort_CheckedChanged(...) _ Handles optBerlin.CheckedChanged, optParis.CheckedChanged, optRom.CheckedChanged ' Urlaubsort If optBerlin.Checked Then AusgabeUrlaubsort = "Berlin" ElseIf optParis.Checked Then AusgabeUrlaubsort = "Paris" Else AusgabeUrlaubsort = "Rom" End If Anzeigen() End Sub Private Sub optUnterkunft_CheckedChanged(...) _ Handles optAppartement.CheckedChanged, optPension.CheckedChanged, optHotel.CheckedChanged ' Unterkunft If optAppartement.Checked Then AusgabeUnterkunft = "Appartement" ElseIf optPension.Checked Then AusgabeUnterkunft = "Pension" Else AusgabeUnterkunft = "Hotel" End If Verzweigungen und Steuerelemente Anzeigen() End Sub 2 Private Sub Anzeigen() lblAnzeige.Text = AusgabeUrlaubsort & ", " & AusgabeUnterkunft End Sub End Class Listing 2.21 Projekt »ProzedurOhneEreignis« Zur Erläuterung: 왘 Abgebildet wird nur der zweite Teil der Klasse. 왘 Am Ende der beiden Ereignisprozeduren optUnterkunft_CheckedChanged() und optUrlaubsort_CheckedChanged() steht jeweils die Anweisung Anzeigen(). Dabei handelt es sich um einen Aufruf der Prozedur Anzeigen(). 왘 Diese Prozedur steht weiter unten. Sie ist nicht direkt an ein Ereignis gekoppelt. Vorteil dieser Vorgehensweise: Gemeinsam genutzte Programmteile können ausgelagert werden und müssen nur einmal geschrieben werden. Man nennt diesen Vorgang bei der Programmierung auch Modularisierung. In Abschnitt 4.7 wird dieses Thema noch genauer behandelt. 2.5.6 Schieberegler Das Steuerelement Schieberegler (engl.: Trackbar) dient zur komfortablen Einstellung eines Zahlenwerts. Im nachfolgenden Projekt Schieberegler werden drei dieser Steuerelemente dazu genutzt, die Hintergrundfarbe eines Panels einzustellen, siehe auch Abbildung 2.32. Zahlenwert einstellen Abbildung 2.32 Farbe über Schieberegler einstellen 86 87 2 2.6 Grundlagen ValueChanged Das Ereignis ValueChanged eines Schiebereglers zeigt an, dass der Wert geändert wurde. In diesem Projekt führt dieses Ereignis von allen drei Schiebereglern zur selben Prozedur. Zunächst der Code des Programms: Public Class Form1 Private Sub Form1_Load(...) Handles MyBase.Load FarbeAnzeigen() End Sub Private Sub FarbeAnzeigen() panFarbe.BackColor = Color.FromArgb( trkRot.Value, trkGrün.Value, trkBlau.Value) lblRotWert.Text = trkRot.Value lblGrünWert.Text = trkGrün.Value lblBlauWert.Text = trkBlau.Value End Sub Private Sub WertGeändert(sender As Object, e As EventArgs) _ Handles trkRot.ValueChanged, trkGrün.ValueChanged, trkBlau.ValueChanged FarbeAnzeigen() End Sub End Class Schleifen 왘 Falls der Benutzer rechts oder links neben dem Schieberegler klickt, dann wird der Wert um den Eigenschaftswert von LargeChange verändert (hier: 32). Falls der Schieberegler den Fokus hat, also das aktuelle Steuerelement ist, und der Benutzer eine der Pfeiltasten betätigt, dann wird der Wert um den Eigenschaftswert von SmallChange verändert (hier: 8). LargeChange, SmallChange 왘 Die Eigenschaft TickFrequency steht für den Abstand der Markierungen am Schieberegler (hier: 16). TickFrequency 2 2.6 Schleifen Schleifen werden in Programmen häufig benötigt. Sie ermöglichen den mehrfachen Durchlauf von Anweisungen. Darin liegt eine besondere Stärke der Programmierung allgemein: die schnelle wiederholte Bearbeitung ähnlicher Vorgänge. Es gibt die Schleifenstrukturen: Do ... Loop, For ... Next, For Each ... In ... und With. Mithilfe der Strukturen steuern Sie die Wiederholungen eines Anweisungsblocks (die Anzahl der Schleifendurchläufe). Dabei wird der Wahrheitswert eines Ausdrucks (der Schleifenbedingung) oder der Wert eines numerischen Ausdrucks (Wert des Schleifenzählers) benötigt. Die Schleife For Each ... In ... wird bei Feldern oder Auflistungen (engl.: Collections) eingesetzt. Die Anweisung With dient der Steuerung einer besonderen Schleife mit nur einem Durchlauf. Auflistung Listing 2.22 Projekt »Schieberegler« Color.FromArgb() Zur Erläuterung: 2.6.1 For ... Next 왘 Die Prozedur zum Laden des Formulars und die Betätigung eines der drei Schieberegler führt zum Aufruf der Prozedur FarbeAnzeigen(). Darin wird die Methode FromArgb() der Struktur Color aufgerufen, die drei Werte (Rot, Grün, Blau) zur Einstellung der Hintergrundfarbe des Panels benötigt. Diese drei Werte werden mithilfe der Eigenschaft Value von den Schiebereglern geliefert. Ein Startwert von 0 für alle drei Schieberegler ergibt die Farbe Schwarz. Falls die Anzahl der Schleifendurchläufe bekannt oder vor Beginn der Schleife berechenbar ist, sollten Sie die For...Next-Schleife verwenden. Ihr Aufbau sieht wie folgt aus: 왘 Neben jedem Schieberegler ist ein zusätzliches Label platziert, in dem der aktuelle Wert als Zahl angezeigt wird. 왘 Die Eigenschaften Minimum und Maximum stehen für den Zahlenbereich des Schiebereglers, hier von 0 bis 255. 88 For Zähler = Anfang To Ende [ Step Schritt ] [ Anweisungen ] [ Exit For ] [ Anweisungen ] Next [ Zähler ] Die Zahlen-Variable Zähler wird zunächst auf den Wert von Anfang gesetzt. Nach jedem Durchlauf wird sie um den Wert von Schritt verändert, also vergrößert oder verkleinert. Falls Step Schritt nicht angegeben wurde, ver- Step 89 2 2.6 Grundlagen größert sich die Variable um 1. Der neue Wert von Zähler wird mit dem Wert von Ende verglichen. 왘 Falls die Schrittweite positiv ist und der Wert von Zähler nicht größer als der Wert von Ende ist, wird die Schleife wiederum durchlaufen. 왘 Falls die Schrittweite negativ ist und der Wert von Zähler nicht kleiner als der Wert von Ende ist, wird die Schleife ebenfalls wiederum durchlaufen. 왘 Falls die Schrittweite positiv ist und der Wert von Zähler größer als der Wert von Ende ist oder falls die Schrittweite negativ ist und der Wert von Zähler kleiner als der Wert von Ende ist, wird die Schleife beendet. Next Zähler Die Anweisung Next kennzeichnet das Ende der Schleife. Zur Verdeutlichung sollte nachfolgend immer Zähler stehen. Exit For Die Anweisung Exit For können Sie einsetzen, um die Schleife aufgrund einer speziellen Bedingung sofort zu verlassen. In dem folgenden Programm im Projekt ForNext werden durch Aufruf von vier Buttons vier unterschiedliche Schleifen durchlaufen, siehe Abbildung 2.33. Schleifen Private Sub cmdSchleife2_Click(...) Handles ... Dim i As Integer lblA2.Text = "" For i = 3 To 11 Step 2 lblA2.Text &= i & vbCrLf Next i End Sub 2 Private Sub cmdSchleife3_Click(...) Handles ... Dim i As Integer lblA3.Text = "" For i = 7 To 3 Step -1 lblA3.Text &= i & vbCrLf Next i End Sub Private Sub cmdSchleife4_Click(...) Handles ... Dim d As Double lblA4.Text = "" For d = 3.5 To 7.5 Step 1.5 lblA4.Text &= d & vbCrLf Next d End Sub End Class Listing 2.23 Projekt »ForNext« Zur Erläuterung der ersten Schleife: Abbildung 2.33 Verschiedene For-Schleifen Der Programmcode: Public Class Form1 Private Sub cmdSchleife1_Click(...) Handles ... Dim i As Integer lblA1.Text = "" For i = 3 To 7 lblA1.Text &= i & vbCrLf Next i End Sub 90 왘 Als Zählervariable dient i. 왘 Die Schleife wird erstmalig mit i = 3 und letztmalig mit i = 7 durchlaufen. 왘 Es ist keine Schrittweite angegeben, also wird als Schrittweite 1 genommen. Zur Erläuterung der restlichen Schleifen: 왘 Bei der zweiten Schleife wurde die Schrittweite 2 gewählt. 왘 Die dritte Schleife läuft abwärts, daher muss eine negative Schrittweite gewählt werden. 왘 In der vierten Schleife wird gezeigt, dass eine Schleife auch nicht ganzzahlige Werte durchlaufen kann. 91 2 2.6 Grundlagen 2.6.2 Do ... Loop Steuerung über Bedingung Ist die Anzahl der Schleifendurchläufe nicht bekannt bzw. vor Beginn der Schleife nicht berechenbar, sollten Sie die Do...Loop-Schleife verwenden. Es gibt sie in fünf verschiedenen Varianten: While 왘 Do While ... Loop prüft die Bedingung zum Weiterlaufen der Schleife am Anfang der Schleife. Schleifen mithilfe der Prozedur Randomize() vor der Benutzung initialisiert werden, da anderenfalls immer die gleichen Zufallszahlen geliefert würden. Die Initialisierung erfolgt pro Programmaufruf einmalig beim Laden des Formulars. 2 왘 Do ... Loop While prüft die Bedingung zum Weiterlaufen der Schleife am Ende der Schleife. Until 왘 Do Until ... Loop prüft die Bedingung zum Abbruch der Schleife am Anfang der Schleife. 왘 Do ... Loop Until prüft die Bedingung zum Abbruch der Schleife am Ende der Schleife. 왘 Do ... Loop: Die Bedingung zum Weiterlaufen oder Abbruch der Schleife wird nicht geprüft, daher ist eine Verzweigung in der Schleife und ein Exit Do zur Beendigung der Schleife notwendig. Der allgemeine Aufbau sieht wie folgt aus: Do { [ [ [ Loop While | Until } Bedingung Anweisungen ] Exit Do ] Anweisungen ] oder Do [ [ [ Loop Anweisungen ] Exit Do ] Anweisungen ] { While | Until } Bedingung Zufallsgenerator Das folgende Programm im Projekt DoLoop nutzt alle fünf Möglichkeiten. Es werden Zahlen addiert, solange die Summe der Zahlen kleiner als 5 ist, siehe Abbildung 2.34. Da ein Zufallsgenerator die Zahlen erzeugt, ist die Anzahl der Schleifendurchläufe nicht vorhersagbar. Randomize(), Rnd() Der Zufallszahlengenerator wird mithilfe der Funktion Rnd() realisiert. Sie liefert bei jedem Aufruf einen neuen quasizufälligen Single-Wert zwischen 0 (einschließlich) und 1 (ausschließlich). Der Zufallszahlengenerator muss 92 Abbildung 2.34 Bedingungsgesteuerte Schleife Dieser Zeitpunkt wird durch das Ereignis Load gekennzeichnet. Sie erstellen den Rahmen dieser Ereignisprozedur, indem Sie einen Doppelklick auf einer freien Stelle des Formulars ausführen. Die zugehörige Ereignisprozedur behandelt das Ereignis MyBase.Load. Mit MyBase können Sie auf die Basisklasse der Klasse zugreifen, in der Sie sich befinden; in diesem Fall ist das die Klasse des Formulars Form1. Mehr zum Begriff MyBase finden Sie in Abschnitt 5.10. Load, MyBase Public Class Form1 Private Sub Form1_Load(...) Handles MyBase.Load Randomize() End Sub Private Sub cmdSchleife1_Click(...) Handles ... Dim Summe As Single lblAnzeige.Text = "" Summe = 0 Do While Summe < 5 Summe += Rnd() lblAnzeige.Text &= Summe & vbCrLf Loop lblAnzeige.Text &= "Fertig!" End Sub 93 2 2.6 Grundlagen Private Sub cmdSchleife2_Click(...) Handles ... Dim Summe As Single lblAnzeige.Text = "" Summe = 0 Do Summe += Rnd() lblAnzeige.Text &= Summe & vbCrLf Loop While Summe < 5 lblAnzeige.Text &= "Fertig!" End Sub Private Sub cmdSchleife3_Click(...) Handles ... Dim Summe As Single lblAnzeige.Text = "" Summe = 0 Do Until Summe >= 5 Summe += Rnd() lblAnzeige.Text &= Summe & vbCrLf Loop lblAnzeige.Text &= "Fertig!" End Sub Private Sub cmdSchleife4_Click(...) Handles ... Dim Summe As Single lblAnzeige.Text = "" Summe = 0 Do Summe += Rnd() lblAnzeige.Text &= Summe & vbCrLf Loop Until Summe >= 5 lblAnzeige.Text &= "Fertig!" End Sub Private Sub cmdSchleife5_Click(...) Handles ... Dim Summe As Single lblAnzeige.Text = "" Summe = 0 Do Summe += Rnd() 94 Schleifen lblAnzeige.Text &= Summe & vbCrLf If Summe >= 5 Then Exit Do 2 Loop lblAnzeige.Text &= "Fertig!" End Sub End Class Listing 2.24 Projekt »DoLoop« Zur Erläuterung: 왘 Im Folgenden wird nur die erste Ereignisprozedur cmdSchleife1_Click() erläutert. Die anderen Prozeduren sind vergleichbar aufgebaut. Auf die unterschiedliche Schleifensteuerung wurde bereits weiter oben eingegangen. 왘 Der Inhalt des Labels wird von alten Ausgaben gelöscht. 왘 Die Variable Summe wird zunächst mit dem Wert 0 initialisiert. Das ist in Visual Basic eigentlich nicht nötig, gehört aber zum guten Programmierstil, da Sie auf diese Weise den Wert der Variablen zu Beginn der Schleife sicherstellen können. Summe berechnen 왘 Zu Beginn der Schleife wird geprüft, ob die Summe der Zahlen kleiner als 5 ist. Trifft das zu, kann die Schleife durchlaufen werden. Hinweis: Bei einer solchen kopfgesteuerten Schleife (d. h., die Abbruchbedingung wird im Kopf der Schleife geprüft) kann es vorkommen, dass sie niemals durchlaufen wird. 왘 Der Wert der Variablen Summe wird um eine Zufallszahl zwischen 0 und 1 erhöht. 왘 Der Inhalt des Labels wird um den aktuellen Wert der Summe und einen Zeilenumbruch verlängert. 왘 Sie kommen zum Ende der Schleife, zur Anweisung Loop. Sie führt dazu, dass das Programm wieder zu Beginn der Schleife fortgesetzt wird. Es wird wiederum geprüft, ob die Summe der Zahlen kleiner als 5 ist. Sobald das nicht mehr zutrifft, läuft das Programm hinter der Anweisung Loop weiter. 왘 Es wird die Ausgabe Fertig! erzeugt. 95 2 2.6 Grundlagen 2.6.3 Ein Würfel Im nachfolgenden Programm, das sich ebenfalls im Projekt DoLoop befindet, wird mithilfe des Zufallsgenerators insgesamt zehnmal gewürfelt. Zunächst der Code: Private Sub cmdWürfel_Click(...) Handles ... Dim Wert As Integer, i As Integer = 1 lblAnzeige.Text = "" Do Wert = Math.Floor(Rnd() * 6) + 1 lblAnzeige.Text &= Wert & vbCrLf i = i + 1 Loop While i <= 10 End Sub Listing 2.25 Projekt »DoLoop«, ein Würfel Math.Floor() Die Funktion Rnd() liefert einen Single-Wert von 0 (einschließlich) bis 1 (ausschließlich). Der Ausdruck Rnd() * 6 ergibt somit einen Single-Wert von 0 (einschließlich) bis 6 (ausschließlich). Die Funktion Math.Floor(), siehe auch Abschnitt 6.5, liefert die nächstniedrigere ganze Zahl, also eine ganze Zahl von 0 bis 5. Addiert man eine 1 hinzu, so erhält man eine ganze Zahl von 1 bis 6, also das Ergebnis eines Würfels, siehe Abbildung 2.35. Schleifen verwendet. Bei einem längeren Objektnamen ist das sehr nützlich und übersichtlich. Der Aufbau sieht wie folgt aus: 2 With Objekt [ Anweisungen ] End With Ein Beispiel im Projekt WithBlock: Public Class Form1 Private Sub cmdAnzeige_Click(...) Handles ... With lblAnzeige .BorderStyle = BorderStyle.Fixed3D .BackColor = Color.Yellow .Text = "Test" .Location = New Point(20, 50) End With End Sub End Class Listing 2.26 Projekt »WithBlock« Zur Erläuterung: 왘 Die Eigenschaften des Labels lblAnzeige werden mithilfe von With geändert. 왘 Die Eigenschaften Rahmenstil, Hintergrundfarbe, Textinhalt und Position werden nacheinander gesetzt. Dabei muss zu Beginn der Anweisung jeweils nur ein Punkt angegeben werden. Da das Programm sich innerhalb des With-Blocks befindet, ist es klar, auf welches Objekt sich die Änderungen beziehen. 2.6.5 Übungen Abbildung 2.35 Zehnmal gewürfelt 2.6.4 With Mithilfe von With führen Sie eine Reihe von Anweisungen für ein einzelnes Objekt durch. Dabei wird der einmal erstellte Bezug zum Objekt mehrfach 96 Anhand einer Reihe von Übungsaufgaben zu Schleifen (und Verzweigungen) werden im Folgenden einige typische Probleme der Programmierung in Visual Basic verdeutlicht. Der visuelle Teil der Lösung enthält in der Regel nur ein einfaches Textfeld zur Eingabe, einen oder zwei Buttons zum Durchführen der Aufgabe und ein einfaches Label zur Ausgabe. 97 2 2.6 Grundlagen Übung ÜForNext1 Übung ÜForNext1 Übung ÜZahlenraten For-Schleife: Schreiben Sie ein Programm mit einer einfachen Schleife, das If ... Else: Schreiben Sie ein Programm, mit dem das Spiel Zahlenraten gespielt werden kann: Per Zufallsgenerator wird eine ganze Zahl zwischen 1 und 100 erzeugt, aber nicht angezeigt. Der Benutzer soll so lange Zahlen eingeben, bis er die Zahl erraten hat. Als Hilfestellung soll jedes Mal ausgegeben werden, ob die eingegebene Zahl größer oder kleiner als die zu ratende Zahl ist, siehe Abbildung 2.38. nacheinander die folgenden Zahlen ausgibt: 35; 32,5; 30; 27,5; 25; 22,5; 20. Übung ÜForNext2 Übung ÜForNext2 For-Schleife: Erweitern Sie die vorherige Aufgabe. Am Ende der Zeile sollen Summe und Mittelwert aller Zahlen angezeigt werden, siehe Abbildung 2.36. Schleifen Übung ÜZahlenraten 2 Abbildung 2.38 Übung ÜZahlenraten Übung ÜSteuertabelle For-Schleife, If ... Else oder Select Case: Erweitern Sie das Programm aus Abbildung 2.36 Übung ÜForNext1 und 2 Übung ÜSteuerbetrag. Schreiben Sie ein Programm, das zu einer Reihe von Gehältern u. a. den Steuerbetrag berechnet und ausgibt. In Tabelle 2.14 sind die Steuersätze angegeben. Übung ÜSteuertabelle Übung ÜDoLoop Übung ÜDoLoop Do...Loop-Schleife: Schreiben Sie ein Programm, mit dessen Hilfe eine ein- Gehalt Steuersatz gegebene Zahl wiederholt halbiert und ausgegeben wird. Das Programm soll beendet werden, wenn das Ergebnis der Halbierung kleiner als 0,001 ist, siehe Abbildung 2.37. von 0 € bis einschließlich 12.000 € 12 % von über 12.000 € bis einschließlich 20.000 € 15 % von über 20.000 € bis einschließlich 30.000 € 20 % über 30.000 € 25 % Tabelle 2.14 Übung ÜSteuertabelle Abbildung 2.37 Übung ÜDoLoop 98 Es soll für jedes Gehalt von 5.000 € bis 35.000 € in Schritten von 3.000 € folgende vier Werte ausgegeben werden: Gehalt, Steuersatz, Steuerbetrag, Gehalt abzüglich Steuerbetrag. Jedes Gehalt soll mit den zugehörigen Werten in einer eigenen Zeile ausgegeben werden, siehe Abbildung 2.39. Auch hier wird davon ausgegangen, dass das gesamte Gehalt zum angegebenen Satz versteuert wird. 99 2 2.7 Grundlagen Schleifen und Steuerelemente Items. Diese wird am sinnvollsten zum Zeitpunkt des Ladens des Formulars genutzt. 2 Im nachfolgenden Programm im Projekt ListenfeldFüllen wird ein Listenfeld für italienische Speisen zu Beginn des Programms mit den folgenden Werten gefüllt: Spaghetti, Grüne Nudeln, Tortellini, Pizza, Lasagne, siehe Abbildung 2.40. Abbildung 2.39 Übung ÜSteuertabelle 2.7 Schleifen und Steuerelemente In diesem Abschnitt werden die beiden Steuerelemente Listenfeld und Kombinationsfeld eingeführt. Damit können Sie eine einfache oder mehrfache Auswahl aus mehreren Möglichkeiten treffen. Im Zusammenhang mit diesen Steuerelementen werden häufig Schleifen benötigt, wie sie im vorherigen Abschnitt behandelt wurden. 2.7.1 Listenfeld ListBox Items Ein Listenfeld (ListBox) zeigt eine Liste mit Einträgen an, aus denen der Benutzer einen oder mehrere auswählen kann. Enthält das Listenfeld mehr Einträge, als gleichzeitig angezeigt werden können, erhält es automatisch einen Scrollbalken. Die wichtigste Eigenschaft des Steuerelements ListBox ist die Auflistung Items. Sie enthält die einzelnen Listeneinträge. Listenfelder können zur Entwurfszeit gefüllt werden, indem der Eigenschaft Items in einem eigenen kleinen Dialogfeld die Einträge hinzugefügt werden. In der Regel werden Sie ein Listenfeld aber zur Laufzeit füllen. Abbildung 2.40 Listenfeld mit Scrollbalken Der zugehörige Code: Public Class Form1 Private Sub Form1_Load(...) Handles MyBase.Load lstSpeisen.Items.Add("Spaghetti") lstSpeisen.Items.Add("Grüne Nudeln") lstSpeisen.Items.Add("Tortellini") lstSpeisen.Items.Add("Pizza") lstSpeisen.Items.Add("Lasagne") End Sub End Class Listing 2.27 Projekt »ListenfeldFüllen« Zur Erläuterung: 왘 Das Ereignis Form1_Load wird ausgelöst, wenn das Formular geladen wird. 왘 Die einzelnen Speisen werden der Reihe nach dem Listenfeld hinzugefügt. Lasagne steht anschließend ganz unten. 2.7.2 Listenfeld füllen Items.Add() 100 Bisher wurden die Eigenschaften und Ereignisse von Steuerelementen behandelt. Darüber hinaus gibt es jedoch auch spezifische Methoden, die auf diese Steuerelemente bzw. auf deren Eigenschaften angewendet werden können. Beim Listenfeld ist das u. a. die Methode Add() der Eigenschaft 2.7.3 Wichtige Eigenschaften Die folgenden Eigenschaften eines Listenfelds bzw. der Auflistung Items werden in der Praxis häufig benötigt: 101 2 2.7 Grundlagen 왘 Items.Count gibt die Anzahl der Elemente in der Liste an. SelectedItem 왘 SelectedItem beinhaltet das aktuell vom Benutzer ausgewählte Element der Liste. Falls kein Element ausgewählt wird, ergibt SelectedItem nichts. 왘 SelectedIndex gibt die laufende Nummer des aktuell vom Benutzer ausgewählten Elements an, beginnend bei 0 für das oberste Element. Falls kein Element ausgewählt wird, ergibt SelectedIndex den Wert -1. Items(i) Schleifen und Steuerelemente 왘 Eine For-Schleife dient der Ausgabe aller Elemente. Sie läuft von 0 bis lstSpeisen.Items.Count – 1. Das liegt daran, dass bei einer Liste mit fünf Elementen die Elemente mit 0 bis 4 nummeriert sind. 2 왘 Die einzelnen Elemente werden mit lstSpeisen.Items(i) angesprochen. Die Variable i beinhaltet bei der Schleife die aktuelle laufende Nummer. 왘 Über Items (Index) können Sie die einzelnen Elemente ansprechen, das oberste Element ist Items(0). Das folgende Programm im Projekt ListenfeldEigenschaften veranschaulicht alle diese Eigenschaften (siehe auch Abbildung 2.41). Public Class Form1 [...] Private Sub cmdAnzeige_Click(...) Handles ... Dim i As Integer lblAnzeige1.Text = "Anzahl: " & lstSpeisen.Items.Count lblAnzeige2.Text = "Ausgewählter Eintrag: " & lstSpeisen.SelectedItem lblAnzeige3.Text = "Nummer des ausgewählten" & " Eintrags: " & lstSpeisen.SelectedIndex Abbildung 2.41 Anzeige nach Auswahl eines Elements 2.7.4 For Each … In … lblAnzeige4.Text = "Alle Einträge:" & vbCrLf For i = 0 To lstSpeisen.Items.Count - 1 lblAnzeige4.Text &= lstSpeisen.Items(i) & vbCrLf Next i End Sub End Class Listing 2.28 Projekt »ListenfeldEigenschaften« Zur Erläuterung: 왘 Das Listenfeld ist bereits gefüllt, siehe Projekt ListenfeldFüllen. 102 Zur Ausgabe der Elemente einer Auflistung eignet sich auch die For-EachSchleife. Nach Betätigung des Buttons For Each im Projekt ListenfeldEigenschaften (siehe Abbildung 2.41) wird die folgende Prozedur durchlaufen: Schleife Private Sub cmdForEach_Click(...) Handles ... lblAnzeige4.Text = "Alle Einträge:" & vbCrLf For Each s As String In lstSpeisen.Items lblAnzeige4.Text &= s & vbCrLf Next s End Sub 왘 Die Anzahl der Elemente wird über lstSpeisen.Items.Count ausgegeben, in diesem Fall sind es 5. Listing 2.29 For-Each-Schleife 왘 Der ausgewählte Eintrag steht in lstSpeisen.SelectedItem, seine Nummer in lstSpeisen.SelectedIndex. Den Kopf einer For-Each-Schleife verstehen Sie am besten, wenn Sie ihn dem Sinn nach übersetzen: Durchlaufe jedes Element der Auflistung lst- 103 2 2.7 Grundlagen Speisen.Items. Lege dabei jeweils eine Kopie des Elements an. Der Datentyp der Kopie entspricht dem Datentyp eines Elements (hier also String). Innerhalb der Schleife wird dann jeder String s einzeln zur Ausgabe hinzugefügt. Beachten Sie, dass eine Änderung des Strings s innerhalb der Schleife nicht zur Änderung des zugehörigen Elements der Auflistung führt, da es sich ja bei s um eine Kopie handelt. Schleifen und Steuerelemente End Sub 2 Private Sub lstSpeisen_SelectedIndexChanged(...) _ Handles lstSpeisen.SelectedIndexChanged lblAnzeige.Text = lstSpeisen.SelectedItem End Sub End Class Listing 2.30 Projekt »ListenfeldEreignis« SelectedIndexChanged 2.7.5 Wechsel der Auswahl Zur Erläuterung: Ähnlich wie beim Kontrollkästchen oder bei der Optionsschaltfläche ist das wichtigste Ereignis einer ListBox nicht der Click, sondern das Ereignis SelectedIndexChanged. Dieses Ereignis zeigt nicht nur an, dass der Benutzer die ListBox bedient hat, sondern auch, dass sie ihren Zustand geändert hat. Das kann z. B. auch durch Programmcode geschehen. Eine Ereignisprozedur zu SelectedIndexChanged() wird in jedem Fall durchlaufen, sobald die ListBox (vom Benutzer oder vom Programmcode) geändert wird. 왘 Das Listenfeld ist bereits gefüllt, siehe Projekt ListenfeldFüllen. Allerdings wird der Programmablauf meist so gestaltet, dass bei einem anderen Ereignis die aktuelle Auswahl der ListBox abgefragt und anschließend je nach Zustand unterschiedlich reagiert wird. Das nachfolgende Programm im Projekt ListenfeldEreignis veranschaulicht diesen Zusammenhang, siehe Abbildung 2.42. 왘 In der Ereignisprozedur cmdEreignis_Click() wird die Nummer des ausgewählten Elements auf 3 gesetzt. Dadurch wird in der ListBox Pizza ausgewählt. Im Label wird die geänderte Auswahl sofort angezeigt, da das Ereignis lstSpeisen_SelectedIndexChanged ausgelöst wurde. 왘 In der dazugehörigen Ereignisprozedur lstSpeisen_SelectedIndexChanged() wird die Anzeige des ausgewählten Elements ausgelöst. Dieses wird unmittelbar nach der Auswahl angezeigt. Die Auswahl lässt sich durch einen Klick des Benutzers in der Liste oder auch durch Programmcode auslösen. 2.7.6 Wichtige Methoden Die Methoden Insert() und RemoveAt() können Sie zur Veränderung der Inhalte des Listenfelds nutzen: Abbildung 2.42 Anzeige nach dem Ereignis Der Programmcode: 왘 Mithilfe der Methode Insert() können Sie Elemente zum Listenfeld an einer gewünschten Stelle hinzufügen. Insert() 왘 Die Methode RemoveAt() löscht ein Element an der gewünschten Stelle. RemoveAt() Im nachfolgenden Programm im Projekt ListenfeldMethoden werden die beiden Methoden eingesetzt, um ein Listenfeld zu verwalten, siehe Abbildung 2.43. Es können Elemente eingefügt, gelöscht und geändert werden. Um sicherzustellen, dass es sich hierbei um sinnvolle Operationen handelt, müssen Sie jeweils bestimmte Bedingungen beachten. Public Class Form1 [...] Private Sub cmdEreignis_Click(...) Handles ... lstSpeisen.SelectedIndex = 3 104 105 2 2.7 Grundlagen Schleifen und Steuerelemente Private Sub cmdErsetzen_Click(...) Handles ... Dim X As Integer If txtErsetzen.Text <> "" And lstSpeisen.SelectedIndex <> -1 Then X = lstSpeisen.SelectedIndex lstSpeisen.Items.RemoveAt(X) lstSpeisen.Items.Insert(X, txtErsetzen.Text) txtErsetzen.Text = "" End If End Sub Abbildung 2.43 Verwaltung eines Listenfelds Public Class Form1 [...] Private Sub cmdLöschen_Click(...) Handles ... Dim X As Integer X = lstSpeisen.SelectedIndex If X <> -1 Then lstSpeisen.Items.RemoveAt(X) End If End Sub Private Sub cmdEinfügen_Click(...) Handles ... If txtNeu.Text = "" Then Exit Sub End If If optAnfang.Checked Then lstSpeisen.Items.Insert(0, txtNeu.Text) ElseIf optAuswahl.Checked And lstSpeisen.SelectedIndex <> -1 Then lstSpeisen.Items.Insert( lstSpeisen.SelectedIndex, txtNeu.Text) Else lstSpeisen.Items.Add(txtNeu.Text) End If txtNeu.Text = "" End Sub 106 2 Private Sub cmdAllesLöschen_Click(...) Handles ... lstSpeisen.Items.Clear() End Sub End Class Listing 2.31 Projekt »ListenfeldMethoden« Zur Erläuterung: 왘 Das Listenfeld ist bereits gefüllt, siehe Projekt ListenfeldFüllen. 왘 In der Prozedur cmdLöschen_Click() wird der Wert von SelectedIndex in der Variablen X gespeichert. Anschließend wird untersucht, ob ein Element ausgewählt wurde, ob also der Wert von X ungleich -1 ist. Ist das der Fall, wird dieses Element mit der Methode RemoveAt() gelöscht. Wird kein Element ausgewählt, geschieht nichts. 왘 Die Prozedur cmdEinfügen_Click() untersucht zunächst, ob in der TextBox etwas zum Einfügen steht. Ist das der Fall, wird untersucht, welcher Einfügeort über die Optionsschaltflächen ausgesucht wurde. – Wurde als Einfügeort das Ende der Liste gewählt, wird der Inhalt mit der bekannten Methode Add() am Ende der Liste angefügt. – In den beiden anderen Fällen wird die Methode Insert() zum Einfügen des Inhalts der TextBox vor einem vorhandenen Listeneintrag genutzt. Diese Methode benötigt den Index des Elements, vor dem eingefügt werden soll. Das ist entweder der Wert 0, falls am Anfang der Liste eingefügt werden soll, oder der Wert von SelectedIndex, falls vor dem ausgewählten Element eingefügt werden soll. 왘 Anschließend wird die TextBox gelöscht, damit nicht versehentlich zweimal das gleiche Element eingefügt wird. 107 2 2.7 Grundlagen 왘 In der Prozedur cmdErsetzen_Click() wird untersucht, ob in der TextBox etwas zum Ersetzen steht und ob ein Element zum Ersetzen ausgewählt wurde. Ist das der Fall, wird Schleifen und Steuerelemente Verhalten der Eigenschaft Items. Das nachfolgende Programm im Projekt ListenfeldMehrfachauswahl verdeutlicht das, siehe auch Abbildung 2.45. 2 – der Wert von SelectedIndex in der Variablen X gespeichert, – das zugehörige Element mit der Methode RemoveAt() gelöscht, – der neue Text an der gleichen Stelle mit der Methode Insert() eingefügt und – die TextBox gelöscht, damit nicht versehentlich zweimal das gleiche Element eingefügt wird. 왘 In der Prozedur cmdAllesLöschen_Click() dient die Methode Clear() zum Leeren der ListBox. So sieht das Dialogfeld nach einigen Veränderungen aus (siehe Abbildung 2.44). Abbildung 2.44 Nach einigen Änderungen Abbildung 2.45 Mehrere ausgewählte Elemente Der Programmcode: Public Class Form1 [...] Private Sub cmdAnzeigen_Click(...) Handles ... lblAnzeige.Text = "" For Each s As String In lstSpeisen.SelectedItems lblAnzeige.Text &= s & vbCrLf Next s End Sub End Class Listing 2.32 Projekt »ListenfeldMehrfachauswahl« 2.7.7 Mehrfachauswahl SelectionMode Sie können es dem Benutzer ermöglichen, gleichzeitig mehrere Einträge aus einer Liste auszuwählen, wie er das auch aus anderen Windows-Programmen kennt. Dazu wird zur Entwicklungszeit die Eigenschaft SelectionMode auf den Wert MultiExtended gesetzt. Der Benutzer kann anschließend mithilfe der (Strg)-Taste mehrere einzelne Elemente auswählen oder mithilfe der (ª)-Taste (wie für Großbuchstaben) einen zusammenhängenden Bereich von Elementen markieren. Hinweis: Nach dem Einfügen einer neuen ListBox in ein Formular steht die Eigenschaft SelectionMode zunächst auf dem Standardwert One, d. h., es lässt sich nur ein Element auswählen. SelectedIndices 108 Die Eigenschaften SelectedIndices und SelectedItems beinhalten die Nummern bzw. die Einträge der ausgewählten Elemente. Sie ähneln in ihrem Zur Erläuterung: 왘 Das Listenfeld ist bereits gefüllt, siehe Projekt ListenfeldFüllen. 왘 In der Prozedur cmdAnzeigen_Click() werden alle ausgewählten Elemente mithilfe einer For-Each-Schleife durchlaufen und ausgegeben. 2.7.8 Kombinationsfelder Das Steuerelement Kombinationsfeld (ComboBox) vereinigt die Merkmale eines Listenfelds mit denen eines Textfelds. Der Benutzer kann einen Eintrag aus dem Listenfeldbereich auswählen oder im Textfeldbereich eingeben. Das Kombinationsfeld hat im Wesentlichen die Eigenschaften und Methoden des Listenfelds. 109 2 2.7 Grundlagen DropDownStyle Sie können mithilfe der Eigenschaft DropDownStyle zwischen drei Typen von Kombinationsfeldern wählen: 왘 DropDown: Das ist der Standard – die Auswahl aus einer Liste (Aufklappen der Liste mit der Pfeiltaste) oder Eingabe in das Textfeld. Das Kombinationsfeld hat die Größe einer TextBox. Schleifen und Steuerelemente lblAnzeige3.Text = cmbWerkzeug3.Text End Sub End Class 2 Listing 2.33 Projekt »Kombinationsfeld« 왘 DropDownList: Die Auswahl ist begrenzt auf die Einträge der aufklappbaren Liste, also ohne eigene Eingabemöglichkeit. Dieser Typ Kombinationsfeld verhält sich demnach wie ein Listenfeld, ist allerdings so klein wie eine TextBox. Ein Listenfeld ließe sich zwar auch auf diese Größe verkleinern, aber die Scrollpfeile sind dann sehr klein. 왘 Simple: Die Liste ist immer geöffnet und wird bei Bedarf mit einer Bildlaufleiste versehen. Wie beim Typ DropDown ist die Auswahl aus der Liste oder die Eingabe in das Textfeld möglich. Beim Erstellen eines solchen Kombinationsfelds lässt sich die Höhe wie bei ListBoxen einstellen. Die Eigenschaft SelectionMode gibt es bei Kombinationsfeldern nicht. Das folgende Programm im Projekt Kombinationsfeld führt alle drei Typen von Kombinationsfeldern vor, siehe auch Abbildung 2.46. Public Class Form1 Private Sub Form1_Load(...) Handles MyBase.Load cmbWerkzeug1.Items.Add("Zange") cmbWerkzeug1.Items.Add("Hammer") cmbWerkzeug1.Items.Add("Bohrer") cmbWerkzeug1.Items.Add("Schraubendreher") [... Das Gleiche für die beiden anderen Kombinationsfelder ...] End Sub Private Sub cmdAnzeigen1_Click(...) Handles ... lblAnzeige1.Text = cmbWerkzeug1.Text End Sub Abbildung 2.46 Drei verschiedene Kombinationsfelder Zur Erläuterung: 왘 Das erste Kombinationsfeld hat den DropDownStyle DropDown. Hat der Benutzer einen Eintrag ausgewählt, erscheint dieser in der TextBox des Kombinationsfelds. Falls er selbst einen Eintrag eingibt, erscheint dieser ebenfalls dort. Die Eigenschaft Text enthält den Inhalt dieser TextBox, also immer den Wert des Kombinationsfelds. 왘 Das zweite Kombinationsfeld hat den DropDownStyle DropDownList. Es gibt also keine TextBox. Wie beim Listenfeld ermitteln Sie die Auswahl des Benutzers über die Eigenschaft SelectedItem. 왘 Das dritte Kombinationsfeld hat den DropDownStyle Simple. Im Programm kann es genauso wie das erste Kombinationsfeld behandelt werden. Die Eigenschaft Text beinhaltet also immer den Wert des Kombinationsfelds. Übung Private Sub cmdAnzeigen2_Click(...) Handles ... lblAnzeige2.Text = cmbWerkzeug2.SelectedItem End Sub Private Sub cmdAnzeigen3_Click(...) Handles ... 110 Schreiben Sie ein Programm, das zwei Listenfelder beinhaltet, in denen jeweils mehrere Elemente markiert werden können. Zwischen den beiden Listenfeldern befinden sich zwei Buttons, jeweils mit einem Pfeil nach rechts bzw. nach links, siehe Abbildung 2.47. Bei Betätigung eines der Übung ÜListenfeld 111 2 Grundlagen beiden Buttons sollen die ausgewählten Elemente in Pfeilrichtung aus der einen Liste in die andere Liste verschoben werden, siehe Abbildung 2.48. Abbildung 2.47 Liste vor dem Verschieben Abbildung 2.48 Liste nach dem Verschieben Bei der Lösung kann neben der Eigenschaft SelectedItems z. B. auch die Eigenschaft SelectedIndices genutzt werden. Eine solche Auflistung beinhaltet dann nicht die ausgewählten Einträge, sondern deren Indizes. Mit dem Löschen mehrerer Einträge aus einem Listenfeld sollten Sie vom Ende der Liste her beginnen. Der Grund hierfür ist: Löschen Sie eines der vorderen Elemente zuerst, stimmen die Indizes in der Auflistung SelectedIndices nicht mehr. 112 Anhang B Lösungen der Übungsaufgaben Die Bearbeitung der Beispiele, das Verständnis für ihren Aufbau sowie das selbstä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 ÜName Public Class Form1 Private Sub cmdMyName_Click(sender As Object, e As EventArgs) Handles cmdMyName.Click lblMyName.Text = "Bodo Basic" End Sub Private Sub cmdEnde_Click(sender As Object, e As EventArgs) Handles cmdEnde.Click Close() End Sub End Class B.2 Lösungen der Übungsaufgaben aus Kapitel 2 B.2.1 Lösung ÜDatentypen Public Class Form1 Private Sub cmdAnzeigen_Click(...) Handles ... Dim nachname, vorname As String Dim strasse, plz, ort As String Dim alter As Integer Dim geburtsdatum As Date 517 B B.2 Lösungen der Übungsaufgaben aus Kapitel 2 Lösungen der Übungsaufgaben B.2.3 Lösung ÜRechenoperatoren nachname = "Basic" vorname = "Bodo" strasse = "Bergstraße 34" plz = "09445" ort = "Brunnstadt" alter = 27 geburtsdatum = "18.05.1988" lblA.Text = "Adresse: " & vbCrLf & vorname & " " & nachname & vbCrLf & strasse & vbCrLf & plz & " " & ort & vbCrLf & vbCrLf & "geb.: " & geburtsdatum & vbCrLf & "Alter: " & alter End Sub End Class B.2.2 Lösung ÜGültigkeitsbereich Public Class Form1 Private x As Double Private Sub cmdAnzeigen1_Click(...) Handles ... Dim y As Double y = y + 0.1 x = x + 0.1 lblA.Text = "x: " & x & vbCrLf & "y: " & y End Sub Private Sub cmdAnzeigen2_Click(...) Handles ... Dim z As Double z = z + 0.1 x = x + 0.1 lblA.Text = "x: " & x & vbCrLf & "z: " & z End Sub End Class 518 Public Class Form1 Private Sub cmdAnzeigen1_Click(...) Handles ... Dim x As Double x = 3 * -2.5 + 4 * 2 lblA.Text = x End Sub Private Sub cmdAnzeigen2_Click(...) Handles ... Dim x As Double x = 3 * (-2.5 + 4) * 2 lblA.Text = x End Sub End Class B.2.4 Lösung ÜVergleichsoperatoren Public Class Form1 Private Sub cmdAnzeigen1_Click(...) Handles ... Dim p As Boolean p = 12 - 3 >= 4 * 2.5 lblA.Text = p End Sub Private Sub cmdAnzeigen2_Click(...) Handles ... Dim p As Boolean p = "Maier" Like "M??er" lblA.Text = p End Sub End Class B.2.5 Lösung ÜLogischeOperatoren Public Class Form1 Private Sub cmdAnzeigen1_Click(...) Handles ... Dim p As Boolean p = 4 > 3 And -4 > -3 lblA.Text = p End Sub 519 B B.2 Lösungen der Übungsaufgaben aus Kapitel 2 Lösungen der Übungsaufgaben Public Class Form1 Private Sub cmdHakenAus_Click(...) Handles ... h.Height = h.Height + 10 End Sub Private Sub cmdAnzeigen2_Click(...) Handles ... Dim p As Boolean p = 4 > 3 Or -4 > -3 lblA.Text = p End Sub End Class Private Sub cmdHakenEin_Click(...) Handles ... h.Height = h.Height - 10 End Sub B.2.6 Lösung ÜOperatoren 1: False, 2: True, 3: True, 4: True, 5: True, 6: False, 7: True, 8: False B.2.7 Lösung ÜPanelZeitgeber Public Class Form1 Private Sub cmdStart_Click(...) Handles ... tim1.Enabled = True End Sub Private Sub tim1_Tick(...) Handles tim1.Tick pan1.Location = New Point(pan1.Location.X pan1.Location.Y pan2.Location = New Point(pan2.Location.X pan2.Location.Y pan3.Location = New Point(pan3.Location.X pan3.Location.Y pan4.Location = New Point(pan4.Location.X pan4.Location.Y End Sub End Class B.2.8 Lösung ÜKran Bezeichnungen: 왘 f: Fundament 왘 s: senkrechtes Hauptelement 왘 a: waagerechter Ausleger 왘 h: senkrechter Haken am Ausleger 520 Private Sub cmdAuslegerAus_Click(...) Handles ... a.Width = a.Width + 10 a.Location = New Point(a.Location.X - 10, a.Location.Y) h.Location = New Point(h.Location.X - 10, h.Location.Y) End Sub Private Sub cmdAuslegerEin_Click(...) Handles ... a.Width = a.Width - 10 a.Location = New Point(a.Location.X + 10, a.Location.Y) h.Location = New Point(h.Location.X + 10, h.Location.Y) End Sub + + + + 5, 5) 5, 5) 5, 5) 5, 5) Private Sub cmdKranRechts_Click(...) Handles ... f.Location = New Point(f.Location.X + 10, f.Location.Y) s.Location = New Point(s.Location.X + 10, s.Location.Y) a.Location = New Point(a.Location.X + 10, a.Location.Y) h.Location = New Point(h.Location.X + 10, h.Location.Y) End Sub Private Sub cmdKranLinks_Click(...) Handles ... f.Location = New Point(f.Location.X - 10, f.Location.Y) s.Location = New Point(s.Location.X - 10, s.Location.Y) a.Location = New Point(a.Location.X - 10, a.Location.Y) h.Location = New Point(h.Location.X - 10, h.Location.Y) End Sub Private Sub cmdKranAus_Click(...) Handles ... s.Height = s.Height + 10 s.Location = New Point(s.Location.X, s.Location.Y - 10) a.Location = New Point(a.Location.X, a.Location.Y - 10) h.Location = New Point(h.Location.X, h.Location.Y - 10) 521 B B.2 Lösungen der Übungsaufgaben aus Kapitel 2 Lösungen der Übungsaufgaben End Sub Private Sub cmdKranEin_Click(...) Handles ... s.Height = s.Height - 10 s.Location = New Point(s.Location.X, s.Location.Y + 10) a.Location = New Point(a.Location.X, a.Location.Y + 10) h.Location = New Point(h.Location.X, h.Location.Y + 10) End Sub End Class Case Is <= 30000 steuersatz = 20 Case Else steuersatz = 25 End Select steuerbetrag = gehalt * steuersatz / 100 lblSteuerbetrag.Text = steuerbetrag End Sub End Class B.2.9 Lösung ÜSteuerbetrag, zwei Möglichkeiten Public Class Form1 Private Sub cmdBerechnen1_Click(...) Handles ... Dim gehalt, steuersatz, steuerbetrag As Double gehalt = Convert.ToDouble(txtGehalt.Text) If gehalt <= 12000 Then steuersatz = 12 ElseIf gehalt <= 20000 Then steuersatz = 15 ElseIf gehalt <= 30000 Then steuersatz = 20 Else steuersatz = 25 End If steuerbetrag = gehalt * steuersatz / 100 lblSteuerbetrag.Text = steuerbetrag End Sub Private Sub cmdBerechnen2_Click(...) Handles ... Dim gehalt, steuersatz, steuerbetrag As Double gehalt = Convert.ToDouble(txtGehalt.Text) Select Case gehalt Case Is <= 12000 steuersatz = 12 Case Is <= 20000 steuersatz = 15 522 B.2.10 Lösung ÜKranVerzweigung Bezeichnungen: 왘 f: Fundament 왘 s: senkrechtes Hauptelement 왘 a: waagerechter Ausleger 왘 h: senkrechter Haken am Ausleger Public Class Form1 Private Sub cmdHakenAus_Click(...) Handles ... If h.Location.Y + h.Height + 5 < f.Location.Y Then h.Height = h.Height + 10 End If End Sub Private Sub cmdHakenEin_Click(...) Handles ... If h.Height > 15 Then h.Height = h.Height - 10 End If End Sub Private Sub cmdAuslegerAus_Click(...) Handles ... If a.Location.X > 15 Then a.Width = a.Width + 10 a.Location = New Point(a.Location.X - 10, a.Location.Y) h.Location = New Point(h.Location.X - 10, h.Location.Y) End If End Sub 523 B B.2 Lösungen der Übungsaufgaben aus Kapitel 2 Lösungen der Übungsaufgaben Private Sub cmdAuslegerEin_Click(...) Handles ... If a.Width > 30 Then a.Width = a.Width - 10 a.Location = New Point(a.Location.X + 10, a.Location.Y) h.Location = New Point(h.Location.X + 10, h.Location.Y) End If End Sub h.Location = New Point(h.Location.X, h.Location.Y + 10) End If End Sub End Class B.2.11 Lösung ÜKranOptionen Bezeichnungen: Private Sub cmdKranRechts_Click(...) Handles ... If f.Location.X < 215 Then f.Location = New Point(f.Location.X + 10, s.Location = New Point(s.Location.X + 10, a.Location = New Point(a.Location.X + 10, h.Location = New Point(h.Location.X + 10, End If End Sub Private Sub cmdKranLinks_Click(...) Handles If f.Location.X > 15 And a.Location.X > f.Location = New Point(f.Location.X s.Location = New Point(s.Location.X a.Location = New Point(a.Location.X h.Location = New Point(h.Location.X End If End Sub 왘 f: Fundament f.Location.Y) s.Location.Y) a.Location.Y) h.Location.Y) ... 15 Then - 10, f.Location.Y) - 10, s.Location.Y) - 10, a.Location.Y) - 10, h.Location.Y) Private Sub cmdKranAus_Click(...) Handles ... If s.Location.Y > 15 Then s.Height = s.Height + 10 s.Location = New Point(s.Location.X, s.Location.Y - 10) a.Location = New Point(a.Location.X, a.Location.Y - 10) h.Location = New Point(h.Location.X, h.Location.Y - 10) End If End Sub Private Sub cmdKranEin_Click(...) Handles ... If h.Location.Y + h.Height + 5 < f.Location.Y Then s.Height = s.Height - 10 s.Location = New Point(s.Location.X, s.Location.Y + 10) a.Location = New Point(a.Location.X, a.Location.Y + 10) 524 왘 s: senkrechtes Hauptelement 왘 a: waagerechter Ausleger 왘 h: senkrechter Haken am Ausleger Public Class Form1 Private Sub cmdStart_Click(...) Handles ... tim1.Enabled = True End Sub Private Sub cmdStop_Click(...) Handles ... tim1.Enabled = False End Sub Private Sub tim1_Tick(...) Handles tim1.Tick If optHakenAus.Checked Then If h.Location.Y + h.Height + 5 < f.Location.Y Then h.Height = h.Height + 10 Else tim1.Enabled = False End If ElseIf optHakenEin.Checked Then If h.Height > 15 Then h.Height = h.Height - 10 Else tim1.Enabled = False End If ElseIf optAuslegerAus.Checked Then If a.Location.X > 15 Then a.Width = a.Width + 10 a.Location = New Point(a.Location.X - 10, a.Location.Y) 525 B h.Location = New Point(h.Location.X - 10, h.Location.Y) Else tim1.Enabled = False End If ElseIf optAuslegerEin.Checked Then If a.Width > 25 Then a.Width = a.Width - 10 a.Location = New Point(a.Location.X + 10, a.Location.Y) h.Location = New Point(h.Location.X + 10, h.Location.Y) Else tim1.Enabled = False End If ElseIf optKranRechts.Checked Then If f.Location.X < 215 Then f.Location = New Point(f.Location.X + 10, f.Location.Y) s.Location = New Point(s.Location.X + 10, s.Location.Y) a.Location = New Point(a.Location.X + 10, a.Location.Y) h.Location = New Point(h.Location.X + 10, h.Location.Y) Else tim1.Enabled = False End If ElseIf optKranLinks.Checked Then If f.Location.X > 15 And a.Location.X > 15 Then f.Location = New Point(f.Location.X - 10, f.Location.Y) s.Location = New Point(s.Location.X - 10, s.Location.Y) a.Location = New Point(a.Location.X - 10, a.Location.Y) h.Location = New Point(h.Location.X - 10, h.Location.Y) Else tim1.Enabled = False 526 B.2 Lösungen der Übungsaufgaben aus Kapitel 2 Lösungen der Übungsaufgaben End If ElseIf optKranAus.Checked Then If s.Location.Y > 15 Then s.Height = s.Height + 10 s.Location = New Point(s.Location.X, s.Location.Y - 10) a.Location = New Point(a.Location.X, a.Location.Y - 10) h.Location = New Point(h.Location.X, h.Location.Y - 10) Else tim1.Enabled = False End If ElseIf optKranEin.Checked Then If h.Location.Y + h.Height + 5 < f.Location.Y Then s.Height = s.Height - 10 s.Location = New Point(s.Location.X, s.Location.Y + 10) a.Location = New Point(a.Location.X, a.Location.Y + 10) h.Location = New Point(h.Location.X, h.Location.Y + 10) Else tim1.Enabled = False End If End If End Sub End Class B.2.12 Lösung ÜForNext1 Public Class Form1 Private Sub cmdAnzeigen_Click(...) Handles ... Dim d As Double lblA.Text = "" For d = 35 To 20 Step -2.5 lblA.Text &= d & vbCrLf Next d End Sub End Class 527 B B.2.13 Lösung ÜForNext2 B.2.15 Lösung ÜZahlenraten Public Class Form1 Private Sub cmdAnzeigen_Click(...) Handles ... Dim d, summe, zähler, mittelwert As Double Public Class Form1 Private zahl As Integer summe = 0 zähler = 0 lblA.Text = "" For d = 35 To 20 Step -2.5 lblA.Text &= d & vbCrLf summe += d zähler += 1 Next d mittelwert = summe / zähler lblA.Text &= vbCrLf & "Summe: " & summe & vbCrLf & "Mittelwert: " & mittelwert & vbCrLf End Sub End Class B.2.14 Lösung ÜDoLoop Public Class Form1 Private Sub cmdHalbieren_Click(...) Handles ... Dim d As Double d = Convert.ToDouble(txtEingabe.Text) lblA.Text = "" Do While d > 0.001 d = d / 2 lblA.Text &= d & vbCrLf Loop End Sub End Class 528 B.2 Lösungen der Übungsaufgaben aus Kapitel 2 Lösungen der Übungsaufgaben Private Sub cmdPrüfen_Click(...) Handles ... Dim eingabe As Integer eingabe = Convert.ToInt32(txtEingabe.Text) If eingabe > zahl Then lblA.Text = "Die Zahl " & eingabe & " ist zu groß" ElseIf eingabe < zahl Then lblA.Text = "Die Zahl " & eingabe & " ist zu klein" Else lblA.Text = "Die Zahl " & eingabe & " stimmt" End If End Sub Private Sub Form1_Load(...) Handles MyBase.Load Randomize() zahl = Math.Floor(Rnd() * 100) + 1 End Sub End Class B.2.16 Lösung ÜSteuertabelle Public Class Form1 Private Sub cmdAnzeigen_Click(...) Handles ... Dim gehalt As Double Dim steuersatz As Double Dim steuerbetrag As Double Dim netto As Double lblA.Text = "" For gehalt = 5000 To 35000 Step 3000 If gehalt <= 12000 Then steuersatz = 12 ElseIf gehalt <= 20000 Then steuersatz = 15 ElseIf gehalt <= 30000 Then steuersatz = 20 529 B B.3 Lösungen der Übungsaufgaben aus Kapitel 4 Lösungen der Übungsaufgaben Else steuersatz = 25 End If steuerbetrag = gehalt * steuersatz / 100 netto = gehalt - steuerbetrag lblA.Text &= gehalt & " €, " & steuersatz & " %, " & steuerbetrag & " €, " & netto & " €" & vbCrLf Next gehalt End Sub End Class B.2.17 Lösung ÜListenfeld Public Class Form1 Private Sub Form1_Load(...) Handles MyBase.Load lstLinks.Items.Add("Malta") lstLinks.Items.Add("Zypern") lstLinks.Items.Add("Slowenien") lstLinks.Items.Add("Estland") lstLinks.Items.Add("Rumänien") lstRechts.Items.Add("Belgien") lstRechts.Items.Add("Spanien") lstRechts.Items.Add("Italien") lstRechts.Items.Add("Portugal") lstRechts.Items.Add("Dänemark") End Sub Private Sub cmdRechts_Click(...) Handles ... For Each s As String In lstLinks.SelectedItems lstRechts.Items.Add(s) Next s Dim i As Integer For i = lstLinks.SelectedItems.Count - 1 To 0 Step -1 lstLinks.Items.RemoveAt(lstLinks.SelectedIndices(i)) Next i End Sub 530 Private Sub cmdLinks_Click(...) Handles ... For Each s As String In lstRechts.SelectedItems lstLinks.Items.Add(s) Next s Dim i As Integer For i = lstRechts.SelectedItems.Count - 1 To 0 Step -1 lstRechts.Items.RemoveAt(lstRechts.SelectedIndices(i)) Next i End Sub End Class B.3 Lösungen der Übungsaufgaben aus Kapitel 4 B.3.1 Lösung ÜEnabled Public Class Form1 Private Sub Form1_Load(...) Handles MyBase.Load lstLand.Items.Add("Liechtenstein") lstLand.Items.Add("Malta") lstLand.Items.Add("Andorra") lstLand.Items.Add("San Marino") lstLand.Items.Add("Monaco") End Sub Private Sub lstLand_SelectedIndexChanged(...) _ Handles lstLand.SelectedIndexChanged If lstLand.SelectedItems.Count > 0 Then cmdLöschen.Enabled = True Else cmdLöschen.Enabled = False End If End Sub Private Sub cmdLöschen_Click(...) Handles ... lstLand.Items.RemoveAt(lstLand.SelectedIndex) End Sub End Class 531 Auf einen Blick Auf einen Blick 1 Einführung ................................................................................................................... 17 2 Grundlagen .................................................................................................................. 41 3 Fehlerbehandlung ..................................................................................................... 113 4 Erweiterte Grundlagen ............................................................................................ 125 5 Objektorientierte Programmierung .................................................................... 187 6 Wichtige Klassen in .NET ......................................................................................... 239 7 Weitere Elemente eines Windows-Programms .............................................. 311 8 Datenbankanwendungen mit ADO.NET ............................................................ 365 9 Internetanwendungen mit ASP.NET ................................................................... 419 10 Zeichnen mit GDI+ .................................................................................................... 445 11 Beispielprojekte ......................................................................................................... 461 12 Windows Presentation Foundation .................................................................... 485 Inhalt 1 Einführung 17 1.1 Aufbau dieses Buchs .............................................................................................................. 17 1.2 Visual Studio 2015 ................................................................................................................... 17 1.3 Mein erstes Windows-Programm .................................................................................... 18 1.4 Visual-Basic-Entwicklungsumgebung ........................................................................... 19 1.4.1 Ein neues Projekt ...................................................................................................... 19 1.4.2 Einfügen von Steuerelementen ........................................................................... 21 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 ....................................................................................... Projekt schließen, Projekt öffnen ........................................................................ Übung ........................................................................................................................... Regeln für Zeilenumbrüche .................................................................................. 22 25 25 27 29 29 30 30 31 31 1.5 Arbeiten mit Steuerelementen ......................................................................................... 32 1.5.1 1.5.2 Steuerelemente formatieren ................................................................................ Steuerelemente kopieren ...................................................................................... 32 34 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 ........................................................ 34 37 37 38 2 Grundlagen 41 2.1 Variablen und Datentypen .................................................................................................. 41 2.1.1 2.1.2 2.1.3 41 42 42 Namen und Werte ................................................................................................... Deklarationen ............................................................................................................ Datentypen ................................................................................................................. 5 Inhalt Inhalt 2.1.4 2.1.5 2.1.6 2.2 2.3 2.4 2.5 2.6 2.7 Gültigkeitsbereich .................................................................................................... Konstanten ................................................................................................................. Enumerationen ......................................................................................................... 45 48 50 Operatoren ................................................................................................................................. 51 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 .................................................................................... 52 54 55 56 57 57 Einfache Steuerelemente .................................................................................................... 59 2.3.1 2.3.2 2.3.3 2.3.4 Panel ............................................................................................................................. Zeitgeber ..................................................................................................................... Textfelder .................................................................................................................... Zahlenauswahlfeld .................................................................................................. 59 61 64 68 Verzweigungen ........................................................................................................................ 69 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 Einzeiliges If ... Then ... Else .................................................................................... If...Then...Else-Block ................................................................................................. Select Case .................................................................................................................. Funktion IIf ................................................................................................................. Funktion Choose ....................................................................................................... 70 72 73 74 75 2.4.6 Übungen ..................................................................................................................... 76 Verzweigungen und Steuerelemente ............................................................................ 76 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 Kontrollkästchen ...................................................................................................... Optionsschaltfläche ................................................................................................ Mehrere Ereignisse in einer Prozedur behandeln ......................................... Mehrere Gruppen von Optionsschaltflächen ................................................. Prozedur ohne Ereignis, Modularisierung ....................................................... Schieberegler ............................................................................................................. 77 79 82 83 86 87 Schleifen ...................................................................................................................................... 89 2.6.1 2.6.2 2.6.3 2.6.4 2.6.5 89 92 96 96 97 Schleifen und Steuerelemente .......................................................................................... 100 2.7.1 6 For ... Next ................................................................................................................... Do ... Loop .................................................................................................................... Ein Würfel ................................................................................................................... With .............................................................................................................................. Übungen ..................................................................................................................... Listenfeld .................................................................................................................... 100 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 2.7.8 Listenfeld füllen ........................................................................................................ Wichtige Eigenschaften ......................................................................................... For Each … In … ........................................................................................................... Wechsel der Auswahl .............................................................................................. Wichtige Methoden ................................................................................................. Mehrfachauswahl .................................................................................................... Kombinationsfelder ................................................................................................. 100 101 103 104 105 108 109 3 Fehlerbehandlung 3.1 Entwicklung eines Programms .......................................................................................... 113 3.2 Fehlerarten ................................................................................................................................. 114 3.3 Syntaxfehler und IntelliSense ............................................................................................ 115 3.4 3.5 113 Laufzeitfehler und Exception Handling ......................................................................... 117 3.4.1 3.4.2 Programm mit Laufzeitfehlern ............................................................................ 117 Einfaches Exception Handling ............................................................................. 119 3.4.3 Erweitertes Exception Handling .......................................................................... 121 Logische Fehler und Debugging ........................................................................................ 122 3.5.1 3.5.2 Haltepunkte und Einzelschrittverfahren .......................................................... 122 Überwachungsfenster ............................................................................................ 123 4 Erweiterte Grundlagen 4.1 Steuerelemente aktivieren ................................................................................................. 125 4.1.1 4.1.2 4.2 Ereignis Enter ............................................................................................................. 125 Eigenschaften Enabled und Visible .................................................................... 128 Bedienung per Tastatur ........................................................................................................ 131 4.2.1 4.2.2 4.3 125 Eigenschaften TabIndex und TabStop .............................................................. 131 Tastenkombination für Steuerelemente .......................................................... 132 Ereignisgesteuerte Programmierung ............................................................................. 133 4.3.1 4.3.2 4.3.3 Eine Ereigniskette ..................................................................................................... 133 Endlose Ereignisketten ........................................................................................... 135 Textfelder koppeln ................................................................................................... 136 7 Inhalt Inhalt 4.4 4.5 Mehrere Formulare ................................................................................................................ 138 5.5 4.4.1 142 5.6 Allgemeine Code-Module ...................................................................................... Datenfelder ................................................................................................................................ 144 4.5.1 4.5.2 4.5.3 4.5.4 4.5.5 4.5.6 Eindimensionale Datenfelder .............................................................................. Ein Feld durchsuchen .............................................................................................. Weitere Feld-Operationen .................................................................................... Mehrdimensionale Datenfelder .......................................................................... Datenfelder initialisieren ...................................................................................... Datenfelder sind dynamisch ................................................................................ 144 146 148 150 154 155 4.6 Benutzerdefinierte Datentypen ....................................................................................... 158 4.7 Prozeduren und Funktionen ............................................................................................... 161 4.8 4.7.1 4.7.2 Prozeduren ................................................................................................................. Übergabe per Referenz ........................................................................................... 162 164 4.7.3 4.7.4 4.7.5 4.7.6 4.7.7 4.7.8 Funktionen ................................................................................................................. Optionale Argumente ............................................................................................. Beliebig viele Argumente ...................................................................................... Datenfelder als Argumente .................................................................................. Rekursiver Aufruf ..................................................................................................... Übungen zu Prozeduren und Funktionen ........................................................ 167 169 171 173 175 177 Konsolenanwendung ............................................................................................................ 178 4.8.1 4.8.2 4.8.3 4.8.4 4.8.5 4.8.6 Anwendung erzeugen ............................................................................................ Ein- und Ausgabe von Text ................................................................................... Eingabe einer Zahl ................................................................................................... Erfolgreiche Eingabe einer Zahl .......................................................................... Ausgabe formatieren .............................................................................................. Aufruf von der Kommandozeile .......................................................................... 178 178 180 181 182 183 Objektorientierte Programmierung 187 5.1 Was ist Objektorientierung? .............................................................................................. 187 5.2 Klasse, Eigenschaft, Methode, Objekt ........................................................................... 188 5.2.1 191 Objektverweis und Instanz ................................................................................... 5.3 Eigenschaftsmethode ........................................................................................................... 193 5.4 Konstruktor ................................................................................................................................ 195 8 Referenzen, Vergleiche und Typen .................................................................................. 200 5.6.1 5.6.2 5.6.3 5.6.4 5.6.5 Referenzen .................................................................................................................. Operator Is .................................................................................................................. Objekte vergleichen ................................................................................................. Typ eines Objekts ermitteln .................................................................................. Typ eines Objekts durch Vergleich ermitteln .................................................. 200 201 202 204 205 5.7 Delegates .................................................................................................................................... 205 5.8 Statische Elemente ................................................................................................................. 208 5.9 Vererbung ................................................................................................................................... 211 5.10 Konstruktoren bei Vererbung ............................................................................................ 215 5.11 Polymorphie ............................................................................................................................... 217 5.12 Schnittstellen ............................................................................................................................ 221 5.13 Generische Typen .................................................................................................................... 225 5.13.1 5.13.2 5.13.3 5.14 6 Eine Liste von Zeichenketten ................................................................................ 225 Eine Liste von Objekten .......................................................................................... 228 Ein Dictionary von Objekten ................................................................................. 232 Eigene Klassenbibliotheken ................................................................................................ 235 5.14.1 5.14.2 6.1 5 Namensräume .......................................................................................................................... 198 DLL erstellen ............................................................................................................... 235 DLL nutzen .................................................................................................................. 237 Wichtige Klassen in .NET 239 Klasse String für Zeichenketten ........................................................................................ 239 6.1.1 6.1.2 Eigenschaften der Klasse String .......................................................................... 240 Trimmen ...................................................................................................................... 242 6.1.3 6.1.4 6.1.5 6.1.6 6.1.7 6.1.8 6.1.9 Splitten ......................................................................................................................... Suchen .......................................................................................................................... Einfügen ...................................................................................................................... Löschen ........................................................................................................................ Teilzeichenkette ermitteln .................................................................................... Zeichen ersetzen ....................................................................................................... Ausgabe formatieren .............................................................................................. 243 245 248 250 251 253 254 9 Inhalt Inhalt 6.2 6.2.1 6.2.2 6.2.3 6.3 6.4 7.1.5 7.1.6 Datum und Uhrzeit ................................................................................................................. 256 Eigenschaften von DateTime ............................................................................... Rechnen mit Datum und Uhrzeit ....................................................................... DateTimePicker ......................................................................................................... 256 259 261 Dateien und Verzeichnisse .................................................................................................. 264 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.3.11 Lesen aus einer Textdatei ...................................................................................... Schreiben in eine Textdatei .................................................................................. Sicheres Lesen aus einer Textdatei .................................................................... Sicheres Schreiben in eine Textdatei ................................................................. Datei mit wahlfreiem Zugriff ............................................................................... 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 .............................................................. 265 267 268 271 272 279 280 281 282 283 284 XML-Dateien ............................................................................................................................. 286 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 286 288 289 291 293 Aufbau von XML-Dateien ...................................................................................... Schreiben in eine XML-Datei ................................................................................ Lesen aus einer XML-Datei .................................................................................... Schreiben von Objekten ......................................................................................... Lesen von Objekten ................................................................................................. 7.2 Kontextmenü ............................................................................................................................ 320 7.2.1 7.2.2 7.3 Erstellung des Kontextmenüs .............................................................................. 320 Code des Kontextmenüs ........................................................................................ 321 Symbolleiste .............................................................................................................................. 322 7.3.1 7.3.2 7.4 Schriftgröße ................................................................................................................ 318 Schriftstil ..................................................................................................................... 319 Erstellung der Symbolleiste .................................................................................. 323 Code der Symbolleiste ............................................................................................ 324 Statusleiste ................................................................................................................................. 327 7.4.1 7.4.2 Erstellung der Statusleiste .................................................................................... 327 Code der Statusleiste .............................................................................................. 328 7.5 Eingabe-Dialogfeld ................................................................................................................. 329 7.6 Ausgabe-Dialogfeld ................................................................................................................ 333 7.7 Standarddialogfelder ............................................................................................................. 339 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 ........................................................................ 339 341 343 344 345 7.8 Steuerelement ListView ....................................................................................................... 347 6.5 Rechnen mit der Klasse Math ............................................................................................ 295 7.9 Steuerelement Chart .............................................................................................................. 350 6.6 Zugriff auf MS Office ............................................................................................................. 300 7.10 Steuerelement DataGridView ........................................................................................... 355 6.6.1 6.6.2 6.6.3 6.6.4 302 305 306 308 7.11 Lokalisierung ............................................................................................................................. 360 8 Datenbankanwendungen mit ADO.NET MS Word-Datei erstellen ....................................................................................... MS Word-Datei lesen .............................................................................................. MS Excel-Datei erstellen ........................................................................................ MS Excel-Datei lesen ............................................................................................... 8.1 7 Weitere Elemente eines Windows-Programms 7.1 Hauptmenü ................................................................................................................................ 311 7.1.1 7.1.2 7.1.3 7.1.4 10 Erstellung des Hauptmenüs ................................................................................. Code des Hauptmenüs ........................................................................................... Klasse Font ................................................................................................................. Schriftart ..................................................................................................................... 311 311 313 316 316 Was sind relationale Datenbanken? ............................................................................... 365 8.1.1 8.1.2 8.1.3 8.1.4 8.2 365 Beispiel »Lager« ......................................................................................................... Indizes .......................................................................................................................... Relationen ................................................................................................................... Übungen ...................................................................................................................... 366 369 370 375 Anlegen einer Datenbank in MS Access ........................................................................ 376 8.2.1 Aufbau von MS Access ............................................................................................ 376 11 Inhalt Inhalt 378 382 9.3 Datenbankzugriff mit Visual Basic .................................................................................. 382 9.4 Formatierung von Internetseiten ..................................................................................... 427 8.3.1 8.3.2 8.3.3 8.3.4 8.3.5 8.3.6 8.3.7 9.5 Senden und Auswerten von Formulardaten ............................................................... 428 9.6 Weitere Formularelemente ................................................................................................ 431 9.7 Ein Kalenderelement .............................................................................................................. 434 9.8 ASP.NET und ADO.NET .......................................................................................................... 436 9.9 Datenbank im Internet ändern ......................................................................................... 439 10 Zeichnen mit GDI+ 10.1 Grundlagen von GDI+ ............................................................................................................ 445 10.2 Linie, Rechteck, Polygon und Ellipse zeichnen ........................................................... 445 8.2.2 8.2.3 8.3 8.4 8.6 8.7 Beispiel-Datenbank ................................................................................................. Ablauf eines Zugriffs ............................................................................................... Verbindung ................................................................................................................ SQL-Befehl .................................................................................................................. OleDb ........................................................................................................................... Auswahlabfrage ....................................................................................................... Aktionsabfrage .......................................................................................................... 383 384 384 384 385 385 388 Fehlerhafte Programmierung .............................................................................. 426 390 395 395 396 396 Ein Verwaltungsprogramm ................................................................................................ 398 8.5.1 8.5.2 8.5.3 8.5.4 Initialisierung ............................................................................................................ Alle Datensätze sehen ............................................................................................ Datensatz einfügen ................................................................................................. Datensatz ändern .................................................................................................... 398 399 401 403 8.5.5 Datensatz löschen ................................................................................................... 406 8.5.6 Datensatz suchen .................................................................................................... 408 10.3 Text schreiben ........................................................................................................................... 451 Abfragen über mehrere Tabellen ..................................................................................... 410 10.4 Bilder darstellen ....................................................................................................................... 453 Verbindung zu MySQL ........................................................................................................... 415 10.5 Dauerhaft zeichnen ................................................................................................................ 455 10.6 Zeichnen einer Funktion ....................................................................................................... 457 11 Beispielprojekte 11.1 Spielprogramm Tetris ............................................................................................................ 461 .NET-Treiber ............................................................................................................... 415 9 Internetanwendungen mit ASP.NET 419 9.1 Grundlagen von Internetanwendungen ...................................................................... 419 9.1.1 9.1.2 9.1.3 419 420 421 Statische Internetanwendungen ........................................................................ Dynamische Internetanwendungen ................................................................. Vorteile von ASP.NET .............................................................................................. Ein lokaler Webserver ........................................................................................................... 421 9.2.1 12 9.3.1 Auswahl mit »SELECT« ........................................................................................... Ändern mit »UPDATE« ............................................................................................ Löschen mit »DELETE« ............................................................................................ Einfügen mit »INSERT« ........................................................................................... Typische Fehler in SQL ............................................................................................ 8.7.1 9.2 Eine erste ASP.NET-Anwendung ....................................................................................... 424 SQL-Befehle ................................................................................................................................ 390 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 Datenbankentwurf in MS Access 2013 .............................................................. Übungen ..................................................................................................................... Eine erste Internetanwendung ........................................................................... 422 10.2.1 10.2.2 10.2.3 10.2.4 10.2.5 10.2.6 11.1.1 11.1.2 11.1.3 11.1.4 11.1.5 Grundeinstellungen ................................................................................................ Linie ............................................................................................................................... Rechteck ....................................................................................................................... Polygon ........................................................................................................................ Ellipse ............................................................................................................................ Dicke und Farbe ändern, Zeichnung löschen .................................................. Spielablauf .................................................................................................................. Programmbeschreibung ........................................................................................ Steuerelemente ........................................................................................................ Initialisierung des Programms ............................................................................. Erzeugen eines neuen Panels ............................................................................... 445 446 447 448 448 449 450 461 461 462 463 464 466 13 Inhalt Inhalt 11.1.6 11.1.7 11.1.8 11.1.9 11.1.10 11.2 Der Zeitgeber ............................................................................................................. Panel löschen ............................................................................................................. Panel seitlich bewegen ........................................................................................... Panel nach unten bewegen .................................................................................. Pause ............................................................................................................................ 467 468 472 473 473 Lernprogramm Vokabeln ..................................................................................................... 474 11.2.1 11.2.2 11.2.3 11.2.4 11.2.5 11.2.6 11.2.7 474 476 476 477 479 481 482 Benutzung des Programms .................................................................................. Erweiterung des Programms ................................................................................ Initialisierung des Programms ............................................................................. Ein Test beginnt ........................................................................................................ Zwei Hilfsprozeduren ............................................................................................. Die Antwort prüfen ................................................................................................. Das Benutzermenü .................................................................................................. 12 Windows Presentation Foundation 485 12.1 Layout ........................................................................................................................................... 486 12.2 Steuerelemente ....................................................................................................................... 489 12.3 Frame-Anwendung ................................................................................................................. 492 12.4 Zweidimensionale Grafik .................................................................................................... 495 12.5 Dreidimensionale Grafik ...................................................................................................... 498 12.6 Animation ................................................................................................................................... 502 12.7 WPF und Windows Forms ................................................................................................... 505 12.7.1 12.7.2 505 507 Windows Forms in WPF ......................................................................................... WPF in Windows Forms ......................................................................................... Anhang A 14 A.4 A.5 B Weitergabe eigener Windows-Programme .................................................... 513 Konfigurationsdaten ............................................................................................... 515 Lösungen der Übungsaufgaben ........................................................................................ 517 B.1 B.2 B.3 B.4 Lösung der Übungsaufgabe aus Kapitel 1 ........................................................ Lösungen der Übungsaufgaben aus Kapitel 2 ................................................ Lösungen der Übungsaufgaben aus Kapitel 4 ................................................ Lösungen der Übungsaufgaben aus Kapitel 8 ................................................ 517 517 531 535 Index ............................................................................................................................................................... 537 511 Installation und technische Hinweise ............................................................................ 511 A.1 A.2 A.3 511 511 513 Installation von Visual Studio Community 2015 ............................................ Arbeiten mit einer Formularvorlage .................................................................. Arbeiten mit einer Projektvorlage ...................................................................... 15 Index Index ^ ......................................................................................... 52 ^=....................................................................................... 57 _ ....................................................................................... 392 ?.......................................................................................... 54 * ................................................................................... 52, 54 *=........................................................................................ 57 /.......................................................................................... 52 /= ....................................................................................... 57 \.......................................................................................... 52 & .............................................................. 37, 56, 132, 313 &=...................................................................................... 57 #............................................................................. 183, 256 % ...................................................................................... 392 + ......................................................................................... 52 +=....................................................................................... 57 < ................................................................................ 54, 391 <=.............................................................................. 54, 391 <>.............................................................................. 54, 391 -=........................................................................................ 57 = ......................................................................... 54, 57, 391 > ................................................................................ 54, 391 >=.............................................................................. 54, 391 1:1-Relation .................................................................. 370 1:n-Relation ....................................................... 368, 371 3D-Körper .................................................................... 498 A Abfrage Datenbank .............................................................. 377 accdb-Datei.................................................................. 378 Accessor........................................................................ 194 Acos() ............................................................................. 295 Add() ArrayList .................................................................. 401 Columns................................................................... 350 Controls ................................................................... 467 Datum und Uhrzeit ............................................. 259 Documents ............................................................. 303 generische Liste............................................ 225, 467 Items ......................................................................... 350 Listenfeld ................................................................. 100 Paragraphs ............................................................. 303 Add() (Forts.) Series ......................................................................... 353 SubItems.................................................................. 350 Tables........................................................................ 304 Worksheets ............................................................. 307 AddHandler ................................................................ 207 AddHours().................................................................. 259 Addition .......................................................................... 52 AddMilliseconds() .................................................... 259 AddMinutes() ............................................................. 259 AddMonths() .............................................................. 259 AddressOf .................................................................... 207 AddSeconds().............................................................. 259 AddXY()......................................................................... 353 AddYears() ................................................................... 259 ADO.NET....................................................................... 365 Aktionsabfrage .......................................................... 388 Aktivierungsreihenfolge ....................................... 131 AND (SQL) .................................................................... 392 And (VB) .......................................................................... 55 Anführungszeichen.................................................... 45 Angle LabelStyle................................................................ 354 Animation 3D-Körper................................................................ 502 Anweisung ..................................................................... 27 mehrere....................................................................... 70 mehrfach durchlaufen .......................................... 89 Anwendung mehrsprachig ........................................................ 360 MS Excel................................................................... 307 MS Word .................................................................. 303 weitergeben............................................................ 513 App.config ................................................................... 515 Append ......................................................................... 266 ArcSegment ................................................................ 497 args ................................................................................. 184 Argument .................................................................... 163 beliebig viele .......................................................... 171 optional ................................................................... 169 ArgumentOutOfRangeException ...................... 248 Arkusfunktion ........................................................... 295 Array, Klasse ............................................................... 148 As.............................................................................. 44, 167 537 Index Index Asin() ............................................................................. 295 asp:Calendar............................................................... 436 asp:Label ...................................................................... 428 ASP.NET........................................................................ 419 Programmierfehler .............................................. 426 Atan()............................................................................. 295 Attached Event.......................................................... 488 Attached Property.................................................... 488 AttributeCount XmlTextReader...................................................... 290 Aufzählung .................................................................... 50 Ausführbare Datei....................................................... 30 Ausgabe formatieren............................................................. 182 mehrzeilig.................................................................. 37 Ausgabe-Dialogfeld ................................................. 333 Auskommentierung .................................................. 29 Austauschformat...................................................... 243 Auswahlabfrage ........................................................ 385 Axis ................................................................................ 353 AxisX ChartArea ................................................................ 353 AxisY ChartArea ................................................................ 353 B BackColor........................................................................ 38 Basisklasse................................................................... 212 Methode erreichen ............................................... 213 Bedingung...................................................................... 69 Befehlsschaltfläche..................................................... 21 Bericht Datenbank............................................................... 377 Bezeichnungsfeld........................................................ 21 Beziehung........................................................... 365, 368 erstellen .................................................................... 381 Bézierkurve................................................................. 495 Bild in Zeichnung........................................................... 453 Bildlaufleiste ................................................................. 64 Bitmap .......................................................................... 350 body............................................................................... 423 Bookmarks Document................................................................ 304 Boolean............................................................................ 43 Border Style ................................................................... 24 538 Borders Table .......................................................................... 304 Breakpoint .................................................................. 122 Browser ........................................................................ 419 Brush ............................................................................. 445 Button.............................................................................. 21 ByRef ............................................................................. 165 Byte................................................................................... 42 ByVal ............................................................................. 166 C Calendar....................................................................... 436 Canvas .......................................................................... 487 Left.............................................................................. 488 Top ............................................................................. 488 Cascading Style Sheets........................................... 420 Case................................................................................... 73 Case Else.......................................................................... 73 Catch.............................................................................. 120 Ceiling() ........................................................................ 295 Cell Table .......................................................................... 304 Cells ............................................................................... 307 Worksheet................................................................ 307 Char ........................................................................ 43, 241 Characters ................................................................... 306 Chars ............................................................................. 240 Chart.............................................................................. 350 ChartAreas Chart.......................................................................... 353 ChartImageFormat .................................................. 354 ChartType Series.......................................................................... 353 CheckBox..................................................... 77, 431, 490 in Menü .................................................................... 316 Checked.................................................................... 77, 79 CheckedChanged.................................................. 77, 79 Child WindowsFormsHost............................................ 505 Choose() .......................................................................... 75 Class........................................................................ 26, 188 Clear() generische Liste ..................................................... 401 Graphics ................................................................... 450 Series.......................................................................... 353 ClickOnce-Verteilung ............................................. 513 Clone() ................................................................. 149, 222 Close().............................................................................. 28 Document ...................................................... 305, 308 Form ................................................................... 28, 141 OleDbConnection................................................. 384 StreamReader........................................................ 267 Workbook................................................................ 308 XmlTextReader ..................................................... 290 XmlTextWriter ...................................................... 289 Code-Ansicht Windows Forms ....................................................... 25 WPF............................................................................ 486 Code-Modul ...................................................... 142, 178 Codezeile auskommentieren .................................................. 29 editieren...................................................................... 27 lang............................................................................... 26 Collection..................................................................... 225 Color....................................................... 38, 88, 344, 345 Pen ............................................................................. 450 SolidBrush............................................................... 450 ColorDialog ................................................................. 344 ColumnIndex ............................................................. 359 Columns ....................................................................... 356 ListView.................................................................... 350 COM-Anwendung........................................... 303, 307 Combobox................................................................... 109 CommandText........................................................... 385 Common Controls ..................................................... 22 Connection.................................................................. 385 ConnectionString OleDBConnection ....................................... 384, 439 Sammlung .............................................................. 417 vor 2007................................................................... 388 Connector/NET.......................................................... 415 Console ......................................................................... 179 Const................................................................................ 49 Container .............................................................. 59, 423 Contains() generische Liste..................................................... 225 ContainsKey()............................................................. 234 ContainsValue()......................................................... 234 ContextMenuStrip ................................................... 320 Controls ........................................................................ 467 Add().......................................................................... 207 Remove().................................................................. 207 Convert ToDouble() ................................................................. 67 Convert (Forts.) ToInt32() ......................................................... 180, 332 Cos() ............................................................................... 295 Count Datenfeld................................................................. 172 generische Liste .................................................... 226 Items ......................................................................... 102 String ........................................................................ 245 COUNT() ....................................................................... 412 Create Öffnungsmodus........................................... 266, 268 CreateGraphics() ....................................................... 445 CreateObject() .................................................. 303, 307 CSS .................................................................................. 420 CSV-Datei ..................................................................... 243 CurrentUICulture ..................................................... 362 D Data Source ....................................................... 384, 416 DataBind().................................................................... 439 DataGrid....................................................................... 439 DataGridView............................................................. 355 CellEventArgs ........................................................ 359 ColumnCollection................................................ 356 Row............................................................................ 358 RowCollection ....................................................... 357 TextBoxColumn ................................................... 356 DataSource .................................................................. 439 Date ................................................................................... 43 Datei............................................................................... 264 Änderungszeitpunkt........................................... 280 Erzeugungszeitpunkt ......................................... 280 Information über ........................................ 270, 279 lesen ................................................................. 265, 273 löschen ..................................................................... 279 öffnen ....................................................................... 273 öffnen, Dialog........................................................ 339 schließen......................................................... 267, 273 schreiben ................................................................. 273 speichern, Dialog ................................................. 341 wahlfreier Zugriff................................................. 272 Zugriffszeitpunkt ................................................. 280 Daten speichern ................................................................. 264 Datenbank......................................................... 365, 474 erstellen ................................................................... 378 539 Index Index Datenbank (Forts.) im Internet .............................................................. 436 im Internet ändern............................................... 439 verknüpfte Abfrage.............................................. 410 Datenbankdatei ........................................................ 377 Datenbanksystem.................................................... 368 Datenfeld ..................................................................... 144 als Parameter......................................................... 173 Dimensionsgröße ................................................. 158 durchsuchen ................................................. 146, 149 eindimensional...................................................... 144 Größe ......................................................................... 172 initialisieren............................................................ 154 Klasse ........................................................................ 148 kopieren.................................................................... 149 mehrdimensional ................................................. 150 sortieren ................................................................... 149 Datenkapselung............................................... 189, 214 Datenpunkt ................................................................ 353 Datenreihe .................................................................. 352 Datensatz..................................................................... 366 ändern....................................................................... 395 Anzahl ....................................................................... 412 auswählen ............................................................... 390 einfügen ................................................................... 396 gruppieren............................................................... 413 löschen...................................................................... 395 sortieren ................................................................... 393 Summe...................................................................... 413 Datentyp ......................................................................... 42 benutzerdefiniert .................................................. 158 generisch.................................................................. 225 DateTime ..................................................................... 256 DateTimePicker......................................................... 261 DateTimePickerFormat ......................................... 261 Datum........................................................................... 256 berechnen ................................................................ 259 Bestandteil .............................................................. 257 prüfen........................................................................ 278 Datum und Uhrzeit eingeben................................................................... 261 Day ................................................................................. 257 DayOfWeek ................................................................. 257 DayOfYear ................................................................... 257 Debug............................................................................ 122 beenden ................................................... 67, 119, 423 Debuggen Konsolenanwendung.......................................... 185 540 DecimalPlaces Zahlenauswahlfeld ................................................ 68 default.aspx................................................................ 424 Delegate ....................................................................... 205 DELETE................................................................. 384, 395 DESC .............................................................................. 393 Description ................................................................. 343 Design-Ansicht WPF ............................................................................ 486 Detailtabelle ............................................................... 371 Dezimaltrennzeichen............................................. 403 Diagramm ................................................................... 350 DialogResult ...................................................... 334, 339 DialogResultOK......................................................... 341 Dictionary generisch.................................................................. 232 Dictionary(Of)............................................................ 233 Dim ......................................................................... 44, 145 Directory...................................................................... 279 Division........................................................................... 52 DLL ................................................................................. 235 erstellen .................................................................... 235 nutzen ....................................................................... 237 Do ...................................................................................... 92 Document MS Word................................................................... 303 Documents Application ............................................................. 303 Doppelklick.................................................................... 26 Doppelpunkt................................................................. 70 Double ............................................................................. 42 DrawEllipse() .............................................................. 449 DrawImage()............................................................... 453 DrawLine()................................................................... 447 DrawPolygon() .......................................................... 448 DrawRectangle() ....................................................... 448 DrawString() ............................................................... 453 DropDown .................................................................. 110 DropDownList ........................................................... 110 DropDownStyle ........................................................ 110 Dynamic Link Library............................................. 235 E E (Konstante).............................................................. 295 Eigenschaft ändern.................................................................. 20, 34 Eigenschaft (Forts.) Klasse........................................................................ 188 statisch..................................................................... 208 Eigenschaften-Fenster ....................................... 20, 23 Eigenschaftsmethode ............................................. 193 Ein- und Ausgabe nur Text.................................................................... 179 Eingabe Zahl............................................................................ 180 Zeichenkette.............................................................. 64 Eingabeaufforderung.............................................. 184 Eingabe-Dialogfeld................................................... 329 Eingabeformular....................................................... 428 Einzelschrittverfahren............................................ 123 ElementHost............................................................... 507 ElementPosition ....................................................... 353 Ellipse ............................................................................ 449 Else Block............................................................................. 72 einzeilig....................................................................... 70 Enabled Steuerelement ....................................................... 128 Timer......................................................................... 473 Zeitgeber..................................................................... 61 End Class ...................................................................... 188 End If................................................................................ 72 End Interface .............................................................. 222 End Select....................................................................... 73 End Structure ............................................................. 160 endofdoc Textmarke............................................................... 304 Enter............................................................................... 125 Entwicklung eines Programms ................................................. 113 Enum ............................................................................... 51 Enumeration ................................................................ 50 Environment .............................................................. 344 Equals() ............................................................... 202, 229 Ereignis .................................................................... 21, 25 mehrere....................................................................... 82 Ereigniskette............................................................... 133 endlos ....................................................................... 135 Ereignisliste ................................................................ 127 Ereignismethode Verweis auf ............................................................. 205 Ereignisprozedur ........................................................ 25 erzeugen .................................................................. 488 Eulersche Zahl ............................................................ 295 Event Routing ............................................................ 488 Event Trigger .............................................................. 502 Excel.Range ................................................................. 309 Exception Klasse........................................................................ 120 Exception Handling................................................. 117 ExecuteNonQuery()....................................... 385, 389 ExecuteReader() ........................................................ 385 exe-Datei............................................................... 30, 184 Exists() Directory ................................................................. 280 File.............................................................................. 270 Exit Do ............................................................................. 92 Exit For............................................................................. 90 Exit Function.............................................................. 167 Exit Sub......................................................................... 162 Exp()............................................................................... 295 eXtensible Application Markup Language..... 485 F Farbe wählen, Dialog ...................................................... 344 Fehler............................................................................. 114 logischer .................................................................. 122 Fehlerkorrektur ......................................................... 115 Feld Datenbanktabelle ................................................ 366 Feldname Datenbanktabelle ................................................ 366 File ........................................................................ 270, 279 FileClose()..................................................................... 273 FileGetObject()........................................................... 273 FileMode ...................................................................... 266 FileNames .................................................................... 339 FileOpen() .................................................................... 273 FilePutObject() ........................................................... 273 FileStream.................................................................... 265 FileSystemEntries().................................................. 280 FillEllipse() ................................................................... 449 FillPolygon()................................................................ 448 FillRectangle() ............................................................ 448 Filter............................................................................... 339 FirstDayOfWeek ........................................................... 51 Fixed Single.................................................................... 24 Floor() ............................................................................ 295 FolderBrowserDialog .............................................. 343 541 Index Index Font............................................................. 255, 316, 345 Font.Style..................................................................... 319 FontDialog .................................................................. 345 FontFamily.................................................................. 319 FontStyle.Bold ........................................................... 319 FontStyle.Italic........................................................... 319 For...................................................................................... 89 For Each........................................................................ 103 Form ................................................................................. 19 form (HTML)............................................................... 431 Form_Activated ........................................................ 127 Form_Load..................................................................... 93 Format DateTimePicker ..................................................... 261 Format() ....................................................................... 254 Formatvorlage........................................................... 420 Formular ......................................................................... 19 aktivieren................................................................. 127 anzeigen................................................................... 141 Datenbank............................................................... 377 hinzufügen .............................................................. 138 löschen...................................................................... 512 mehrere .................................................................... 138 verstecken................................................................ 141 Formularansicht.......................................................... 25 Formularbasierte Ressourcen ............................. 360 Formularvorlage....................................................... 512 Fortschrittsbalken.................................................... 328 Frames .......................................................................... 492 FromArgb().............................................................. 38, 88 FromFile() .................................................................... 453 Bitmap ...................................................................... 350 FullRowSelect ListView .................................................................... 349 Funktion ...................................................................... 167 mathematische ..................................................... 295 zeichnen ................................................................... 457 G Ganzzahldivision......................................................... 52 GDI+............................................................................... 445 Generische Liste..................................... 225, 228, 466 füllen.......................................................................... 401 leeren ......................................................................... 401 Generische Schnittstelle........................................ 229 Generischer Datentyp ............................................ 225 542 Generisches Dictionary ......................................... 232 Get-Accessor .............................................................. 194 GetCreationTime()................................................... 280 GetCurrentDirectory()............................................ 280 GetFiles()...................................................................... 280 GetLastAccessTime()............................................... 280 GetLastWriteTime()................................................. 280 GetType() ..................................................................... 204 GetUpperBound()..................................................... 158 Gleich SQL ............................................................................. 391 VB.................................................................................. 54 Gleichheitszeichen .............................................. 27, 57 Grafik ............................................................................ 495 Graphics....................................................................... 445 Grid ................................................................................ 494 Größer als SQL ............................................................................. 391 VB.................................................................................. 54 GROUP BY ................................................................... 413 Groupbox ....................................................................... 83 Gültigkeitsbereich ............................................ 45, 164 H Häkchen.......................................................................... 77 Haltepunkt.................................................................. 122 entfernen ................................................................. 123 Handles ........................................................................... 82 Hauptmenü....................................................... 311, 474 head ............................................................................... 423 Headertext.................................................................. 357 Height .............................................................................. 34 Hide()............................................................................. 141 Hilfslinien ...................................................................... 32 Hilfstabelle Datenbank .............................................................. 369 Hoch .............................................................................. 295 Hochkomma ................................................................. 29 Hour .............................................................................. 257 HTML............................................................................. 420 html ............................................................................... 423 HTML-Markierung................................................... 423 Hyperlink .................................................................... 495 I ICloneable.................................................................... 222 id...................................................................................... 425 IEquatable.................................................................... 229 If Block............................................................................. 72 einzeilig....................................................................... 70 IIf()..................................................................................... 74 Image auf Button............................................................... 323 für ImageList.......................................................... 350 für Zeichnung ........................................................ 453 ImageList...................................................................... 350 Implementation........................................................ 221 Implements................................................................. 223 Imports ......................................................................... 199 Increment Zahlenauswahlfeld................................................. 68 Index Datenbank ..................................................... 365, 369 Datenfeld................................................................. 145 eindeutig ................................................................. 369 index.htm .................................................................... 422 IndexOf() Datenfeld................................................................. 149 generische Liste..................................................... 225 String ........................................................................ 245 IndexOfAny() String ........................................................................ 245 IndexOutOfRangeException................................ 146 Inherits ......................................................................... 213 Initial Catalog ............................................................. 416 InitialDirectory.......................................................... 339 Initialisierung............................................................... 93 Inkonsistenz ............................................................... 366 input .............................................................................. 431 InputBox() ................................................................... 329 INSERT................................................................. 384, 396 Insert()........................................................................... 248 generische Liste..................................................... 225 ListBox...................................................................... 105 InsertParagraphAfter() Range ........................................................................ 303 InsideLineStyle Borders ..................................................................... 304 Installationsprogramm.......................................... 513 Instanz .......................................................................... 192 Instanziierung ........................................................... 191 Integer.............................................................................. 42 Integrität referentielle ............................................................ 382 IntelliSense.................................................................. 115 Interface ............................................................. 221, 222 Internetanwendung ................................................ 419 Daten senden......................................................... 428 dynamisch .............................................................. 420 erstellen ................................................................... 422 Internetseite formatieren ............................................................ 427 Interval Timer.................................................................. 61, 329 InvalidCastException.............................................. 118 Klasse........................................................................ 121 Is ............................................................ 73, 152, 201, 326 Is Nothing .................................................................... 204 IsDate().......................................................................... 278 IsLoaded ....................................................................... 491 IsNumeric() ................................................................. 278 IsPostBack.................................................................... 430 Item Bookmarks ............................................................. 304 Items.............................................................................. 100 ListView ................................................................... 350 J Jahr ................................................................................. 257 JavaScript ..................................................................... 420 K Kalender ....................................................................... 434 Kamera 3D-Körper................................................................ 500 key .................................................................................. 232 Keys................................................................................ 234 Kill()................................................................................ 279 Klammer ......................................................................... 58 Klasse................................................................................ 26 abgeleitet ................................................................ 212 Definition ................................................................ 188 einbinden ................................................................ 199 ermitteln......................................................... 204, 205 543 Index Index Klasse (Forts.) statisches Element ............................................... 208 Klassenbibliothek eigene ........................................................................ 235 Klassenhierarchie..................................................... 211 Kleiner als SQL.............................................................................. 391 VB.................................................................................. 54 Kombinationsfeld.................................................... 109 in Menü .................................................................... 313 Kommandozeile ....................................................... 184 Parameter................................................................ 183 Kommentarzeile.......................................................... 29 Konfigurationsdaten .............................................. 515 Konsolenanwendung ............................................. 178 Konstante ....................................................................... 48 integriert .................................................................... 49 Konstruktor ....................................................... 195, 215 parameterlos.......................................................... 198 Kontextmenü ............................................................ 320 Kontrollkästchen......................................................... 77 in Menü .................................................................... 313 Kontrollstruktur .......................................................... 69 Koordinatensystem 3D-Körper ................................................................ 498 Kosinus......................................................................... 295 Kreiszahl ...................................................................... 295 L Label ....................................................................... 21, 490 LabelStyle Axis............................................................................. 354 Language...................................................................... 360 LargeChange Schieberegler ............................................................ 89 LargeImageList ListView .................................................................... 349 LastIndexOf() String ......................................................................... 245 Laufzeitfehler............................................................. 117 Layout ........................................................................... 486 Legends Chart .......................................................................... 353 Length MS Word-Text ........................................................ 306 Zeichenkette ........................................................... 240 544 Licht 3D-Körper ................................................................ 500 LIKE (SQL) .................................................................... 392 Like (VB) .......................................................................... 54 LineSegment .............................................................. 497 Linie ............................................................................... 447 List(Of ...) ...................................................................... 227 ListBox................................................................. 100, 490 ListBoxItem ................................................................ 492 Liste generisch........................................................ 225, 228 Listenansicht mit Bild ..................................................................... 347 Listenfeld..................................................................... 100 ListView........................................................................ 347 ListViewItem.............................................................. 349 localhost ...................................................................... 423 Localizable .................................................................. 360 Location ................................................................... 34, 59 Log() ............................................................................... 295 Log10() .......................................................................... 295 Logarithmus............................................................... 295 Lokal ................................................................................. 45 Lokalisierung ............................................................. 360 Long.................................................................................. 42 Loop.................................................................................. 92 M m:n-Relation .............................................................. 371 Main()............................................................................ 178 MainWindow.xaml.................................................. 486 MainWindow.xaml.vb............................................ 488 Markierungssprache............................................... 420 Mastertabelle ............................................................. 371 Material 3D-Körper ................................................................ 500 Math .............................................................................. 295 Math.Floor()................................................................... 96 MaxDate DateTimePicker..................................................... 263 Maximum Datenfeld ................................................................. 146 Fortschrittsbalken ................................................ 329 Schieberegler ............................................................ 88 Zahlenauswahlfeld ................................................ 68 MaxLength..................................................................... 65 MaxSize ........................................................................ 346 mdb-Datei.................................................................... 379 Me ............................................................................ 28, 190 Mehrfachauswahl....................................... 33, 73, 108 Mehrfachvererbung ................................................ 221 Mehrsprachigkeit ..................................................... 360 Menü.............................................................................. 311 MenuStrip.................................................................... 311 MeshGeometry3D .................................................... 500 Message ........................................................................ 120 MessageBox ................................................................ 333 MessageBoxButtons................................................ 334 MessageBoxIcon ....................................................... 334 Methode ....................................................................... 162 Klasse........................................................................ 188 statisch..................................................................... 208 überladen ................................................................ 196 Microsoft Access Database Engine .................... 383 Microsoft Excel 15.0 Object Library ................... 301 Microsoft Word 15.0 Object Library................... 301 Microsoft.ACE.OLEDB.12.0 .................................... 384 Microsoft.Office.Interop.Excel ............................ 302 Microsoft.Office.Interop.Word............................ 302 Millisecond.................................................................. 257 Millisekunde............................................................... 257 MinDate DateTimePicker .................................................... 263 Minimum Datenfeld................................................................. 146 Fortschrittsbalken ............................................... 329 Schieberegler............................................................. 88 Zahlenauswahlfeld................................................. 68 MinSize ......................................................................... 346 Minute........................................................................... 257 Mod .................................................................................. 52 modal ............................................................................ 141 Modul allgemein ................................................................ 142 Modularisierung ................................................ 87, 162 Module1.vb .................................................................. 178 Modulo ........................................................................... 52 Monat ............................................................................ 257 Month............................................................................ 257 MoveToNextAttribute() XmlTextReader ..................................................... 290 MS Access..................................................................... 376 vor 2007................................................................... 388 MS Excel Arbeitsmappe drucken ...................................... 308 Arbeitsmappe erstellen...................................... 306 Arbeitsmappe lesen ............................................ 308 MS Word Dokument drucken ............................................. 305 Dokument erstellen ............................................ 302 Dokument lesen ................................................... 305 MultiExtended........................................................... 108 MultiLine ........................................................................ 64 Multiplikation............................................................... 52 MultiSelect .................................................................. 339 Mustervergleich........................................................... 54 My.MySettings()........................................................ 516 MyBase......................................................... 93, 213, 216 MyBase.New()............................................................. 216 MySQL........................................................................... 415 MySQL.Data ................................................................ 416 MySql.Data.MySqlClient........................................ 416 MySqlClient ................................................................ 416 MySqlCommand....................................................... 416 MySqlConnection..................................................... 416 MySqlDataReader..................................................... 416 N Nachkommastellen Datentyp .................................................................... 45 Zahlenauswahlfeld................................................. 68 Name ................................................................................ 23 Namenskonvention ............................................ 22, 37 Namensraum ............................................................. 198 einbinden ................................................................ 199 namespace .................................................................. 198 NavigationWindow.................................................. 493 NET-Treiber ................................................................. 415 New ......................................................................... 36, 191 Konstruktor............................................................ 195 Next................................................................................... 90 Nicht-Operator ............................................................. 55 Nicht-proportionale Schriftart............................ 254 NodeType XmlTextReader ..................................................... 290 NOT (SQL)..................................................................... 392 Not (VB) ........................................................................... 55 Nothing .............................................................. 204, 309 545 Index Index Now................................................................................ 256 NumericUpDown .............................................. 68, 249 Overridable................................................................. 218 Overrides ............................................................ 218, 219 O P Object ................................................................... 202, 218 Objekt erzeugen................................................................... 195 identisch................................................................... 203 Schreibweise ............................................................. 96 temporäres.............................................................. 231 Objektorientierung ................................................. 187 Objektverweis............................................................ 191 dasselbe Objekt...................................................... 201 vergleichen .............................................................. 390 Oder-Operator .............................................................. 55 Of ........................................................................... 227, 233 Öffnungsmodus........................................................ 266 OleDb ............................................................................ 385 OleDbCommand....................................................... 385 OleDbConnection .................................................... 384 OleDbReader .............................................................. 385 OnSelectionChanged .............................................. 436 Open Öffnungsmodus .................................................... 266 Open() .................................................................. 305, 309 OleDbConnection ................................................. 384 OpenFileDialog.......................................................... 339 Operator.......................................................................... 51 für Berechnungen ................................................... 52 logisch ............................................................... 55, 392 Priorität ...................................................................... 57 Rangfolge................................................................... 57 Vergleich .......................................................... 54, 201 Zuweisung ................................................................. 57 option ........................................................................... 434 Optional ....................................................................... 169 Optionsschaltfläche ................................................... 79 mehrere Gruppen ................................................... 83 OR (SQL) ....................................................................... 392 Or (VB).............................................................................. 55 Bit-Operator............................................................ 319 ORDER BY .................................................................... 393 OutsideLineStyle Borders...................................................................... 304 OverflowException......................................... 118, 121 Overloads .................................................................... 213 Page ...................................................................... 425, 493 Page_Load ................................................................... 425 Page-Direktive ........................................................... 425 Paint-Ereignis ............................................................ 455 PaintEventArgs ......................................................... 456 Panel....................................................................... 59, 461 Paragraphs .................................................................. 305 Document................................................................ 303 ParamArray ................................................................ 171 Parameter.................................................................... 163 beliebig viele........................................................... 171 optional.................................................................... 169 PasswordChar............................................................... 65 Passwortabfrage .......................................................... 65 Path................................................................................ 497 PathFigure................................................................... 495 PathGeometry........................................................... 495 Peek()............................................................................. 267 Pen ................................................................................. 445 Pfadangabe relativ ........................................................................ 271 Pfadgeometrie........................................................... 495 PI ..................................................................................... 295 Pinsel............................................................................. 445 Farbe.......................................................................... 450 Pixel.................................................................................. 34 Platzhalter................................................................... 392 Point .............................................................. 36, 449, 458 Points Series.......................................................................... 353 Polygon ........................................................................ 448 Polymorphie .............................................................. 217 Position Legends..................................................................... 353 Potenzierung ................................................................ 52 Pow().............................................................................. 295 PresentationCore ..................................................... 507 PresentationFramework ....................................... 507 Preserve ....................................................................... 155 Primärindex ............................................................... 369 Primärschlüssel erstellen ..................................... 380 546 Print() Printing .................................................................... 354 Printing Chart ......................................................................... 354 PrintingManager Chart ......................................................................... 354 PrintOut() Document ............................................................... 305 PrintOutEx() Workbook................................................................ 308 PrintPreview() Printing .................................................................... 354 Private ................................................. 46, 169, 189, 190 Programm beenden....................................................................... 30 starten ......................................................................... 29 testen ........................................................................... 30 Programmentwicklung.......................................... 113 Programmierung clientseitig .............................................................. 420 ereignisgesteuert.................................................. 133 serverseitig ............................................................. 420 ProgressBar ................................................................. 328 Projekt neu erzeugen ............................................................ 19 neu erzeugen (WPF) ............................................ 485 öffnen .......................................................................... 30 schließen..................................................................... 30 speichern .................................................................... 25 Verweis hinzufügen ............................................ 415 Projektmappen-Explorer......................................... 20 Alles anzeigen........................................................ 301 Projektressourcen .................................................... 360 Projektvorlage............................................................ 513 Properties Window .................................................... 20 Property........................................................................ 193 Protected...................................................................... 215 Provider ........................................................................ 384 Prozedur................................................................ 26, 162 allgemein ................................................................... 86 verlassen.................................................................. 162 Public......................................... 46, 140, 189, 190, 214 Q Queue ............................................................................ 225 Quit() Application.................................................... 305, 308 R RadioButton ........................................................ 79, 431 Random Access ......................................................... 272 Randomize() .................................................................. 93 Range Document ...................................................... 303, 305 Rangfolge ........................................................................ 53 Read()............................................................................. 387 XmlTextReader ..................................................... 290 Reader ........................................................................... 385 ReadLine() Console .................................................................... 179 StreamReader........................................................ 267 Rechenoperator............................................................ 52 Rechteck ....................................................................... 448 Rectangle...................................................................... 448 ReDim ........................................................................... 155 Redundanz .................................................................. 366 Referenztyp................................................................. 200 Registrierung.............................................................. 511 Rekursion..................................................................... 175 Relation ........................................................................ 368 erstellen ................................................................... 381 Relational..................................................................... 365 Remove() Controls ................................................................... 471 Dictionary............................................................... 234 generische Liste .................................................... 226 String ........................................................................ 250 RemoveAt() generische Liste ........................................... 225, 481 ListBox...................................................................... 105 Replace() String ............................................................... 253, 403 Resources.resx ........................................................... 362 Ressourcen .................................................................. 360 resx-Datei .................................................................... 361 Return ................................................................. 167, 169 Ringtausch .................................................................. 166 Rnd() ................................................................................. 92 547 Index Index RootFolder................................................................... 343 Rotationstransformation...................................... 502 Round()......................................................................... 295 RowIndex .................................................................... 359 Rows .............................................................................. 357 Rückgabewert ................................................... 167, 169 runat.............................................................................. 425 Runden ......................................................................... 295 S SaveAs() Document................................................................ 305 Workbook ................................................................ 308 SaveFileDialog ........................................................... 341 SaveImage() Chart .......................................................................... 354 Schalter............................................................................ 77 Schieberegler................................................................. 87 Schleife ............................................................................ 89 For Each.................................................................... 103 geschachtelt............................................................ 151 Schlüssel-Wert-Paar ................................................ 232 Schnittstelle................................................................ 221 generisch.................................................................. 229 Schrift............................................................................ 316 auswählen, Dialog ............................................... 345 Schriftart...................................................................... 316 nicht-proportional ............................................... 254 Schriftgröße................................................................ 318 Schriftstil ..................................................................... 319 Schrittweite Schleife........................................................................ 89 Zahlenauswahlfeld ................................................ 68 script.............................................................................. 425 Scrollbalken ................................................................ 100 ScrollBars Textfeld............................................................. 64, 322 Second .......................................................................... 257 Seiten in Frames ................................................................. 492 Sekundärindex.......................................................... 369 Sekunde........................................................................ 257 SELECT ................................................................. 384, 390 select (HTML) ............................................................. 434 Select Case...................................................................... 73 SelectAll()..................................................................... 137 548 Selected DataGridView ........................................................ 357 SelectedDate............................................................... 436 SelectedIndex ComboBox............................................................... 318 ListBox ...................................................................... 102 SelectedIndexChanged .......................................... 104 SelectedIndices ......................................................... 108 SelectedItem .............................................................. 102 SelectedItems ............................................................ 108 SelectedPath............................................................... 343 SelectionMode ................................................. 108, 110 Semikolon ................................................................... 243 sender ........................................................................... 326 Separator ..................................................................... 313 Series Chart.......................................................................... 352 SeriesChartType........................................................ 353 Serversteuerelement ..................................... 427, 434 Set-Accessor ............................................................... 194 SetCurrentDirectory() ............................................ 280 Shared ........................................................................... 209 Short................................................................................. 42 Show(), MessageBox................................................ 333 ShowColor................................................................... 346 ShowDialog() Standarddialogfeld.............................................. 339 Unterformular ....................................................... 141 ShowNewFolderButton ......................................... 343 Simple........................................................................... 110 Sin()................................................................................ 295 Single................................................................................ 42 Sinus.............................................................................. 295 Size Eigenschaft ............................................................... 34 Schrift ........................................................................ 317 Struktur ...................................................................... 36 Slider ............................................................................. 490 SmallChange Schieberegler ............................................................ 89 SmallImageList ListView .................................................................... 349 SolidBrush................................................................... 447 Solution Explorer........................................................ 20 Sort().............................................................................. 149 SpecialFolder.............................................................. 344 Spin-Button ................................................................ 263 Split() String ........................................................................ 243 SQL.................................................................................. 384 Großschrift.............................................................. 385 typische Fehler ...................................................... 396 Sqrt() .............................................................................. 295 Stack............................................................................... 225 StackOverFlowException ...................................... 135 StackPanel ................................................................... 487 Startformular ............................................................. 512 Startparameter .......................................................... 183 Startzustand ................................................................. 23 Statische Variable ....................................................... 46 Statusleiste .................................................................. 327 StatusStrip ................................................................... 327 Step................................................................................... 89 Steuerelement Abstand einstellen .................................................. 33 aktivieren ......................................................... 61, 128 ausrichten .................................................................. 33 auswählen.................................................................. 22 einfügen...................................................................... 21 Größe ........................................................................... 34 Hintergrundfarbe ................................................... 38 Kontextmenü ........................................................ 320 kopieren ...................................................................... 34 Liste ........................................................................... 467 markieren................................................................... 32 mit Taste bedienen .............................................. 132 Position ................................................................ 34, 59 sichtbar .................................................................... 128 zur Laufzeit erzeugen ................................ 206, 461 zur Laufzeit löschen ................................... 461, 471 Stift ................................................................................. 445 Dicke.......................................................................... 450 Farbe ......................................................................... 450 Storyboard................................................................... 502 StreamReader............................................................. 265 StreamWriter.............................................................. 267 String ...................................................................... 43, 239 feste Länge.............................................................. 272 Structure ...................................................................... 160 Structured Query Language ................................. 384 Struktur ........................................................................ 158 Definition ................................................................ 160 Stunde ........................................................................... 257 Style...................................................................... 317, 319 Sub .................................................................................... 26 SubItems ListViewItem.......................................................... 350 submit........................................................................... 431 Substring()................................................................... 251 Subtract() ..................................................................... 259 Subtraktion .................................................................... 52 SUM()............................................................................. 413 Symbolleiste............................................................... 322 Syntaxfehler ........................................................ 27, 115 System.Data.OleDb........................................ 385, 438 System.Globalization.............................................. 362 System.IO........................................................... 265, 266 System.Resources..................................................... 364 System.Text ................................................................ 289 System.Threading .................................................... 362 System.Windows.Forms ........................................ 505 System.Windows.Forms.DataVisualization.Charting ............................................................................ 352 System.Xaml............................................................... 507 System.Xml................................................................. 289 Systemton ................................................ 334, 337, 338 T Tabelle darstellen ................................................................ 355 Datenbank.............................................................. 377 Tabellenausgabe ....................................................... 254 Tabellenentwurf........................................................ 379 TabIndex ...................................................................... 131 Tables Document ............................................................... 304 TabStop......................................................................... 131 Tag der Woche ........................................................... 257 Tag des Jahres............................................................. 257 Tag des Monats.......................................................... 257 Tan() ............................................................................... 295 Tangens ........................................................................ 295 Tastaturbedienung .................................................. 131 Taste Alt............................................................................... 132 F11 ............................................................................... 123 F5 ................................................................................... 29 F9................................................................................ 122 Tasten-Key................................................................... 501 Tastenkombination Strg+C ....................................................................... 182 549 Index Index Tastenkombination (Forts.) Strg+F5 ...................................................................... 179 Teilzeichenkette........................................................ 251 Template............................................................. 512, 513 Temporäres Objekt.................................................. 231 Tetris.............................................................................. 461 Text Document................................................................ 305 in Zeichnung........................................................... 452 mehrzeilig.................................................................. 64 Range......................................................................... 303 Steuerelement .......................................................... 23 Textfeld............................................................. 64, 241 TextBox ........................................................................ 490 in Menü .................................................................... 313 TextChanged........................................... 129, 249, 318 Textfeld ........................................................................... 64 alles auswählen..................................................... 137 ändern....................................................................... 129 kopieren...................................................................... 65 koppeln ..................................................................... 136 Then........................................................................... 70, 72 TickFrequency Schieberegler ............................................................ 89 TimeOfDay.................................................................. 257 Timer............................................................. 61, 329, 461 TimeSpan..................................................................... 259 title (HTML)................................................................. 423 Title (VB)....................................................................... 339 TitleAlignment Axis............................................................................. 353 To ................................................................................ 73, 89 Today............................................................................. 256 TodayDayStyle .......................................................... 436 ToDouble() ..................................................................... 67 ToInt32().............................................................. 180, 332 Toolbox ........................................................................... 19 ToolStrip ...................................................................... 323 ToShortDateString() ................................................ 436 ToString()............................................................ 218, 259 Trennzeichen ............................................................. 243 Trim() ............................................................................ 242 TrimEnd() .................................................................... 242 TrimStart()................................................................... 242 Truncate() .................................................................... 295 Try .................................................................................. 120 Typ ermitteln ........................................................ 204, 205 550 Type Converter ......................................................... 487 TypeOf Is............................................................. 205, 309 U Übergabe per Referenz ............................................................ 165 per Wert.................................................................... 164 Überladen.................................................................... 196 Überschreiben........................................................... 218 Überwachungsfenster............................................ 123 Uhrzeit................................................................. 256, 257 berechnen ................................................................ 259 UID ................................................................................. 416 Umwandlung in ganze Zahl.......................................................... 332 in Zahl ......................................................................... 67 Und-Operator ............................................................... 55 Ungleich SQL ............................................................................. 391 VB.................................................................................. 54 Unterformular........................................................... 138 Untermenü................................................................. 311 Unterstrich .......................................................... 32, 392 Until.................................................................................. 92 UPDATE..................................................... 384, 389, 395 Up-Down-Button...................................................... 263 V Value DateTimePicker..................................................... 263 Fortschrittsbalken ................................................ 329 HTML-Textfeld....................................................... 431 MS Excel-Zelle ........................................................ 358 Schieberegler ............................................................ 88 Zahlenauswahlfeld ................................................ 68 value .............................................................................. 232 ValueChanged DateTimePicker..................................................... 264 Schieberegler ............................................................ 88 Zahlenauswahlfeld ................................................ 68 VALUES......................................................................... 396 Values ........................................................................... 234 Variable ........................................................................... 41 ausblenden................................................................ 46 Variable (Forts.) Gültigkeitsbereich................................................... 41 klassenweit gültig................................................... 46 Kontrolle.................................................................. 123 Name............................................................................ 41 öffentlich .......................................................... 46, 139 Startwert..................................................................... 47 statisch........................................................................ 46 vbCrLf .............................................................................. 37 Verbindung Datenbank .............................................................. 384 Vererbung.................................................................... 211 Vergleichsoperator .................................................. 391 Verknüpfung Datenbank .............................................................. 368 erstellen (Datenbank)......................................... 381 Verweis auf Ereignismethode .......................................... 205 auf nichts ....................................................... 204, 309 hinzufügen ............................................................. 301 Verzeichnis Datei- und Verzeichnisliste .............................. 280 Dateiliste ................................................................. 280 ermitteln.................................................................. 280 Existenz.................................................................... 280 Information über ................................................. 279 setzen........................................................................ 280 wählen, Dialog ...................................................... 343 wechseln .................................................................. 285 Verzweigung................................................................. 69 äußere.......................................................................... 71 innere........................................................................... 71 Vieleck........................................................................... 448 Vielgestaltigkeit ........................................................ 217 View ListView.................................................................... 347 Visible............................................................................ 128 Application.................................................... 303, 307 Visual Studio Community 2015 ............................ 17 Vokabel-Lernprogramm ........................................ 474 Vorlage WPF-Anwendung ................................................. 485 W Wahrheitswert ............................................................. 78 WdLineStyle................................................................ 304 WdWindowState ....................................................... 303 Webserver.................................................................... 421 lokaler....................................................................... 421 WeekendDayStyle .................................................... 436 Werkzeugkasten........................................................... 19 Wertebereich................................................................. 45 Werttyp......................................................................... 200 WHERE .......................................................................... 391 While................................................................................. 92 Width...................................................................... 34, 450 Window ........................................................................ 487 Windows 10.......................................................... 17, 185 Windows 7 ............................................................ 17, 184 Windows 8............................................................ 17, 185 Windows Forms in WPF......................................... 505 Windows Presentation Foundation.................. 485 WindowsBase ............................................................. 507 WindowsFormsHost ............................................... 505 WindowsFormsIntegration........................ 505, 507 WindowState Application.................................................... 303, 307 With......................................................................... 96, 161 Wochentag .................................................................. 257 Words ............................................................................ 306 Workbook MS Excel................................................................... 307 Worksheets Application............................................................. 307 Wörterbuch................................................................. 232 WPF ................................................................................ 485 WPF in Windows Forms......................................... 507 WPF-Buch..................................................................... 486 WrapPanel ................................................................... 490 Write() ........................................................................... 268 Console .................................................................... 179 WriteAttributeString() XmlTextWriter ...................................................... 289 WriteEndElement() XmlTextWriter ...................................................... 289 WriteLine()......................................................... 182, 268 Console .................................................................... 179 WriteStartDocument() XmlTextWriter ...................................................... 289 WriteStartElement() XmlTextWriter ...................................................... 289 Wurzel ........................................................................... 295 551 Index X X (Location).................................................................... 34 x:Class........................................................................... 487 x:Name ......................................................................... 488 XAML............................................................................. 485 mit Programmiercode ........................................ 486 XlWindowState ......................................................... 307 XML-Datei .......................................................... 286, 515 XML-Knoten ............................................................... 287 XmlNodeType............................................................ 290 xmlns ............................................................................ 487 XmlTextReader ......................................................... 290 XmlTextWriter .......................................................... 289 Xor..................................................................................... 55 Bit-Operator............................................................ 319 Y Y (Location) .................................................................... 34 Year ................................................................................ 257 Z Zahl prüfen ................................................................. 278 Zahlenauswahlfeld............................................ 68, 249 552 Zeichen einzelnes .................................................................. 240 prüfen........................................................................ 267 Zeichenkette............................................................... 239 durchsuchen ........................................................... 245 einfügen ................................................................... 248 ersetzen .................................................................... 253 Länge......................................................................... 240 löschen...................................................................... 250 Teilzeichenkette .................................................... 251 trimmen ................................................................... 242 umwandeln............................................................... 66 verketten .................................................................... 56 zerlegen .................................................................... 243 Zeichnen ...................................................................... 445 dauerhaft................................................................. 455 Zeichnung löschen .................................................. 450 Zeile lesen.................................................................... 267 Zeilenumbruch ............................................................ 26 Regeln.......................................................................... 31 Zeit ................................................................................. 256 Zeitgeber......................................................................... 61 Zeitintervall................................................................ 259 Zufallsgenerator ............................. 92, 145, 461, 474 Zuweisung...................................................................... 27 Zweidimensionale Grafik...................................... 495 Know-how Wissen, wie’s fürgeht. Kreative. Thomas Theis ist Dipl.-Ing. für Technische Informatik, verfügt über langjährige Erfahrung als EDV-Dozent, unter anderem an der Fachhochschule Aachen. Er leitet Schulungen zu C/C++, Visual Basic und Webprogrammierung. Thomas Theis Einstieg in Visual Basic 2015 – Ideal für Programmiereinsteiger geeignet 552 Seiten, broschiert, 5. Auflage 2015 29,90 Euro, ISBN 978-3-8362-3703-1 www.rheinwerk-verlag.de/3813 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!