Programmieren lernen für Kinder

Auch Kinder können schon das Programmieren lernen. Je nach Alter gibt es verschiedene Möglichkeiten, mit denen dein Kind auf spielerische Art entweder alleine oder mit deiner Hilfe die Grundlagen für das Programmieren erlernen kann. Einige davon möchte ich dir hier kurz vorstellen.

Worauf du achten solltest

Je jünger dein Kind ist, umso eher solltest du darauf achten, dass es nicht so lernt wie ein Erwachsener. Kinder sind schnell überfordert oder gelangweilt, wenn man sie mit zu vielen Informationen gleichzeitig überschüttet. Deshalb solltest du immer darauf achten, geduldig und langsam vorzugehen und ihm nur so viel vorzugeben wie nötig. Am Besten bleibt z.B. eine Anweisung immer im Gedächtnis, wenn man sie selbst abtippt – das gilt für Kinder genauso wie für Erwachsene. Lass dein Kind möglichst alles selbst entdecken. Etwas nachhelfen kannst du aber natürlich, wenn dein Kind alleine nicht weiter kommt.
Kurze Programme sind vor allem für den Anfang besser, weil Kinder sich nicht so lange auf eine Sache konzentrieren können. Außerdem ist das optische Feedback wichtig: wenn ein Kind etwa ein Spielzeug mit dem Quellcode steuern kann oder grafisch etwas auf dem Bildschirm passiert, macht das Spaß und motiviert dadurch, weiterzumachen. So wird das Programm für das Kind (be-)greifbarer.

 

 

Programmieren mit Lego

Die Besonderheiten, die das Programmieren lernen für Kinder mit sich bringt, hat Lego in einigen Produktserien gut bedacht und umgesetzt. Viele Kinder kennen und mögen Lego und haben selbst vielleicht schon Bausätze zuhause, deswegen fällt es nicht schwer, sie dafür zu begeistern. Das Lernen wird hier also eher zum positiven Nebeneffekt.
Die neuste Reihe, Lego Boost, kannst du ab August 2017 für etwa 160€ kaufen.
Lego Boost Roboter und App
Der Grundsatz beinhaltet die notwendigen Sensoren, Motoren und Lego Steine, um fünf verschiedene Roboter nach Anleitung zu bauen und mit Programmierung zum Leben erwecken. Wie bei Lego üblich, kann man aber natürlich auch der eigenen Fantasie freien Lauf lassen.
Programmieren kann dein Kind dabei auf dem PC oder Tablet, die Software dazu kommt auch von Lego. Die App erinnert an ein buntes Puzzle-Spiel und kann auch so ähnlich benutzt werden. Der Code ist in verschiedene Gruppen unterteilt, z.B. gibt es eine Gruppe für Sensoreingaben. Jede Gruppe hat dabei eine eigene Farbe und dein Kind kann das Programm einfach aus größeren zusammenhängenden Codestücken zusammenbauen. Oder aber es schreibt das Programm komplett selbst, wenn es schon etwas Erfahrung gesammelt hat. Neben der Boost Reihe findest du von Lego auch noch andere programmierbare Sets. Lego Boost ist eher so gehalten, dass besonders Kinder im Alter von etwa 7 bereits gut damit zurecht kommen. Wenn dein Kind schon älter ist, kannst du beispielsweise auch die Mindstorms-Sets in Erwägung ziehen.

Wie du deinem Kind das Programmieren sonst noch näher bringen kannst

Eine Idee aus dem Hause Apple, mit der dein Kind ebenfalls auf dem Tablet spielerisch das Programmieren lernen kann, ist die App Swift Playgrounds.
Swift Playground App von Apple
Dabei kann dein Kind mit Hilfe von kleinen Anweisungsblöcken eine Spielfigur steuern, die sich daraufhin bewegt oder Aktionen durchführt. Auch diese App ist bunt und fröhlich gehalten und verbindet Lernen und Spielen mit einander. Mit der aktuellen Version ist es sogar möglich, Hardware wie etwa Drohnen zu steuern. Swift wurde als Programmiersprache besonders darauf ausgelegt, dass jeder sie leicht erlernen kann und der Code möglichst einfach gehalten ist.
Du siehst, es gibt eine Menge Möglichkeiten für das Programmieren lernen für Kinder jeden Alters, die auch deinem Kind gefallen könnten!

Wie lerne ich Programmieren?

Wie lerne ich Programmieren? Wie werde ich ein erfolgreicher Programmierer? Was muss ich tun um Programmieren zu lernen? Diese Fragen werde ich in diesem Beitrag beantworten. Als erstes solltest du dich fragen was du genau erreichen möchtest, zum Beispiel:

  1. Du möchtest nur eine einfache Webseite zum Beispiel für dein Unternehmen oder auch privat erstellen
  2. Du möchtest eine komplexe Anwendung zum Beispiel eine Webseite oder APP erstellen mit verschiedensten Funktionen und/oder Usertypen
  3. Du möchtest ein Softwareentwickler werden
  4. Du möchtest ein eigenes Spiel programmieren
  5. Du brauchst es für deine Ausbildung oder Studium

Nachfolgend werde ich Tipps für jeden diese 5 Fälle geben. Denn die Vorgehensweise kann sich hier erheblich voneinander unterscheiden.

Du möchtest nur eine einfache Webseite erstellen

Wenn dies Fall ist, dann reicht vielleicht auch ein CMS (content management system) wie WordPress dafür aus. Wenn dies der einzige Grund ist aus dem du Programmieren lernen möchtest, dann solltest du lieber Tools wie zum Beispiel WordPress dafür nutzen, somit kannst du dich mehr auf den Inhalt, als mit dem Programmieren der Seite beschäftigen.

Du möchtest eine komplexe Anwendung erstellen

Wenn es wirklich nur um diese eine Webseite oder APP geht dann beauftrage doch jemand anderen dafür. Es gibt viele Seiten im Netz wo du sowas günstig in Auftrag geben kannst. Zum Beispiel upwork, fiverr, twago und viele weitere. Deine Motivation Programmieren zu lernen sollte schon etwas weiter reichen, als nur für ein einmaliges Projekt wie eine Webseite, sonst wirst du nicht bis zum Ende durchhalten und es lohnt sich der Aufwand nicht. Denn wenn du von 0 anfängst wirst du nicht innerhalb einer oder zwei Wochen zu einem Experten.

Du möchtest ein Softwareentwickler werden

Das ist ein guter Grund um Programmieren lernen zu wollen. Allerdings stellt sich dann sogleich die Frage, mit welcher Programmiersprache fange ich an? Dafür liefert die dieser Beitrag eine Antwort, so wie jede Menge Literaturtipps, nutze sie! Wenn du nun die Programmiersprache weißt, dann empfehle ich dir, der Reihe nach alle Beiträge dieses Blogs durchzuarbeiten, dir zusätzlich die Anwendungspakete zu erwerben, damit du gleich voll durchstarten kannst, und außerdem ein paar der Literaturtipps auf der rechten Seite zu kaufen und durchzuarbeiten. Außerdem empfehle ich dir ganz klar, dich bei Codecademy anzumelden um dich dort mit der Syntax deiner Sprache vertraut zu machen. Auch Seiten wie Selhtml sollten dein 2. zu Hause werden.

Du möchtest ein eigenes Spiel programmieren

Das kann ich gut verstehen, auch ich hatte das ziemlich schnell für mich als Ziel gesetzt. Doch ohne die Grundlagen geht hier erstmal gar nichts. Auch dir empfehle ich, arbeite alle Beiträge dieser Seite durch, beginne mit dem Ersten, und beschäftige dich mit den Grundlagen. Dann solltest du dir überlegen welche Technologie dein Spiel einsetzen soll. Generell würde ich dir empfehlen, sobald du in der Lage bist so gut wie jedes Konsolenprogramm zu entwickeln, dich mit der freien multiplattformunterstützenden Unity Engine auseinander zu setzen.

Du brauchst es für deine Ausbildung oder Studium

Hier kommt es jetzt wieder darauf an ob du es gerne machst, ob du es nachher auch in deinem Job brauchst und welche Programmiersprache du einsetzt. Ich empfehle dir die Literaturtipps aus diesem Beitrag.

Allgemeine Hinweise für Anfänger

