Objecten die een array bevatten

Array in een Klasse

Een objectklasse kan gegevens en methoden bevatten, maar ook bv een array. Die array kan bestaan uit getallen of tekst, maar kan ook weer uit objecten bestaan.

Ik maak een object met twee arrays;

  • 1 met string elementen
  • 1 met ‘object2’ elementen.

Object2 bevat enkel twee eigenschappen ter demonstratie: een tekstveld en een getal.

Een testprogramma maakt eerst de objecten en vult de arrays.

Daarna kan elk van de arrays weergegeven worden in een tabel.

(upd) Code testprogramma zie verder, maar eerst een opmerkig:

embedded arrays
Er wordt op online Gambas documentatie gewezen op het probleem van “embedded arrays” (lees meer).

Het testprogramma ziet er zo uit; het aantal elementen wordt bepaald door het getal, de tekst die opgeslagen wordt door het tekst-invulveld:

ArraysInObjectsFMainEdit

Als het draait:

ArraysInObjectsFMainRun

Hieronder de broncode …

Klasse 1:

' Gambas class file

PRIVATE arrStrings AS String[]
PRIVATE arrObjects AS Object[]

PUBLIC SUB _new()

arrStrings = NEW String[]
arrObjects = NEW Object[]

END

PUBLIC SUB fillStrings(j AS Integer, s AS String) AS Boolean

DIM i AS Integer

FOR i = 1 TO j
arrStrings.Add(s)
NEXT

RETURN TRUE

END

PUBLIC SUB stringCount() AS Integer

RETURN arrStrings.Count

END

PUBLIC SUB objectCount() AS Integer

RETURN arrObjects.Count

END

PUBLIC SUB fillObjects(j AS Integer, s AS String) AS Boolean

DIM hObject AS Class2
DIM i AS Integer

FOR i = 1 TO j

hObject = NEW Class2
WITH hObject
.iNumber = j
.sString = s
END WITH

arrObjects.Add(hObject)

NEXT

END

PUBLIC SUB getStringElement(i AS Integer) AS String

TRY RETURN arrStrings[i]

END

PUBLIC SUB getObjectElement(i AS Integer) AS String

TRY RETURN arrObjects[i].iNumber & ";" & arrObjects[i].sString

END

Klasse 2:

' Gambas class file

PUBLIC iNumber AS Integer
PUBLIC sString AS String

Het test-programma FMain:

' Gambas class file

PRIVATE hContainingArrays AS Class1

PUBLIC SUB _new()

hContainingArrays = NEW Class1

END

PUBLIC SUB Form_Open()

END

PUBLIC SUB Button1_Click()

hContainingArrays.fillStrings(SpinBox1.Value, TextBox1.Text)

hContainingArrays.fillObjects(SpinBox1.Value, TextBox1.Text)

END

PUBLIC SUB Button2_Click()

DIM i AS Integer

GridView1.Clear
GridView1.Columns.Count = 2

FOR i = 0 TO hContainingArrays.stringCount() - 1
INC GridView1.Rows.Count
GridView1[i, 0].Text = Str$(i + 1)
GridView1[i, 1].Text = hContainingArrays.getStringElement(i)
NEXT

END

PUBLIC SUB Button3_Click()

DIM i AS Integer

GridView1.Clear
GridView1.Columns.Count = 2

FOR i = 0 TO hContainingArrays.objectCount() - 1
INC GridView1.Rows.Count
GridView1[i, 0].Text = Str$(i + 1)
GridView1[i, 1].Text = hContainingArrays.getObjectElement(i)
NEXT

END