Gambas: Form

Aus Wikibooks
Wechseln zu: Navigation, Suche


zurück zu Gambas


Siehe auch http://www.madeasy.de/7/prgmini.htm#form

Wie erstellt man ein neues Formular?[Bearbeiten]

In der Gambas-IDE geht man mit der rechten Maustaste auf Formulare . Dann wählt man Neu und Formular. Meist nutzt man das ausgewählte Formular auch als Startformular und muss dies dann mit dem kleinen grünen Pfeil angeben. Oder aber man hat bereits ein Startformular oder eine Startklasse, dann wählt man einfach ein Formular ohne den grünen Pfeil.

Gambasformneu.png

Einfaches zum Thema Formular[Bearbeiten]

Im folgenden werden ein paar Dinge zum Formular erklärt, die man immer wieder braucht.

Ausführen von Anweisungen direkt beim Öffnen des Formulares

 PUBLIC SUB Form_Open() 
   Anweisung_1
   ...
   Anweisung_N
 END

Ausführen von Anweisungen wenn man mit der Maus darauf kommt

 PUBLIC SUB Form_Enter()
   Anweisung_1
   ...
   Anweisung_N
 END

Den Namen eines Formulares ändern mit

ME.Text = „neuer Titel“ 

Schließt ein Formular

ME.Close

Fragen[Bearbeiten]

Wie kann man 2 Formulare gleichzeitig darstellen?

 STATIC PUBLIC SUB Main()
   Form1.Show
   Form2.Show
 END

oder eben noch mehr als 2 gleichzeitig

 STATIC PUBLIC SUB Main()
   Form1.Show
   Form2.Show
   Form3.Show
   Form4.Show
   ....
 END


Wie kann man 2 Formulare gleichzeitig darstellen, ohne dass sie sich überlappen?


Formular 2 liegt rechts neben Formular 1:

 STATIC PUBLIC SUB Main()
   Form1.Show
   Form2.X = Form1.X + Form1.ClientWidth
   Form2.Y = Form1.Y
   Form2.Show
 END

Formular 2 liegt unterhalb Formular 1:

 STATIC PUBLIC SUB Main()
   Form1.Show
   Form2.X = Form1.X
   Form2.Y = Form1.Y + Form1.ClientHeight
   Form2.Show
 END

Eine leichte Überlappung ist noch vorhanden; Ursache ist vermutlich, dass die Fensterrahmenbreite und -höhe nicht bei ClientWidth bzw. ClientHeight mitgezählt wird.

Startformular[Bearbeiten]

Das Startformular erhält von Gambas automatisch die Main Class zugeordnet. Dies erleichtert am Anfang die Programmierung, erschwert aber den Umgang mit mehreren Formularen.

Modales Formular[Bearbeiten]

Wenn man eine modales Formular aufruft, werden automatisch alle anderen Fenster passiv gestellt. Man kann also nur noch auf dem modalen Formular weitermachen.

Die Programmausführung des aufrufenden Formulars wird an der Stelle des Aufrufes des modalen Formulars eingestellt, bis das modale Formular beendet wird (wird ein nichtmodales Formular aufgerufen, geht die Programmausführung des aufrufenden Formulars parallel weiter).

Der Aufruf eines modalen Formulars erfolgt mit:

 Form2.ShowModal

Hier gibt es leider einen kleinen Schönheitsfehler: Das aufrufende Formular wird zwar passiv, es lässt sich nicht mehr bedienen, die Bedienelemente sind aber nicht 'ausgegraut' und suggerieren dem Benutzer die Bedienbarkeit (Gambas Version 1.0.15). Abhilfe erreicht man durch folgenden Code:

 ME.Enabled = False
 Form2.ShowModal
 ME.Enabled = True

Die 3. Zeile ist nötig, damit nach Beendigung des modalen Dialogs das aufrufende Formular wieder bedienbar wird.

Dieses gilt auch für die vordefinierten modalen Dialoge

 message
 message.Info
 message.Error
 message.Delete
 message.Warning
 message.Question

Dieser Abschnitt muss noch ausführlich bearbeitet werden.

Siehe auch: http://www.binara.com/gambas-wiki/static/Gambas/ModalForm.html [z.Z. nicht erreichbar]

Eigenschaften eines Formulars[Bearbeiten]

Arrangement BackColor Background Border Caption Children ClientH ClientHeight ClientW ClientWidth ClientX ClientY Cursor Design Drop Enabled Expand Font ForeColor Foreground H Handle Height Icon Id Left Mask Menus Modal Mouse Next Padding Parent Persistent Previous ScreenX ScreenY SkipTaskbar Spacing State Tag Text Title ToolTip Top TopOnly Visible W Width Window X Y

