CellTextPaint und CellBackgroundPaint werden für jede Zelle vom System aufgerufen. Damit man weiss, welche Zelle man gerade bemalt oder beschriftet, werden row und column als Argumente übergeben. Bei CellTextPaint kommt dann noch x und y als Argumente dazu: die Position wo der Text hingeschrieben werden sollte.
Ein paar Bemerkungen:
Obiger Code sollte noch in eine zweite If-Klausel gefasst werden, sonst wird zuviel “gemalt”, nämlich bei jedem CellTextPaint, egal ob Spalte 0, 1, 2 oder n:
If column = 0 Then // column ist eines der Argumente die dem CellTextPaint vom System übergeben werden
If Me.CellTag(row, 0) = "Schwarz" Then
g.ForeColor = RGB(0,0,0)
Else
g.ForeColor = RGB(100,100,100)
End If
End If
Immer schauen, dass Du in beiden Paint-Events der Listbox beide Argumente zum eingrenzen verwendest: row und column ansonsten ist die Wahrscheinlichkeit groß, dass die gleichen Dinge mehrfach gemalt werden.
So nervig die Xojo-Dokumentation manchmal ist, ich hatte die Erfahrung gemacht, dass ich im 2010 als ich mit Xojo begann, viel zu viel rumcodiert habe, statt die jeweiligen Seiten in der Dokumentation konzentriert durchzulesen.
Bei mir ging bei OOP das Licht auf, als mir jemand erzählte, dass ich in Gedanken folgendes mache soll für einen Methodenaufruf:
EinObjekt.EineMethode(arg1, arg2, arg3)
entspricht in prozeduralem Stil:
EineMethode(EinObjekt, arg1, arg2, arg3)
Das ist auch was ein Compiler einer OO-Sprache macht: den Methodenaufruf in eine simple Funktion übersetzen, wobei üblicherweise das erste Argument der Pointer auf das Objekt ist.