WinForms ohne Baukasten (Teil 1)
Der Formular Designer in Visual Studio ist zweifellos das Werkzeug, welches die größte Zeitersparnis bringt. Durch einfaches "zeichnen" lassen sich komplexe Windows-Anwendungen gestalten, ohne dass eine Zeile Programmcode geschrieben werden muß.
Aber man kann natürlich Formulare mit Steuerelementen auch von Hand programmieren. Denn etwas anderes tut der Designer auch nicht: Im Hintergrund wird immer Programmcode erzeugt oder verändert.
Warum sollte man aber auf den Designer verzichten? Darauf gibt es mehrere Antworten. Es kann unter Umständen nötig sein, Steuerelemente erst nach Programmstart zu erstellen. Das kann der Designer nicht. Außerdem gibt es weitaus mehr Programmierumgebungen als nur das Visual Studio und nur wenige haben eine Formular Designer. Auch deshalb sollte man wissen wie Steuerelemente von Hand erstellt werden.
Um es nicht ganz so kompliziert zu machen, soll dieses Beispiel sich mit dem manuellen Erstellen von Steuerelementen beschäftigen. Gehen wir also davon aus, dass wir schon ein Formular haben, dem wir Steuerelemente hinzufügen können. Natürlich kann man auch Formulare ohne den Designer erstellen aber das werde ich zu einem späteren Zeitpunkt gesondert erklären.
Erstellen wir also einen Button :
Der Formular Designer in Visual Studio ist zweifellos das Werkzeug, welches die größte Zeitersparnis bringt. Durch einfaches "zeichnen" lassen sich komplexe Windows-Anwendungen gestalten, ohne dass eine Zeile Programmcode geschrieben werden muß.
Aber man kann natürlich Formulare mit Steuerelementen auch von Hand programmieren. Denn etwas anderes tut der Designer auch nicht: Im Hintergrund wird immer Programmcode erzeugt oder verändert.
Warum sollte man aber auf den Designer verzichten? Darauf gibt es mehrere Antworten. Es kann unter Umständen nötig sein, Steuerelemente erst nach Programmstart zu erstellen. Das kann der Designer nicht. Außerdem gibt es weitaus mehr Programmierumgebungen als nur das Visual Studio und nur wenige haben eine Formular Designer. Auch deshalb sollte man wissen wie Steuerelemente von Hand erstellt werden.
Um es nicht ganz so kompliziert zu machen, soll dieses Beispiel sich mit dem manuellen Erstellen von Steuerelementen beschäftigen. Gehen wir also davon aus, dass wir schon ein Formular haben, dem wir Steuerelemente hinzufügen können. Natürlich kann man auch Formulare ohne den Designer erstellen aber das werde ich zu einem späteren Zeitpunkt gesondert erklären.
Erstellen wir also einen Button :
Button
buttonOK = new Button();
buttonOK.Location = new Point(10, 10);
buttonOK.Size 100er new Size(75, 25);
buttonOK.Text = "OK";
buttonOK.Location = new Point(10, 10);
buttonOK.Size 100er new Size(75, 25);
buttonOK.Text = "OK";
Das war doch gar
nicht schwer. Zuerst erstellen wir mit buttonOK ein
Objekt der Button-Klasse. Dann werden einige
Eigenschaften des neu erstellten Buttons verändert.
Location bestimmt die Position der linken oberen
Ecke des Button während die Werte in Size Breite
und Höhe festlegen. Soll auf dem Button ein Text
stehen, so ist dafür die Text-Eigenschaft
zuständig. Natürlich gibt es viele weitere
Eigenschaften wie Farbe, Schriftart und
Textausrichtung. Aber diese hier sind die
Wichtigsten, so dass wir uns erst einmal damit
begnügen werden.
Würden wir diese Programmzeilen jetzt ausführen, so würden wir schnell merken, dass hier überhaupt nichts passiert. Wir haben zwar einen neuen Button erzeugt, sehen ihn aber nicht. Es fehlt ein wichtiger Schritt, wir müssen den neuen Button unserem Formular hinzufügen.
Würden wir diese Programmzeilen jetzt ausführen, so würden wir schnell merken, dass hier überhaupt nichts passiert. Wir haben zwar einen neuen Button erzeugt, sehen ihn aber nicht. Es fehlt ein wichtiger Schritt, wir müssen den neuen Button unserem Formular hinzufügen.
Controls.Add(buttonOK);
Jedes Formular hat
eine Liste von Steuerelementen (Controls). Dieser
Liste müssen wir unseren neu erstellten Button
hinzufügen, dann wird er auch sichtbar und zeigt
auch das für einen Button typische Verhalten, wenn
man auf ihn klickt. Reaktionen auf einen solchen
Mausklick gibt es allerdings noch keine. Wir haben
ja auch noch keine Funktionalität hinterlegt.
Außerdem weiß der Button noch gar nicht, dass er
bei einem Mausklick reagieren soll.
Zusätzlich zu den Eigenschaften des Buttons gibt es Ereignisse (Events) auf die ein Button reagieren kann. Für uns ist jetzt nur ein Ereignis interessant, nämlich das, welches stattfindet wenn auf den Button geklickt wird.
Zusätzlich zu den Eigenschaften des Buttons gibt es Ereignisse (Events) auf die ein Button reagieren kann. Für uns ist jetzt nur ein Ereignis interessant, nämlich das, welches stattfindet wenn auf den Button geklickt wird.
buttonOK.Click
Das ist jetzt noch
kein vollständiger Befehl. Was hier noch fehlt ist
die Methode, die beim Anklicken dann wirklich
aufgerufen wird.
buttonOK.Click +=
new System.EventHandler(buttonOK_Click);
Die aufzurufende
Methode wird hier als Delegate-Methode angehängt.
Tatsächlich sind hier sogar Multicast-Delegates
möglich denn durch das "+=" können mehrere Methoden
am Click Ereignis angehängt werden. Das
funktioniert zwar problemlos ist mir aber in der
Praxis noch nie begegnet, so dass ich von solchen
Vorgehensweisen Abstand nehmen würde. Sollten hier
noch Unklarheiten bestehen so verweise ich auf mein
Tutorial "Delegates mal ganz einfach".
Da es sich hier um einen EventHandler handelt ist es nicht verwunderlich, dass die aufzurufende Methode zwei spezielle Parameter erwartet. Das ist zum einen das Senderobjekt des Ereignisses und als zweites ein EventArgs-Argument. Im Programm sieht das ganze dann so aus:
Da es sich hier um einen EventHandler handelt ist es nicht verwunderlich, dass die aufzurufende Methode zwei spezielle Parameter erwartet. Das ist zum einen das Senderobjekt des Ereignisses und als zweites ein EventArgs-Argument. Im Programm sieht das ganze dann so aus:
private void
buttonOK_Click(object sender, EventArgs e)
{
}
{
}
Dies ist jetzt die Methode die beim Click-Ereignis
unseres Buttons ausgeführt wird. In der Regel wird
man bei einem einfachen Button das Sendeobjekt und
den EventArgs nicht benötigen aber es ist durchaus
Interessant zu sehen was diese beiden Parameter
übertragen.
private void
buttonOK_Click(object sender, EventArgs e)
{
MessageBox.Show(sender.GetType().ToString());
MessageBox.Show(e.GetType().ToString());
}
{
MessageBox.Show(sender.GetType().ToString());
MessageBox.Show(e.GetType().ToString());
}
Der Sender ist in
diesem Fall wörtlich zu nehmen. Es ist wirklich das
Absenden der Nachricht, in diesem Fall eben einer
vom Typ "Button". EventArgs enthält hingegen
Informationen über die Nachricht. So erhält man zum
Beispiel verschiedene Nachrichtentypen wenn man den
Button wirklich mit der Maus anklickt oder wenn man
die Klickfunktion mit der Eingabetaste ausführt.
Wie dieses erste Beispiel zeigt ist es gar nicht so schwer ohne den Designer auszukommen.
Wie dieses erste Beispiel zeigt ist es gar nicht so schwer ohne den Designer auszukommen.