Seite 1 von 1
Combobox - Bindevent
Verfasst: 17.03.2015 12:37
von shim
Hallo!
Der aus einer editierbaren Combobox ausgewählte Wert kann nicht mit getgadgettext() ausgelesen werden.
Stattdessen erhält man die vorangegangenen Wert.
Arbeitet man nicht mit Bindevent() funktioniert alles wie es sollte.
Code: Alles auswählen
Procedure event()
If EventGadget()=2
If EventType()=#PB_EventType_Change
Debug "Is this >"+GetGadgetText(2)+"< the selected item? yes|no"
EndIf
EndIf
EndProcedure
BindEvent(#PB_Event_Gadget, @event())
If OpenWindow(0, 0, 0, 270, 180, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ComboBoxGadget(2, 10, 70, 250, 21, #PB_ComboBox_Editable)
For a = 1 To 5
AddGadgetItem(2, -1,"ComboBox item " + Str(a))
Next
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Re: Combobox - Bindevent
Verfasst: 17.03.2015 13:11
von Bisonte
da fehlt ein + vor GetGadgetText(2) ....
Aber nichtsdestotrotz, das Ergebnis ist anscheinend erst beim 2. "Change" Event zu sehen.
Wobei ich jetzt mal die PB Version 5.31 meine... solltest du immer bei Bugmeldungen dazuschreiben,
sonst sucht man sich 'nen Wolf
Besser noch in die Signatur !
Re: Combobox - Bindevent
Verfasst: 17.03.2015 13:15
von Kiffi
Bisonte hat geschrieben:Aber nichtsdestotrotz, das Ergebnis ist anscheinend erst beim 2. "Change" Event zu sehen.
bei mir nicht. Da kommt es sofort beim ersten Event:
Debugger hat geschrieben:Is this >1< the selected item? yes|no
Is this >12< the selected item? yes|no
Is this >123< the selected item? yes|no
Grüße ... Peter (5.31 / x86)
Re: Combobox - Bindevent
Verfasst: 17.03.2015 13:39
von NicTheQuick
Bei funktioniert es auch korrekt.
Gibt es hier auch einen Fehler bei dir?
Code: Alles auswählen
Procedure event()
Debug "Is this >"+GetGadgetText(2)+"< the selected item? yes|no"
EndProcedure
If OpenWindow(0, 0, 0, 270, 180, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ComboBoxGadget(2, 10, 70, 250, 21, #PB_ComboBox_Editable)
BindGadgetEvent(2, @event(), #PB_EventType_Change)
For a = 1 To 5
AddGadgetItem(2, -1,"ComboBox item " + Str(a))
Next
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Re: Combobox - Bindevent
Verfasst: 17.03.2015 13:54
von Ligatur
hallo,
Ich glaube ihr habt das ein wenig missverstanden, tippt man Text in das Gadget ein funktioniert alles korrekt, wählt man aber ein Item aus der Liste aus so tritt das erwähnte Verhalten auf.
Dies ist aber kein Fehler von PB, das Ereignis EventChange triit schon dann auf wenn ein Element aus der Liste gewählt wurde und nicht wenn sich der Text des Gadgets ändert, und der Zeitpunkt dieses Ereignisses ist logischerweise bevor der Text ins Textfeld eingetragen wird. Das kann man aber so leicht umgehen:
Code: Alles auswählen
Procedure event()
If EventGadget()=2
erg.s = GetGadgetItemText(2, GetGadgetState(2))
Debug "Is this >" + erg +"< the selected item? yes|no"
EndIf
EndProcedure
If OpenWindow(0, 0, 0, 270, 180, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ComboBoxGadget(2, 10, 70, 250, 21, #PB_ComboBox_Editable)
BindEvent(#PB_Event_Gadget, @event(), 0, 2, #PB_EventType_Change)
For a = 1 To 5
AddGadgetItem(2, -1,"ComboBox item " + Str(a))
Next
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Will man allerdings unterscheiden ob der Text im Textfeld sich geändert hat oder ein anders Element gewählt wurde so glaube ich nicht, daß das über Bindevent möglich ist, da müsste man denke ich mit einem Windowcallback arbeiten.
Re: Combobox - Bindevent
Verfasst: 17.03.2015 14:45
von NicTheQuick
Ich glaube schon, dass ich das richtig verstanden habe. Ich habe nämlich bei meinem Test nichts getippt, sondern nur die Einträge angeklickt.
Wann nun das Event kommt und wann sich tatsächlich der Text im Gadget ändert, kann sich aber von Betriebssystem zu Betriebssystem unterscheiden. Vielleicht geht es deswegen bei mir korrekt, aber bei deiner Windows-Version gibt es diesen Fehler.
Re: Combobox - Bindevent
Verfasst: 17.03.2015 17:15
von shim
Also: 5.31 Windows
Es scheint also bei manchen Systemen zu funktionieren, bei anderen nicht. Komisch ist das schon, da der gleich Code ja OHNE das editable-Flag problemlos funktioniert.
Ob nun Bug oder kein Bug, das Verhalten ist nicht durchgängig auf allen Systemen gleich. Allein das würde ich mal grob gesagt als nicht ganz in Ordnung empfinden, zumal es sich um "normale" PB-Befehle handelt.
Es gibt natürlich eine Lösung, indem man mit setgadetstate(getgadgetstate()) den ausgewählten zum aktuellen Eintrag erhebt, aber aus meiner Sicht ist das eher eine Krücke.