W bzw. Width 
liefert die Breite des Formulares, aber abzüglich der Fensterelemente (Rahmen links und rechts)
H bzw. Height 
liefert die Höhe des Formulares, aber abzüglich der Fensterelemente (Rahmen oben incl. Überschrift und Rahmen unten)

Methoden eines Formulars[Bearbeiten]

Center 
Zentriert das Formular auf der Bildschirmarbeitsfläche

Close Delete Drag Find Grab Hide Lower Move MoveScaled Raise Refresh Reparent Resize ResizeScaled SetFocus Show ShowDialog ShowModal

Ereignisse eines Formulars[Bearbeiten]

Activate Close DblClick Deactivate Drag DragMove Drop Enter GotFocus Hide KeyPress KeyRelease Leave LostFocus Menu MouseDown MouseMove MouseUp MouseWheel Move Open Resize Show

Konstanten des Formulars[Bearbeiten]

Fixed FullScreen Maximized Minimized None Normal Resizable

Tab-Order des Formulares[Bearbeiten]

Die Tab-Order ist die Reihenfolge, in welcher die grafischen Steuerelemente bei Betätigung der Tabulatortaste durchlaufen werden. Sie kann im Hierarchiefenster der IDE geändert werden.

Neues Formular[Bearbeiten]

Sie wollen mit 2 Formularen arbeiten und von einem Formular zum Anderen hin- und herspringen:

Beispiel: Sie brauchen 2 Formulare und auf jedem Formular eine Schaltfläche ( Commandbutton).

Der Code für Form1.class lautet:

PUBLIC SUB Button1_Click()
 Form2.Show 
 Form1.Hide 
END

Der Code für Form2.class lautet:

PUBLIC SUB Button1_Click()
 Form1.Show 
 Form2.Close 
END

Beachten Sie, dass die beiden Formulare nicht gleichberechtigt sind. Die Form2 ist ein Objekt der Startklasse für Form1. Die Form1 ist die sogenannte Hauptklasse (main class)

Wenn Sie bei Form1 folgenden Code eingeben:

PUBLIC SUB Button1_Click()
 Form2.Show 
 Form1.close 
END

funktioniert das Programm nicht, da es vorzeitig beendet wird. Auch Form2 wird dann nicht angezeigt, da sie von Form1 abhängig ist.

Diese Abhängigkeit kann sich auch auf die Eigenschaften der Form2 auswirken.

Siehe http://www.madeasy.de/7/prgnewform.htm

Datenübergabe von einem Formular zu einem anderen Formular[Bearbeiten]

Siehe http://www.madeasy.de/7/prgformtoformplus.htm Reichlich kompliziert das Ganze. Vielleicht geht es ja auch noch einfacher.

Es geht einfacher: Siehe das nächste Kapitel mit den globalen Variablen.

Globale Variablen in Gambas[Bearbeiten]

In VB ist es möglich, z.B. aus der Form2 heraus eine Textbox in Form1 direkt anzusprechen. Der Befehl dazu lautet: Form1!Textbox1.Text = "zb". Dies funktioniert in Gambas nicht. In Gambas gibt es keine projektübergreifenden globalen Variablen. Man kann sich behelfen, wenn man eine Klasse erzeugt, die man Global nennt. Die globalen Variablen deklariert man als statische public-Variablen in dieser Klasse. Dann kann man auf sie mit Global.variablename im ganzen Projekt zugreifen.

Minsini: It's still poor programming practice but at least they'll be identified as global variables whenever you use them ;)

Programmbeispiel:[Bearbeiten]

Sie haben 2 Formulare und wollen Text zwischen den Formularen austauschen. Die globale Variable zum Textaustausch soll einfach t heißen.

  • Auf Form1 haben Sie 3 Commandbuttons und eine Textbox.
  • Auf Form2 haben Sie 2 Commandbuttons und eine Textbox

Der Code für die Global class (die gleichzeitig Startklasse ist) lautet:

STATIC PUBLIC t AS String
STATIC PUBLIC SUB Main()
form1.Show 
'Wenn Sie diese Zeile nicht einfügen, wird kein Formular angezeigt. 
END

Der Code für Form1 lautet:

PUBLIC SUB Button1_Click()
Textbox1.Text = "Dies ist ein Test"
Global.t = Textbox1.Text
END
PUBLIC SUB Button2_Click()
 Global.t = Textbox1.Text
 Form2.Show 
END
PUBLIC SUB Button3_Click()
Textbox1.Text =Global.t 
END

Der Code für Form2 lautet:

PUBLIC SUB Button1_Click()
Textbox1.Text = Global.t 
END
PUBLIC SUB Button2_Click()
 Global.t = Textbox1.Text 
 Form1.Show
 'Form2.Close 
