CellClick tut nicht, wie ich es erwarte

Ich habe eine Listbox und möchte nach einem (Einzel)-Click auf einen Eintrag den dazugehörenden Record aus einer SQLite-Tabelle auslesen. Klappt auch beim ersten Aufruf, sofern ich auf die erste Zeile (row=0) klicke. Der zweete Aufruf, egal in welche Reihe (außer der ersten), bringt mir als selectedrowindex den Wert des vorherigen Aufrufs (hier jetzt 0). Bei erneutem Click in die Zeile kommt der richtige Wert. Das wiederholt sich für jeden weiteren click, sprich, erst der zweite Click auf die Zeile bringt mir den richrtigen Wert.

Beispiel-Code:
If LB_Verfahren.SelectedRowIndex = ListBox.NoSelection Then
r = 0
Else
r = LB_Verfahren.SelectedRowIndex
End
LB_Verfahren.SelectedRowIndex = r
// Will sehen, welcher Wert drinnen steht, weil ich es nciht hinbekomme :slight_smile:
MessageBox("selectedrowindex = " + LB_Verfahren.SelectedRowIndex.ToString)

Was ist denn daran falsch?

In welchem Event rufst Du den Code auf? Ich vermute, daß Du im Event noch den alten Wert von SelectedRowIndex hast, weil das Event noch nicht fertig ist.

Im CellClick hast Du die angeklickte Zelle und brauchst SelectedRowIndex nicht.

hmmm, im Event “CellClick” einer Listbox… Und ja, es sieht so aus, als ob ich ncoh den alten Wert habe. Aber ich dachte, dass, sobald man auf eine row clickt, dass der Event “CellClick” dann aktiviert wird…

Ja, wird er auch. Du könntest hier das Standardverhalten der Listbox abfangen und einen anderen SelectedRowIndex bestimmen als den, der nach dem CellClick üblicherweise von der Listbox festgelegt würde. Wie es Beatrix schrieb: CellClick ist genau das, was der Name aussagt. Der Event, der feuert, wenn auf eine Zelle geklickt wird.
Wenn du stattdessen lieber auf den standardmäßig geänderten Index zugreifen willst, musst du ein kleines Stück später ansetzen: Im Change-Event.

ok, vielen Dank, so hat es funktioniert. Aber warum? Auch hier wieder mein Verständnis: Change wird getriggert, wenn der Inhalt der Zellen verändert wird, was aber nicht der Fall ist nach meiner Meinung? Oder ist ein Ändern des selectedrowindex schon eine Änderung der Listbox?

Nein, da hast du etwas missverstanden. Oder Xojo hat vielmehr keine gute Arbeit geleistet bei der Umbenennung diverser Events. Eigentlich sollte er besser “SelectionChange” heißen, denn

The Change event handler is called when the row selection changes, not when cell contents change.

1 Like

OK, alles klar, vielen Dank !!