Wenn du wirklich Programmieren lernen willst, dann solltest du dich auch unbedingt mit dem Thema Datenbanken und SQL auseinander setzen. Du solltest dich aber auch auf nicht zu viele Sprachen gleichzeitig konzentrieren. Wenn du HTML und C# oder SQL und C# gleichzeitig lernst ist es sicher kein Problem, da diese sich stark voneinander unterscheiden und du nicht durcheinander kommen wirst. Java und C# gleichzeitig zu lernen ist eine Sache von der ich dir aber auf jeden Fall abraten würde, da die Syntax schon sehr, sozusagen zum verwechseln ähnlich, aufgebaut ist. Um die Syntax einer Sprache zu erlernen empfehle ich dir noch zusätzlich Codecademy die Seite ist kostenlos und du bekommst sofort Aufgaben die du mit Hilfe eines Codeeditors lösen darfst.

Was muss ich tun um Programmieren zu lernen?

Vor allem solltest du nicht bei den ersten Problemen und Schwierigkeiten aufgeben. Du musst am Ball bleiben. Lerne Probleme zu lösen. Du solltest dir die Fähigkeit aneignen dich selbständig weiterzubilden und Probleme zu lösen von denen du anfangs keine Ahnung hast wie du sie lösen kannst. Du solltest dir vor allem erstmal eine Sprache raussuchen mit der du beginnst, welche ist hierbei gar nicht so wichtig. Ich empfehle dir C# oder Java, aber es kann auch irgendeine andere sein. Am Anfang ist die Lernkurve hoch, doch wenn du die erste Programmiersprache beherrschst, ist der Lernprozess für eine weitere Sprache lang nicht mehr so anspruchsvoll. Anfangs sind die Grundlagen ganz wichtig zum Beispiel Datentypen, Schleifen, Stringverarbeitung, Switch Case Anweisungen, Arrays, Vergleichsoperatoren und vor allem Praxis Praxis Praxis, zum Beispiel durch Codecademy. Aber natürlich muss man seinen Code auch immer wieder optimieren und vergleichen mit professionellem Code.

Wie werde ich ein erfolgreicher Programmierer?

  • Du solltest dich immer weiterbilden
  • Lerne von den Erfolgreichen
  • Lese dir alle Bücher durch die ich auf der rechten Seite empfehle
  • Besuche Schulungen
  • Lerne neue Technologien und Frameworks zum Beispiel Angular2
  • Lerne jedes Jahr eine neue Programmiersprache
  • Beschäftige dich zum Beispiel mit funktionaler Programmierung und schreibe funktionale Programme
  • Arbeite an open source Projekten mit
  • Tritt einer .NET User Group bei und tausche dich mit anderen Fachleuten aus
  • Abonniere oder lese regelmäßig Fachzeitschriften wie zum Beispiel die dotnetpro
  • Beschäftige dich mit Clouddevelopment zum Beispiel mit Azure
  • Entwickle ein eigenes Spiel mit der Unity Engine
  • Hab ein Überblick über aktuelle Entwurfsmuster und erwerbe das Wissen welches Muster für welchen Anwendungsfall am geeignetsten ist

 

Windows Forms

Dieser Beitrag ist ein Tutorial für die Erstellung eines simplen Taschenrechners mit Benutzeroberfläche. Wenn du meine bisherigen Beiträge durchgearbeitet hast, bist du mit den Grundlagen wie Schleifen, Variablen, Switch Case Anweisungen, Stringverarbeitung, Datentypen, Arrays und Vergleichsoperatoren bereits vertraut. Falls nicht empfehle ich dir, das erst nachzuholen, am besten mit dem ersten Beitrag, bevor du dir mit der zusätzlichen Komponente „Benuteroberfläche“ erhöhte Komplexität erzeugst. Dieses Beispiel ist mit Hilfe von Visual Studio in C# und mit Nutzung der Windows Forms Technologie erstellt worden. Natürlich kann auch eine andere Entwicklungsumgebung hierfür genutzt werden.

  1. Inhalt
  2. Windows Forms was ist das
  3. Windows Forms Projekt erstellen
  4. Aufbau einer Windows Forms Anwendung
  5. Ausführen der Anwendung
  6. Der Entwurfsmodus
  7. Die Oberfläche designen
  8. Events nutzen
  9. Logik implementieren
  10. Einsatzempfehlung
  11. Codedownload (kostenlos)

