Een combobox geeft de mogelijkheid een gebruiker te laten kiezen uit een lijst van waarden, door een “drop-down” lijst (rolluik-lijst).
bv een combobox met leveranciersnamen: cmbxAlleLeveranciers
Door uit bestaande waarden te laten kiezen vermijd je dat verkeerde of onmogelijke input gebeurt.
Toch crasht je applicatie na gebruik van een combobox?
Je laat de gebruiker terechtkomen op de combobox voor een selectie met de code:
cmbxAlleLeveranciers.SetFocus()
cmbxAlleLeveranciers.Select()
Opvallend: hij kan hier letters intikken. Die komen niet zomaar vanzelf in je data terecht, maar wel in het resultaat van de combobox, bv door code die de keuze opvangt:
cmbxAlleLeveranciers_Change()
Als de gebruiker kiest uit de lijst heb je een change event. Maar ook op het moment dat daar iets ingetikt wordt heb je “change” events.
Als je dan de .Text
waarde gebruikt om op te zoeken in de databank,
(waar je denkt dat die enkel kan bestaan uit tekst-waarden uit de lijst):
LeverancierNr = haalLeverancierNr(cmbxAlleLeveranciers.Text)
.. kan je in de problemen komen!
De oplossing: zet de combobox ReadOnly
in het schermontwerp
(of met code: cmbxAlleLeveranciers.ReadOnly = TRUE
).
Opgelet! Dan mag je cmbxAlleLeveranciers.Select()
niet meer gebruiken (dit is het selecteren voor wijziging van de tekst - wat dus niet meer kan). De SetFocus()
is voldoende want de combobox reageert nu anders.
In plaats van cmbxAlleLeveranciers_Change()
gebruik je cmbxAlleLeveranciers_LostFocus()
De combobox in die twee uitvoeringen hier:
(uit de gambasdoc documentatie)
Combobox1, de bovenste, is zoals hij standaard gemaakt wordt in de Gambas programmeeromgeving:
- wit tekstveld.
- ReadOnly = FALSE
De tweede, opengeklapt met items zichtbaar, is
- ReadOnly = TRUE
- te herkennen aan de grijze bovenste lijn Item1.
November 25th, 2008 at 10:53 am
[…] 2. een tekstveld -of tekst-knop als readonly (zie Crash door combobox). […]