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:
Als het draait:
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