Windows Forms was ist das?

Windows Forms ist eine Art GUI (graphical user interface) Werkzeugkasten zum Erstellen von Programmen, die eine grafische Benutzeroberfläche haben, auf der Basis des .NET Frameworks. Also die klassischen Windows (Fenster) Anwendungen inklusive des gewohnten Windows-Designs.

Mit Windows Forms werden so genannte Smart Clients entwickelt. Smart Clients sind einfach zu entwickeln, upzudaten, können mit oder ohne Verbindung zum Internet genutzt werden und greifen auf lokale Ressourcen auf einer sichereren Art zu, als traditionelle Windows basierte Applikationen. Windows Forms gibt es schon lange, ein konkurrierendes neueres Framework ist WPF (Windows Presentation Foundation) dies bietet eine einfache zweiseitige Datenbindung an die Steuerelemente der Benutzeroberfläche und setzt außerdem das Entwurfsmuster MVVM (Model View Viewmodel) konsequent um. Da dieser Beitrag aber vor allem für Personen gedacht ist, die das erste Mal mit der Entwicklung von Benutzeroberflächen zu tun haben, wäre dies zu komplex, wird aber in einem zukünftigen Beitrag behandelt. Wenn du jetzt schon mehr zu WPF wissen möchtest empfehle ich dir folgendes Fachbuch, dass ich auch selbst gelesen habe: Windows Presentation Foundation 4. Einführung und Praxis

Windows Forms Projekt erstellen

Als erstes muss ein neues Projekt vom Typ Windows Forms-Anwendung angelegt werden:

Quelle: Eigene Darstellung

Dann erstellt eure Entwicklungsumgebung, in meinem Fall Visual Studio, für euch das Projekt mit verschiedenen Dateien.

Aufbau einer Windows Forms Anwendung

In Visual Studio findet ihr im Projektmappenexplorer (im Standard auf der rechten Seite von Visual Studio zu finden, ansonsten über „Ansicht“ -> „Projektmappenexplorer“ oder [STRG] + [ALT] + [L] aufrufbar) eine Form1.cs, eine Form1.Designer.cs, in meinem Fall noch eine Form1.resx und eine Program.cs Datei.

Quelle: Eigene Darstellung

 

Datei Erklärung
Form1.cs Die Form1 Klasse ist gesplittet in Designerdatei und Form1.cs. Die Form1 Datei enthält Code der ausgeführt wird, wenn der Benutzer Interaktionen mit der Benutzeroberfläche stattfinden lässt, also zum Beispiel einen Button drückt, die Maus bewegt, eine Taste auf der Tastatur drückt usw. Außerdem kann man in die vordefinierte eventgesteuerte Methode „Form1_Load“ Quellcode schreiben, der unmittelbar vor der Anzeige des Formulars, ausgeführt wird. Aus dieser Datei heraus wird bei der Erstellung der Form1 Klasse (um genau zu sein beim Aufruf des Form1 Konstrukturs), die Methode InitializeComponent() aus der „Form1.Designer.cs“ aufgerufen.
Form1.Designer.cs In der Designerdatei werden, in der Regel, die Steuerelemente (Controls) des Formulars deklariert, initialisiert, positioniert, Attribute gesetzt und formatiert.
Form1.resx Diese Datei habe ich manuell hinzugefügt, sie wird genutzt um Ressourcen geordnet abzulegen. Das können zum Beispiel Stringressourcen sein, also irgendwelche Zeichenfolgen (oft Wörter und Texte). Das macht Sinn damit man diese geordnet an einer Stelle ablegen kann und bei Änderungen, oder Hinzufügen einer neuen Sprache, nur an einer Stelle und nicht an 100 Stellen angepackt werden muss. Es können aber auch, wie in diesem Fall, Bilder oder Symbole, Audiodateien und weitere Ressourcentypen abgelegt werden.
Program.cs In dieser Klasse findest du den Haupteinstiegspunkt der Anwendung. Von hier aus wird das Formular Form1 erzeugt und ausgeführt.

Quelle: Eigene Darstellung

Ausführen der Anwendung

