Fehler beim Resize einer Listbox

Hallo zusammen!

Ich bekomme eine OutOfBoundsException im CellBackgroundPaint-Event, wenn ich mein Fenster, welches nur eine Listbox enthält, per Maus maximiere. Das Fenster wird vorher fehlerfrei geöffnet und zeigt meine Liste von Daten an. Im CellBackgroundPaint-Event ist nun testweise folgender einfacher Code:

If Me.CellTagAt(row, column) <> “” Then
g.DrawingColor = &cD2FFFF
g.FillRectangle(0, 0, g.Width, g.Height)
End If

Wenn ich im Inspector beim Locking das untere Schloß deaktiviere, kommt der Fehler nicht. Und auch wenn dieser Code nicht im Event steht, kommt der Fehler nicht. Kann mir das jemand erklären? (Version ist XOJO 2019 3.2)

Versuchs mal hiermit:

If row < Me.RowCount And Me.CellTagAt(row, column) <> "" Then  
  g.DrawingColor = &cD2FFFF
  g.FillRectangle(0, 0, g.Width, g.Height)  
  Return True
End If

Return False

Wow! Klappt perfekt! Tausend Dank für die schnelle Hilfe!!!

1 Like

Das steht auch in der Dokumentation: ListBox.CellBackgroundPaint

Notes:
CellBackgroundPaint fires for every visible row in a ListBox, regardless of whether there is an actual row there or not.

Das erlaubt, auch Zeilen/Spalten zu zeichnen, welche aufgrund der Grösse der Controls “nicht gefüllt” sind. Zum Beispiel: Zebrastreifen weiterführen nach der letzten Zeile mit Daten.

Somit beim Zugriff auf effektive Inhalte (wie eben z.B. mit .CellAt, .CellTagAt) vorher prüfen, ob row und column auch vorhanden sind (oder ob ein Bereich ausserhalb der vorhandenen Daten zu zeichnen ist).

Gelesen hatte ich das, aber nicht verinnerlicht. :man_facepalming: Nun bleibt’s hoffentlich drin in der Rosine… :grinning: