Seite 1 von 2
ComboBox-Gadget und #CBN_SELCHANGE
Verfasst: 23.01.2010 19:12
von ThoPie
Hallo,
ich habe zwei kombinierte ComboBoxen (Postleitzahl und Ort). Die Änderung der ComboBox Postleitzahl werte ich mit #CBN_SELCHANGE aus und möchte dazu den passenden Ort aus einer Datenbank anzeigen. Mein Problem ist nun, dass bei der Auswertung mit GetGadgetText() immer die Postleitzahl vor der Auswahl ausgelesen wird.
Also ist "11111" in der ComboBox - Benutzer wählt "22222" aus - ich werte über #CBN_SELCHANGE und GetGadgetText() aus und erhalte "11111", ich möchte aber "22222" haben.
Was mache ich da falsch?
Vielen Dank.
Re: ComboBox-Gadget und #CBN_SELCHANGE
Verfasst: 23.01.2010 19:17
von Kaeru Gaman
MSDN hat geschrieben:When a combo box receives a CBN_SELCHANGE notification message, GetDlgItemText() will give the text of the previous selection and not the text of the new selection. To get the text ...
http://support.microsoft.com/kb/66365
Re: ComboBox-Gadget und #CBN_SELCHANGE
Verfasst: 23.01.2010 20:15
von Kiffi
Code: Alles auswählen
#Window=0
#Combobox=0
If OpenWindow(#Window, #PB_Ignore, #PB_Ignore, 270, 140, "ComboBoxGadget")
ComboBoxGadget(#Combobox, 10, 10, 250, #PB_Any)
AddGadgetItem(#Combobox, -1, "11111")
AddGadgetItem(#Combobox, -1, "22222")
AddGadgetItem(#Combobox, -1, "33333")
SetGadgetState(#Combobox, 0)
Repeat
WWE=WaitWindowEvent()
Select WWE
Case #PB_Event_Gadget
Select EventGadget()
Case #Combobox
Select EventType()
Case #CBN_SELCHANGE
Debug GetGadgetItemText(#Combobox, GetGadgetState(#Combobox))
EndSelect
EndSelect
EndSelect
Until WWE = #PB_Event_CloseWindow
EndIf
Grüße ... Kiffi
Re: ComboBox-Gadget und #CBN_SELCHANGE
Verfasst: 23.01.2010 20:37
von ts-soft
Ich komme auch mit GetGadgetText() zum richtigen Ergebnis. (PB4.41)
Re: ComboBox-Gadget und #CBN_SELCHANGE
Verfasst: 23.01.2010 20:45
von ThoPie
Vielen Dank.
Ich habe die Lösung von Kiffi eingebaut.
Möglicherweise funktioniert GetGadgetText() nicht weil meine ComboBox "Editable" ist und ich noch extra über ein Callback eine Autovervollständigung eingebaut habe.
Nochmal Danke.

Re: ComboBox-Gadget und #CBN_SELCHANGE
Verfasst: 01.12.2010 11:31
von SaschaDE
Hallo,
ich bin neu hier und gerade dabei zu prüfen, ob sich Purebasic gut für die Anwendungen in unserer Firma eignet ... immer noch mit der Demo-Version (werde es aber bestellen wenn die Tests gut laufen, bis jetzt bin ich sehr begeistert).
Zum Test erstelle ich ein RS232 Programm, das mit einem Mikrocontroller in unserer Hardware kommunizieren soll.
Zur Auswahl des Ports nutze ich eine ComboBox. Im Moment bin ich hier:
Code: Alles auswählen
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)
;- Window Constants
;
Enumeration
#Window_0
EndEnumeration
;- Gadget Constants
;
Enumeration
#String_0
#Combo_0
EndEnumeration
Global device.s : device.s = ""
Global portNumber.b = 0
If OpenWindow(#Window_0, 216, 0, 266, 144, "HPC643 RS232", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
StringGadget(#String_0, 10, 40, 100, 20, "")
ComboBoxGadget(#Combo_0, 10, 10, 100, 20)
For I = 0 To 16
device = "COM" + Str(I)
If OpenSerialPort(I, device, 57600, #PB_SerialPort_EvenParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
AddGadgetItem(#Combo_0, -1,device)
CloseSerialPort(I)
portNumber = I
EndIf
Next
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_CloseWindow ; If the user has pressed on the close button
Quit = 1
EndIf
Until Quit = 1
EndIf
Nachdem die Combobox mit den vorhandenen Ports gefüllt ist (hoffe mal das man das so machen kann) ... möchte ich nun mit #CBN_SELCHANGE wie im Beispiel hier im Thread feststellen, dass sich der Zustand der ComboBox verändert hat.
Leider erscheint beim Compilieren die Fehlermeldung, dass es #CBN_SELCHANGE nicht kennt. Ist das eine Funktion die ich nur mit der Kaufversion nutzen kann ?
Re: ComboBox-Gadget und #CBN_SELCHANGE
Verfasst: 01.12.2010 12:33
von Kiffi
Welche Demo-Version hast Du denn? Aktuell ist die 4.51
#CBN_SELCHANGE sollte als solches auch in der Demo-Version
vorhanden sein. Ansonsten einfach die Konstante selber belegen.
Grüße ... Kiffi
Re: ComboBox-Gadget und #CBN_SELCHANGE
Verfasst: 01.12.2010 13:32
von SaschaDE
Hallo,
Ich habe PureBasic 4.50 (Windows - x86).
Wenn ich #CBN_SELCHANGE selbst mit 1 belege geht es schon besser, vielen Dank für den Tip. Es springt dann in den Case, wenn ich auf die ComboBox klicke. Ich suche eigentlich aber ein Event das erst dann ausgelöst wird, wenn der nutzer ein Element der ComboBox ausgewählt hat.
Ist aber alles nicht weiter schlimm ... ich habe jetzt einen Butten neben der ComboBox den der Nutzer klicken muss nachdem er mit der ComboBox den Port geählt hat.
Vielen Dank nochmal für die schnelle Hilfe, eine gute Community ist sehr wichtig für die Kaufentscheidung.
Re: ComboBox-Gadget und #CBN_SELCHANGE
Verfasst: 01.12.2010 13:38
von Kiffi
SaschaDE hat geschrieben:ich habe jetzt einen Butten neben der ComboBox den der Nutzer klicken muss nachdem er mit der ComboBox den Port geählt hat.
das ist aber nicht so schön für den Anwender.
Code: Alles auswählen
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)
;- Window Constants
;
Enumeration
#Window_0
EndEnumeration
;- Gadget Constants
;
Enumeration
#String_0
#Combo_0
EndEnumeration
Global device.s : device.s = ""
Global portNumber.b = 0
If OpenWindow(#Window_0, 216, 0, 266, 144, "HPC643 RS232", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
StringGadget(#String_0, 10, 40, 100, 20, "")
ComboBoxGadget(#Combo_0, 10, 10, 100, 20)
For I = 0 To 16
device = "COM" + Str(I)
If OpenSerialPort(I, device, 57600, #PB_SerialPort_EvenParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
AddGadgetItem(#Combo_0, -1,device)
CloseSerialPort(I)
portNumber = I
EndIf
Next
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
If EventGadget() = #Combo_0
If EventType() = #CBN_SELCHANGE
Debug "Juhu!"
EndIf
EndIf
EndIf
If Event = #PB_Event_CloseWindow ; If the user has pressed on the close button
Quit = 1
EndIf
Until Quit = 1
EndIf
Grüße ... Kiffi
Re: ComboBox-Gadget und #CBN_SELCHANGE
Verfasst: 01.12.2010 13:58
von SaschaDE
Ahhh ... das geht jetzt super ! Vielen Dank !!