Wenn du [F5] drückst, oder über das Menü „Debuggen“ -> „Debugging Starten“ navigierst, kannst du deine Anwendung debuggen, also Starten mit zusätzlicher Option den Code zu untersuchen, während das Programm läuft. Bei einer neuen Anwendung sieht das Ganze noch recht unspektakulär aus, eine leeres Fenster wird angezeigt.

Quelle: Eigene Darstellung

Der Entwurfsmodus

Wenn du auf die Form1.cs Datei doppelt klickst, wird dir das Formular im Entwurfsmodus angezeigt. Hier bekommst du eine direkte Vorschau darauf, wie das Formular aussieht, außerdem stehen dir noch zusätzliche Optionen wie das Eigenschaftsfenster, eine Übersicht der zur Verfügung stehenden Events und eine Toolbox zur Verfügung. Mit der Toolbox (falls nicht bereits offen, wird diese über das Menü „Ansicht“ -> „Toolbox“ oder [STRG] + [ALT] + [X] geöffnet) können sehr einfach, mit der Maus per „Drag and Drop“, Steuerelemente auf das Formular gezogen werden. Dadurch werden neue Steuerelemente in der Form1.Designer.cs Datei erstellt, das kann man natürlich auch selber machen. Wenn ein Steuerelement den Fokus hat, können außerdem über das Eigenschaftsfenster, Eigenschaften wie zum Beispiel der Name des Steuerelements gesetzt werden.

Die Oberfläche designen

Nachdem wir nun eine leere Windows Forms Anwendung erstellt haben, muss die Oberfläche designt werden, nutze dazu entweder die Toolbox und die Entwurfsansicht, oder schreib direkt Code in die Form1.Designer.cs Klasse. Als Vorlage kannst du die folgende Abbildung, ohne Hintergrundbild, nutzen.

Quelle: Eigene Darstellung

Es sind also 3 Textboxen, 3 Label zu den Textboxen, 4 Radiobuttons, und 4 normale Buttons zu benennen und zu Erstellen.

Das kann zum Beispiel folgendermaßen in der Form1.Designer.cs Datei realisiert werden (am Ende des Beitrags findest du den gesamten Quellcode zum kostenlosen Download):

namespace WindowsFormsApplication1
{
partial class Form1
{
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.IContainer components = null;

/// <summary>
/// Verwendete Ressourcen bereinigen.
/// </summary>
/// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

#region Vom Windows Form-Designer generierter Code

/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
this.textBox1 = new System.Windows.Forms.TextBox();
this.textBox2 = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.textBox_Ergebnis = new System.Windows.Forms.TextBox();
this.bt_berechnen = new System.Windows.Forms.Button();
this.bt_Wurzel = new System.Windows.Forms.Button();
this.bt_Reset = new System.Windows.Forms.Button();
this.bt_Beenden = new System.Windows.Forms.Button();
this.label4 = new System.Windows.Forms.Label();
this.Zahl2 = new System.Windows.Forms.Label();
this.radioButtonAddieren = new System.Windows.Forms.RadioButton();
this.radioButtonSubtrahieren = new System.Windows.Forms.RadioButton();
this.radioButtonMulti = new System.Windows.Forms.RadioButton();
this.radioButtonDividieren = new System.Windows.Forms.RadioButton();
this.SuspendLayout();
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(73, 86);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(109, 20);
this.textBox1.TabIndex = 4;

//
// textBox2
//
this.textBox2.Location = new System.Drawing.Point(233, 86);
this.textBox2.Name = "textBox2";
this.textBox2.Size = new System.Drawing.Size(110, 20);
this.textBox2.TabIndex = 5;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 17.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label1.Location = new System.Drawing.Point(75, 56);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(72, 29);
this.label1.TabIndex = 6;
this.label1.Text = "Zahl1";
//
// textBox_Ergebnis
//
this.textBox_Ergebnis.Location = new System.Drawing.Point(77, 169);
this.textBox_Ergebnis.Name = "textBox_Ergebnis";
this.textBox_Ergebnis.Size = new System.Drawing.Size(105, 20);
this.textBox_Ergebnis.TabIndex = 8;
//
// bt_berechnen
//
this.bt_berechnen.Location = new System.Drawing.Point(583, 79);
this.bt_berechnen.Name = "bt_berechnen";
this.bt_berechnen.Size = new System.Drawing.Size(108, 31);
this.bt_berechnen.TabIndex = 10;
this.bt_berechnen.Text = "Berechnen";
this.bt_berechnen.UseVisualStyleBackColor = true;
this.bt_berechnen.Click += new System.EventHandler(this.bt_berechnen_Click);
//
// bt_Wurzel
//
this.bt_Wurzel.Location = new System.Drawing.Point(583, 144);
this.bt_Wurzel.Name = "bt_Wurzel";
this.bt_Wurzel.Size = new System.Drawing.Size(108, 31);
this.bt_Wurzel.TabIndex = 11;
this.bt_Wurzel.Text = "Wurzel aus Summe";
this.bt_Wurzel.UseVisualStyleBackColor = true;
this.bt_Wurzel.Click += new System.EventHandler(this.button2_Click);
//
// bt_Reset
//
this.bt_Reset.Location = new System.Drawing.Point(583, 215);
this.bt_Reset.Name = "bt_Reset";
this.bt_Reset.Size = new System.Drawing.Size(108, 31);
this.bt_Reset.TabIndex = 12;
this.bt_Reset.Text = "Reset";
this.bt_Reset.UseVisualStyleBackColor = true;
this.bt_Reset.Click += new System.EventHandler(this.bt_Reset_Click);
//
// bt_Beenden
//
this.bt_Beenden.Location = new System.Drawing.Point(583, 283);
this.bt_Beenden.Name = "bt_Beenden";
this.bt_Beenden.Size = new System.Drawing.Size(108, 31);
this.bt_Beenden.TabIndex = 13;
this.bt_Beenden.Text = "Beenden";
this.bt_Beenden.UseVisualStyleBackColor = true;
this.bt_Beenden.Click += new System.EventHandler(this.bt_Beenden_Click);
//
// label4
//
this.label4.AutoSize = true;
this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 17.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label4.Location = new System.Drawing.Point(72, 136);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(110, 29);
this.label4.TabIndex = 14;
this.label4.Text = "Ergebnis";
//
// Zahl2
//
this.Zahl2.AutoSize = true;
this.Zahl2.Font = new System.Drawing.Font("Microsoft Sans Serif", 17.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.Zahl2.Location = new System.Drawing.Point(228, 54);
this.Zahl2.Name = "Zahl2";
this.Zahl2.Size = new System.Drawing.Size(72, 29);
this.Zahl2.TabIndex = 15;
this.Zahl2.Text = "Zahl2";
//
// radioButtonAddieren
//
this.radioButtonAddieren.AutoSize = true;
this.radioButtonAddieren.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.radioButtonAddieren.Location = new System.Drawing.Point(403, 111);
this.radioButtonAddieren.Name = "radioButtonAddieren";
this.radioButtonAddieren.Size = new System.Drawing.Size(89, 20);
this.radioButtonAddieren.TabIndex = 16;
this.radioButtonAddieren.TabStop = true;
this.radioButtonAddieren.Text = "Addieren";
this.radioButtonAddieren.UseVisualStyleBackColor = true;
//
// radioButtonSubtrahieren
//
this.radioButtonSubtrahieren.AutoSize = true;
this.radioButtonSubtrahieren.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold);
this.radioButtonSubtrahieren.Location = new System.Drawing.Point(403, 158);
this.radioButtonSubtrahieren.Name = "radioButtonSubtrahieren";
this.radioButtonSubtrahieren.Size = new System.Drawing.Size(114, 20);
this.radioButtonSubtrahieren.TabIndex = 17;
this.radioButtonSubtrahieren.TabStop = true;
this.radioButtonSubtrahieren.Text = "Subtrahieren";
this.radioButtonSubtrahieren.UseVisualStyleBackColor = true;
//
// radioButtonMulti
//
this.radioButtonMulti.AutoSize = true;
this.radioButtonMulti.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold);
this.radioButtonMulti.Location = new System.Drawing.Point(403, 205);
this.radioButtonMulti.Name = "radioButtonMulti";
this.radioButtonMulti.Size = new System.Drawing.Size(117, 20);
this.radioButtonMulti.TabIndex = 18;
this.radioButtonMulti.TabStop = true;
this.radioButtonMulti.Text = "Multiplizieren";
this.radioButtonMulti.UseVisualStyleBackColor = true;
//
// radioButtonDividieren
//
this.radioButtonDividieren.AutoSize = true;
this.radioButtonDividieren.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold);
this.radioButtonDividieren.Location = new System.Drawing.Point(402, 256);
this.radioButtonDividieren.Name = "radioButtonDividieren";
this.radioButtonDividieren.Size = new System.Drawing.Size(97, 20);
this.radioButtonDividieren.TabIndex = 19;
this.radioButtonDividieren.TabStop = true;
this.radioButtonDividieren.Text = "Dividieren";
this.radioButtonDividieren.UseVisualStyleBackColor = true;
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.SystemColors.ControlLightLight;
this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage")));
this.ClientSize = new System.Drawing.Size(730, 403);
this.Controls.Add(this.radioButtonDividieren);
this.Controls.Add(this.radioButtonMulti);
this.Controls.Add(this.radioButtonSubtrahieren);
this.Controls.Add(this.radioButtonAddieren);
this.Controls.Add(this.Zahl2);
this.Controls.Add(this.label4);
this.Controls.Add(this.bt_Beenden);
this.Controls.Add(this.bt_Reset);
this.Controls.Add(this.bt_Wurzel);
this.Controls.Add(this.bt_berechnen);
this.Controls.Add(this.textBox_Ergebnis);
this.Controls.Add(this.label1);
this.Controls.Add(this.textBox2);
this.Controls.Add(this.textBox1);
this.Name = "Form1";
this.Text = "Taschenrechner";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
this.PerformLayout();

}

