Gambas: Gitter
- Zurück zum Gambas-Inhaltsverzeichnis.
- Zurück zu Gambas: Steuerelemente
Allgemeines
BearbeitenGrid heißt auf Deutsch Gitter. Noch besser kann man ein Grid auch als Tabelle bezeichnen. Tabellen eignen sich sehr gut, um Datenbanken übersichtlich darzustellen.
Verwandt mit GridView ist der TableView, die Tabellenansicht, wie sie z.B. in dem mitgelieferten Beispielprogramm DataReportExample genutzt wird.
Bei einem Gitter kann man die Spaltenanzahl, die Reihenanzahl, die Breite und Höhe und vieles mehr definieren. Angesprochen werden die einzelnen Felder des Gitters mit einem Array, d.h. mit einem Wert für die Spalten- und die Reihenkoordinate.
Man kann die Gitterplätze mit Text, mit Zahlen, aber auch mit einem Bild füllen.
Beispielprogramm
BearbeitenUm das Programm in Gang zu bringen, braucht man eine neue Form. Auf diese platziert man ein GridView (ein Gitter) aus der Werkzeugkiste. Im Programmverzeichnis sollte die Bilddatei x.png verhanden sein, sonst wird das Bild nicht dargestellt. Eine Fehlermeldung gibt es nicht.
STATIC PUBLIC SUB Main() hForm AS Fmain hForm = NEW Fmain hForm.show END PUBLIC SUB _new() GridView1.Columns.Count = 4 GridView1.Rows.Count = 3 GridView1.Columns.Width = 52 GridView1.Rows[1].Height = 52 GridView1[0,0].Text = "0,0" GridView1[0,0].Alignment = 4 GridView1[1,1].Text = "1,1" GridView1[0,1].Text = "0,1" GridView1[1,0].Picture = Picture["x.png"] END
Theorie des GridView
BearbeitenMit dem GridView wird ein Steuerelement bereitgestellt, welches Daten in einem Gitternetz anzeigt. Die Klasse kann man aus der Werkzeugkiste holen. Sie ist aber auch per Code erzeugbar.
g AS GridView PUBLIC SUB _new() g = NEW GridView(ME) AS "GridView1" g.show g.Columns.Count = 4 g.Rows.Count = 3 g.Columns.Width = 52 g.Rows[1].Height = 52 END
Sie brauchen eine leere Form um obiges Programm in Gang zu bringen. Es erzeugt ein neues GridView.
Eigenschaften des GridView
BearbeitenBackColor, Background, Border, ClientH, ClientHeight, ClientW, ClientWidth, Column, Columns, Current, Cursor, Design, Drop, Enabled, Expand, Font, ForeColor, Foreground, Grid, H, Handle, Height, Id, Left, Mouse, Parent, Row, Rows, ScreenX, ScreenY, ScrollBar, Tag, ToolTip, Top, Visible, W, Width, Window, X, Y
Methoden
BearbeitenClear, Delete, Drag, Grab, Hide, Lower, Move, Raise, Refresh, Resize, SetFocus, Show
Ereignisse
BearbeitenActivate, Click, DblClick, Drag, DragMove, Drop, Enter, GotFocus, KeyPress, KeyRelease, Leave, LostFocus, Menu, MouseDown, MouseMove, MouseUp, MouseWheel, Scroll
GridView mit Werten füllen
BearbeitenSie haben eine Liste von Werten erstellt, diese wollen Sie in das Gitter übernehmen. Wie das geht zeigt das folgende Beispielprogramm:
Sie brauchen dazu eine neue Form mit folgenden Elementen:
- 1 TextArea
- 1 GridView
- 2 Commandbuttons
Der Code dazu:
PUBLIC SUB Button1_Click() TextArea1.Text = "114,3\n135,7\n104,8\n118,5\n125,7\n" TextArea1.Text = TextArea1.Text & "121,4\n122,4\n96,8\n118,9\n120\n" TextArea1.Text = TextArea1.Text & "112,2\n127,9\n122,8\n"128,9\n120,3" END PUBLIC SUB _new() GridView1.Columns.Count = 2 GridView1.Rows.Count = 15 GridView1.Columns.Width = 72 END PUBLIC SUB Button2_Click() DIM text AS String DIM Liste AS String[] DIM Einzelwert AS String DIM x AS Integer x = 0 text = TextArea1.Text Liste = Split(text,Chr(10)) FOR EACH Einzelwert IN Liste GridView1[x,1].Text = Einzelwert GridView1[x,0].Text = x x = x + 1 NEXT PRINT liste.Length END
Wenn man auf den Button1 drückt wird die TextArea mit Werten gefüllt. Drückt man auf den Button2, dann werden diese Werte in das Gitter übernommen.
Wie kann man das Programm noch verbessern?
- Die Länge des Gitters ist mit einem Wert von 15 fest vorgegeben. Kann man die Länge so ändern, dass sie variabel wird und der Länge der Liste (Liste.Length) in der TextArea entspricht?
Hintergrundfarbe für eine beliebige Zelle setzten
BearbeitenManchmal möchte man, vielleicht um den Inhalt bestimmter Zellen hervor zu heben, die Hintergrundfarbe einer oder mehrerer Zellen auf eine beliebige Farbe ändern. Eigentlich geht das nicht, denn dieses ist nicht in den Eigenschaften des GridView vorgesehen. Aber es gibt einen kleinen „Workaround“, den ich im folgenden beschreibe.
- man braucht natürlich ein GridView. Nennen wir es z.B. GridViewTest.
- nun definiert sich eine Variable (z.B. bild) als Picture.
- dann erstellt sich eine TextBox (z.B. TextBoxTemp) in der Größe einer Zelle des GridViev.
- man setzt die Eigenschaft TextBoxTemp.Visible = False (TextBoxTemp ist unsichtbar).
- im nächsten Schritt legt die Hintergrundfarbe der TextBox fest.
- man kopiert den Inhalt der Zelle in die TextBox, dessen Hintergrundfarbe geändert werden soll.
- dann setzt die Eigenschaft von TextBoxTemp.Visible auf True (sichtbar machen).
- jetzt macht nun mit bild = TextBoxTemp.Grab() ein Bild,
- setzt TextBoxTemp.Visible auf False und
- kopiert das Bild in die GridView Zelle.
Sollte es nicht funktionieren, muss noch ein WAIT an die richtige Stelle gesetzt werden. Die wesentlichen Teile hier noch einmal als Programm-Code.
DIM bild AS Picture bild = NEW Picture( <Breite der TextBox>, <Höhe der TextBox>, TRUE ) TextBoxTemp.Visible = TRUE TextBoxTemp.Text = GridViewTest[ <Reihe>, <Spalte> ].Text WAIT bild = TextBoxTemp.Grab() TextBoxTemp.Visible = FALSE GridViewTest[ <Reihe>, <Spalte> ].Picture = bild
Wichtig ist, dass WAIT genau so, und vor der Grab-Zeile eingefügt wird. WAIT bild = TextBoxTemp.Grab() funktioniert NICHT.
Das ist vielleicht nicht ganz „sauber“ programmiert, aber eine andere Möglichkeit zur Lösung des Problems habe ich bislang noch nicht gefunden.