END

Wenn Sie jetzt den Text der Textbox in Form1 ändern, wird er in Form2 übergeben und durch Klicken von Button1 eingefügt. Dasselbe passiert in Form2. Auch hier können Sie den Text der Textbox ändern und der geänderte Text wird mit Anklicken des Button3 auf Form1 in der Textbox gezeigt.

Vereinfachtes Programmbeispiel zum Datenaustausch zwischen Formularen[Bearbeiten]

Das ganze geht noch einfacher wie folgendes Beispiel zeigt:

  • Sie brauchen eine Global.class, die Startklasse ist.
  • In Form1 brauchen Sie eine Textarea und einen Commandbutton.
  • In Form2 brauchen Sie eine Textarea und einen Commandbutton.

Code für die Global.class

STATIC PUBLIC t AS String
STATIC PUBLIC SUB Main()
form1.show 
END

Für den Namen Global.class Sie können aber auch den vorgegebenen Namen Class1.class belassen, dann heißt die globale Variable nicht mehr Global.t sonder Class1.t.

Code für Form1

PUBLIC SUB Form_Open()
IF NOT Global.t THEN 
'Falls Global.t noch leer ist, dann fülle die Textarea mit einem text
textarea1.text = "Dies ist ein Anfang"
ELSE 
textarea1.Text = global.t 
ENDIF 
END
PUBLIC SUB Button1_Click()
Global.t = textarea1.Text 
Form1.Close 
Form2.show
END

Code für Form2

PUBLIC SUB Form_Open()
Textarea1.Text = global.t
Textarea1.Text = Textarea1.Text & " und etwas dazu." & Chr(10)
END
PUBLIC SUB Button1_Click()
Global.t = textarea1.Text 
form2.close 
form1.Show   
END

Jedesmal wenn man von einem Formular zum anderen wechselt, wird der Text der Textarea der globalen Variablen t zugeordnet und in der nächsten Form noch etwas hinzugefügt.

Kopieren des Formularlayouts[Bearbeiten]

Sie wollen ein umfangreiches Formularlayout exakt von einem Formular auf ein anderes kopieren. Wenn man dazu alle Elemente des Formular markiert und sie mit der rechten Maustaste mittels Copy und Paste auf das andere Formular übertragen will, dann stehen die Elemente (z.B. die Buttons) oft nicht mehr an der richtigen Stelle.

Mit einem simplen Trick sind auch nach dem Kopieren alle Elemente richtig an Ort und Stelle.

Man platziert behelfsweise zusätzlich ein Steuerelement exakt in die linke oberen Ecke (Position 0,0), hier z.B. den Button3. Dieser dient als Sperre dagegen, dass Gambas die kopierten Elemente beim Einfügen verschiebt. Vor allem bei komplexeren Layouts mit vielen, teilweise auch überlappenden Elementen ersparen man sich so jede Repositionierungsarbeit. Dieser kleine Trick hilft auch in einer ganzen Reihe von anderen Grafik-Programmen.

Prgformcopy.png

Siehe http://www.madeasy.de/7/prgformcopy.htm

Resize einer Textarea an eine Form[Bearbeiten]

Sie haben eine Formular mit einer Textarea. Die Größe dieser Textarea möchten Sie immer an Ihre Formulargröße anpassen.

Das Programm[Bearbeiten]

Um das Programm in Gang zu bringen, brauchen Sie ein Formular und eine Textarea.

Prgresize1.png

Wenn Sie das Formular verschieben zieht die Textarea immer mit.

Wenn Sie bei den Formulareigenschaften die Bordereigenschaft auf Resizeable stellen, wird die Textarea automatisch an eine Größenänderung der Form angepasst.

So schaut das Programm im Laufmodus aus:

Prgresize2.png

Der Code:[Bearbeiten]

PUBLIC SUB Form_Resize()
TextArea1.Move(0, 0, ME.ClientWidth, ME.ClientHeight)
END

Was hier für eine Textarea gezeigt wurde, geht natürlich genauso auch mit einer Picturebox oder einer Drawingarea.

Siehe http://www.madeasy.de/7/prgresize.htm

Ändern der Breite eines Textfeldes beim Ändern der Breite des Formulares[Bearbeiten]

 PUBLIC SUB Form_Resize()
   TextBox1.Move(TextBox1.X,TextBox1.Y,Form1.ClientW - ( TextBox1.X  * 2 ) ,TextBox1.H)
 END

Die Breite der Textbox wird bei Breitenänderung des Formulares so angepaßt, daß rechts derselbe Abstand zum Rand besteht wie links.