Seite 1 von 1

ComboBoxGadget mit vielen Daten

Verfasst: 02.04.2020 20:57
von marcelx
Hallo zusammen,

ich verwenden ComboBoxGadget mit viel Daten.
1.) es dauert lang bis alle Daten in ComboBoxGadget sind
2.) während das setzen im ComboBoxGadget werden die andere Gadget nicht angezeigt.

Gibt es da ein Lösung?

Code: Alles auswählen

If OpenWindow(0, 0, 0, 270, 180, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ComboBoxGadget(1, 10, 30, 205, 21, #PB_ComboBox_Editable)
  
  StringGadget(2, 10, 60, 45, 21, "", #PB_String_ReadOnly) 
  ButtonGadget(3, 50, 90, 50,21,"Test")
  max = 60000
  Time = ElapsedMilliseconds()
  For a = 1 To max
    AddGadgetItem(1, -1,"ComboBox item " + Str(a))
  Next
  Debug ElapsedMilliseconds()-Time
  
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

EndIf

Re: ComboBoxGadget mit vielen Daten

Verfasst: 02.04.2020 23:22
von mk-soft
Macht mit so vielen Eintragungen keinen sinn.
Selbst Datenbank Programme begrenzen Ihre Liste auf etwas 1000 Eintragungen und laden erst nach Anfrage nach.

Re: ComboBoxGadget mit vielen Daten

Verfasst: 03.04.2020 11:14
von Lord
mk-soft hat geschrieben:Macht mit so vielen Eintragungen keinen sinn.
...
Da gebe ich mk-soft Recht.
Willst Du die Wartezeit aber trotzdem etwas verkürzen:

Code: Alles auswählen

Enumeration #PB_Event_FirstCustomValue
  #ComboFilled
EndEnumeration

Define max.i = 60000

Procedure FillCombo(max)
  Protected a.i, Time.i
  Time = ElapsedMilliseconds()
  DisableGadget(1, #True)
  DisableGadget(2, #True)
  DisableGadget(3, #True)
  SendMessage_(GadgetID(1),#WM_SETREDRAW,#False,0)
  For a = 1 To max
    AddGadgetItem(1, -1,"ComboBox item " + Str(a))
  Next
  SendMessage_(GadgetID(1),#WM_SETREDRAW,#True,0)
  Time=ElapsedMilliseconds()-Time
  SetWindowTitle(0, Str(Time)+" ms")
  PostEvent(#ComboFilled)
EndProcedure
Procedure EnableGadgets()
  DisableGadget(1, #False)
  DisableGadget(2, #False)
  DisableGadget(3, #False)
EndProcedure

If OpenWindow(0, 0, 0, 270, 180, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ComboBoxGadget(1, 10, 30, 205, 21, #PB_ComboBox_Editable)
 
  StringGadget(2, 10, 60, 45, 21, "", #PB_String_ReadOnly)
  ButtonGadget(3, 50, 90, 50,21,"Test")
  BindEvent(#ComboFilled, @EnableGadgets())
  CreateThread(@FillCombo(), max)
 
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

EndIf

Re: ComboBoxGadget mit vielen Daten

Verfasst: 03.04.2020 11:36
von Derren
Wer soll denn 60.000 Einträge in einer ComboBox durchsuchen?

Bild

Bild

Bild

Re: ComboBoxGadget mit vielen Daten

Verfasst: 04.04.2020 10:42
von marcelx
Es geht um die Eingabe eine Ort aus eine Liste.
Durch Eingabe der erste Buchstaben, wird der valide Name gefunden und angezeigt.
Siehe auch http://forums.purebasic.com/german/view ... hp?t=31926

Danke Lord für die Lösung mit BindEvent/CreateThread