OpenSUSE-KDE-Plasma Gambas 3.19.3 qt5
Een eigenaardig feonomeen: ik laat de gebruiker op de listbox klikken, waarop gevraagd wordt of hij de betreffende listbox lijn (aangeduid door Listbox.index) wil verwijderen. Zo ja, verwijder ik die met Listbox.Remove(Listbox.Index).
Mijn voorbeeld: de listbox (Mode: Single) bevat 1 lijn. Ik klik op knop 1.
Code:
Public Sub lsbxError_Click() Dim i As Integer ' i = Message.Question(lsbxError.Index & ": " & lsbxError.Text, "Clear", "Clear All", "Cancel") Debug i Select i Case 1 lsbxError.Remove(lsbxError.Index) Case 2 lsbxError.Clear Case 3 ' else do nothing End Select ' End
Na het verwijderen van de lijn krijg ik een nieuwe vraag met een lege tekst en als index -1. Als je nog eens op Clear klikt, krijg je een foutmelding Out of bounds
.. op de lijn van de Remove; het gaat blijkbaar over de index.
Ik merk op (bij meer elementen) dat de listbox na het verwijderen een ander item selecteert (zonder dat ik dat expliciet vraag), dat ik dan ook niet meer kan kiezen voor verwijderen.
Ik kan de fout blijkbaar vermijden door een “unselect” toe te voegen:
Public Sub lsbxError_Click() Dim i As Integer ' i = Message.Question(lsbxError.Index & ": " & lsbxError.Text, "Clear", "Clear All", "Cancel") Debug i Select i Case 1 lsbxError.Remove(lsbxError.Index) lsbxError.UnselectAll() Case 2 lsbxError.Clear Case 3 ' else do nothing End Select ' End
en de “index” fout kan ik vermijden door op voorhand een voorwaarde toe te voegen:
Public Sub lsbxLog_Click() Dim i As Integer Debug lsbxLog.Index If lsbxLog.Index >= 0 Then i = Message.Question(lsbxLog.Text, "Clear", "Clear All", "Cancel") Select i Case 1 lsbxLog.Remove(lsbxLog.Index) lsbxLog.UnselectAll() Case 2 lsbxLog.Clear Case Else ' else do nothing End Select Endif End