Windows Forms: Grundlagen
Um eine Windows Forms Applikation (kurz WinForm) zu erstellen, wählen wir bei der Erstellung eines Projekts „Windows Forms-Anwendung“. Durch das Erstellen eines solchen Projekts erhalten wir bereits einige C#-Dateien: Program.cs, Form1.cs und Form1.Designer.cs.
In der Program.cs-Datei befindet sich die Main()-Funktion, welche wir bereits aus den Konsolen-Anwendungen kennen. Dort werden die statischen Funktionen EnableVisualStyles(), SetCompatibleTextRenderingDefault() und Run() der Klasse Application aus dem Namensraum System.Windows.Forms (in welchem sich auch weitere Klassen für WinForm-Applikationen befinden) aufgerufen. Die ersten zwei Funktionen sind dabei für die Darstellung des Formulars zuständig. Der Run()-Funktion wird als Parameter ein Objekt unseres Formulars übergeben. Falls das Programm mehrere Formulare besitzt, wird der Run()-Funktion lediglich das Start-Formular übergeben. Weitere Formulare oder auch Dialoge werden dann vom Start-Formular aufgerufen (z. B. durch einen Button).
Die Form1.cs-Datei besitzt den eigentlichen Programmcode, welcher vom Programmierer geändert wird. Im Formular selbst werden vor allem Event-Funktionen (z. B. für den Klick auf ein Button) eingesetzt. Natürlich können Sie auch eigene Funktion in der Datei definieren. Bei großen Programmen ist es jedoch üblich, dass sich in den C#-Dateien eines Formulars ausschließlich Event-Funktionen befinden, welche dann Funktionen von eigen erstellten Klassen aufrufen. Hierdurch erhalten wir einen guten Programmierstil und eine ordentliche Kapselung von Funktionen in Klassen.
In der Form1.Designer.cs-Datei befindet sich der Code der Funktion InitializeComponent(), welche die einzelnen Steuerelemente des Formulars initialisiert und vom Konstruktor in der Form1.cs-Datei aufgerufen wird. Die Datei sollte nicht bearbeitet werden, da diese automatisch durch den Designer generiert wird. Der Designer ist ein Teil von Visual Studio, mit welchem einzelne Steuerelemente (mit Hilfe des Werkzeugkastens) auf das Formular gezogen, verschoben und editiert werden können. Die Eigenschaften eines Steuerelements (bei welchem es sich ebenfalls um ein Objekt handelt) können über das Eigenschaftsfenster editiert werden. Events bzw. deren Funktionen können durch einen Doppelklick auf das jeweilige Event eines Steuerelements, welche sich ebenfalls in dem Eigenschaftsfenster befinden, erstellt werden. Durch einen Doppelklick auf das Steuerelement selbst wird automatisch die Funktion des Standard-Events erstellt. Das einfache Anklicken eines Steuerelements selektiert das Steuerelement nur, sodass wir es editieren oder skalieren können.
In den Dateien Form1.cs und Form1.Designer.cs ist Ihnen vielleicht aufgefallen, dass sich vor dem Schlüsselwort class das Schlüsselwort partial befindet. Mit dem Schlüsselwort partial kennzeichnen wir, dass sich die Klasse über mehrere Dateien erstreckt. Für Programmierer ist es ganz interessant, den Quellcode der InitializeComponent()-Funktion zu sehen, weshalb wir empfehlen, bei einigen von unseren Programmen sich die Funktion anzuschauen, um C# besser zu verstehen.
Program.cs
using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; namespace CSV20.WinForm_Grundlagen { static class Program { /// <summary> /// Der Haupteinstiegspunkt für die Anwendung. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } }
Form1.cs
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace CSV20.WinForm_Grundlagen { public partial class Form1 : Form { public Form1() { InitializeComponent(); } } }
Form1.Designer.cs
namespace CSV20.WinForm_Grundlagen { 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() { this.components = new System.ComponentModel.Container(); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Text = "Form1"; } #endregion } }