#endregion
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox textBox_Ergebnis;
private System.Windows.Forms.Button bt_berechnen;
private System.Windows.Forms.Button bt_Wurzel;
private System.Windows.Forms.Button bt_Reset;
private System.Windows.Forms.Button bt_Beenden;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Label Zahl2;
private System.Windows.Forms.RadioButton radioButtonAddieren;
private System.Windows.Forms.RadioButton radioButtonSubtrahieren;
private System.Windows.Forms.RadioButton radioButtonMulti;
private System.Windows.Forms.RadioButton radioButtonDividieren;
}
}

Jetzt haben wir die Oberfläche designt, die nötige Logik um die Funktion des Taschenrechners abzubilden fehlt aber noch.

Events nutzen

In dieser ersten, einfachen Umsetzung, wird bewusst aus Gründen der Einfachheit, auf das Konzept der Objektorientierung und andere Entwurfsmuster, verzichtet. Wenn man, in der Entwurfsansicht, auf ein Steuerelement, wie zum Beispiel den „Berechnen Button“ einen doppelten Mausklick ausführt, wird für das entsprechende „OnClick-Event“ ein Delegate erstellt, der auf die auszuführende Methode zeigt, wenn das Event ausgeführt wird (in der Datei Form1.Designer.cs).

Beispiel:

this.bt_berechnen.Click += new System.EventHandler(this.bt_berechnen_Click);
  • bt_berechnen ist ein Button, nämlich der „Berechnen Button“
  • Click ist das Event, das Eintritt wenn man mit der Maus auf dieses Element klickt
  • Diesem Event wird ein neues Objekt vom Typ „Delegate“, erzeugt durch den Aufruf EventHandler(<Name der auszuführenden Methode>), welches auf die Methode bt_berechnen_Click verweist, zugewiesen
  • Die Methode bt_berechnen_Click wird ausgeführt, wenn mit der Maus auf den Button bt_berechnen geklickt wird.

Außerdem wird die Methode „bt_berechnen_Click“ automatisch in der Form1.cs Klasse erstellt.

Diesen Vorgang kann man entweder auch automatisch, mit einem Doppelklick auf die anderen Steuerelemente nachziehen, oder besser, weil viel lehrreicher, wäre der Weg dies manuell für die anderen Steuerelemente zu realisieren.

Logik implementieren

Jetzt haben wir eine Benutzeroberfläche, wir wissen wie die Verknüpfung zwischen Buttons, Events, Delegates und der Methode auf die das Delegate zeigt, umgesetzt wird. Es fehlt also noch die eigentliche Funktion des Taschenrechners. Dazu muss in der Methode auf die das Event verweist:

  1. Der aktuelle Wert aus den Textboxen ausgelesen werden (ggf. überprüft werden, ob dieser Wert valide ist, also ob es sich um eine gültige Zahl handelt)
  2. Die Rechenoperation ausgeführt werden und somit das Ergebnis berechnet werden
  3. Das Ergebnis in die Textbox für das Ergebnis geschrieben werden

Machen wir das doch mal an dem Beispiel des „Dividieren“ Operators.

private void bt_berechnen_Click(object sender, EventArgs e)
        {
            zahl1 = Convert.ToDouble(textBox1.Text);
            zahl2 = Convert.ToDouble(textBox2.Text);

            ergebnis = BerechneGrundrechenArten();

            textBox_Ergebnis.Text = Convert.ToString(ergebnis);            
        }

Hier werden zwei zuvor Global deklarierte int-Variablen (zahl1, zahl2) die zum Datentyp double konvertierte Werte, der zugehörigen Textboxen, zugewiesen. Die Anweisung „textBox1.Text“ ruft auf der Textbox die den Namen textBox1 trägt, die Eigenschaft Text auf. Diese Eigenschaft enthält den Text der in der Textbox steht. Mit Text kann man aber nicht rechnen, deshalb muss dieser Wert erst in einen numerischen Datentyp umgewandelt, man sagt „konvertiert“, werden.

Anschließend wir eine neue Methode BerechneGrundrechenArten() ausgeführt, die wiederum das Ergebnis der Rechenoperation zurückgibt. In dieser Methode wird die Eigenschaft „Checked“ der RadioButtons, die die Rechenoperation angeben, abgefragt. Wenn „checked == true“ ist, dann ist dieser RadioButton gesetzt und es wird das Ergebnis entsprechend dieser Operation berechnet. Außerdem wird eine Division durch 0 verhindert.

 

if (zahl2 == 0 && radioButtonDividieren.Checked == true) MessageBox.Show("Division durch Null nicht zulässig", "Fehlermeldung");
            if (radioButtonAddieren.Checked == true) ergebnis += zahl1 + zahl2;
            if (radioButtonSubtrahieren.Checked == true) ergebnis -= zahl1 - zahl2;
            if (radioButtonDividieren.Checked == true) ergebnis /= zahl1 / zahl2;
            if (radioButtonMulti.Checked == true)
            {
                if (ergebnis != 0) ergebnis *= zahl1 * zahl2;
                else ergebnis = zahl1 * zahl2;
            }

            return ergebnis;

Das Ergebnis wird zurückgegeben und der ergebnis Variable aus der bt_berechnen_Click Methode zugewiesen. Anschließend wird das Ergebnis dann in den Datentyp „string“ konvertiert und der Wert wird der Eigenschaft „Text“ der Ergebnistextbox zugewiesen.

Einsatzempfehlung

Windows Forms sollte man nutzen, wenn man eine Client- oder eigenständige Windows Anwendung programmieren möchte, die auch ohne Internetverbindung zurechtkommt und außerdem die Anzahl der Formulare in einem (sehr) niedrigen Bereich angesiedelt ist. Wenn man weiß, dass man viele Formulare, benötigt oder dass die Anwendung komplexer wird, ist es empfehlenswert, sich mit WPF auseinander zu setzen, das von vornherein bidirektionale Datenbindung, so wie das MVVM Pattern unterstützt.

Download des Quellcodes

Wenn man zum erstern Mal mit Benutzeroberflächen zu tun hat, dann mag dieser Beitrag vielleicht nicht ganz trivial erscheinen. Deshalb empfehle ich den Quellcode kostenlos herunterzuladen, auszuprobieren und parallel dazu den Beitrag zu verstehen und sich selbst auszuprobieren.

Einen komplexeren, wissenschaftlichen Taschenrechner, und viele weitere lohnenswerte Applikationen kannst du im Paket User Interface erwerben.

Empfohlene weiterführende Literatur:

C# 6 mit Visual Studio 2015: Das umfassende Handbuch: Spracheinführung, Objektorientierung, Programmiertechniken