Trägheit der Controls
-
Hallo,
Ich habe eine ganz normale CComboBox. In OnSelchange() frage ich nach Änderung der Selektierung ab, was der Nutzer denn nun ausgewählt hat. Zur Abfrage verwende ich GetWindowText - ist einfach nicht so umständlich wie GetCurSel() und dann durchhangeln bis zu passenden Eintrag. Erstaunlicherweise kriege ich dort, aber immer die alte Auswahl und nicht die aktuelle. Nun habe ich einfach mal einen Timer in OnSelChange gestartet und frage darin 5ms später das gleiche nochmal ab und siehe da -> alles wunderbar.
Nun zu meinen Fragen :
1.) Ist dieses Verhalten "normal"
2.) kann man sowas auch bei anderen MFC Controls beobachten
Bin mal gespannt.....
-
Das ComboBox Control schickt erst die Nachricht WM_SELCHANGE und setzt anschließend den Window Text.
-
Was meinst Du mit 'Durchhangeln' ?
Zu 1. Ja
Zu 2. Ja (mir fällt aber gerade keines ein)Lösung: Frage einfach CBN_SELENDOK ab
-
Mit GetCurSel() kriege ich ja nur den int - Wert der aktuellen Selektion. Da ich die Combobox vorher mit einer Liste von Strings fülle, müßte ich mich nun durch diese Liste Hangeln, um den selektierten String zu ermitteln - Das verbietet meine angeborene Faulheit :).
CBN_SELENDOK - habe ich abgefragt, aber da läuft er noch vor CBN_SELCHANGE rein (bevor die Selektion - Box wieder zugeklappt wird). Das Ergebnis ist also das selbe. Zumindes, wenn ich nur mit GetWindowText() abfrage.
@Nemesyzz:
Das wär eine Erklärung. Aber irgendwie geht das aus der MSDN nicht hervor. Naja, dann bleibt das ganze eben mit Timer drinn - Was solls.
-
Original erstellt von TheBigW:
**
Mit GetCurSel() kriege ich ja nur den int - Wert der aktuellen Selektion. Da ich die Combobox vorher mit einer Liste von Strings fülle, müßte ich mich nun durch diese Liste Hangeln, um den selektierten String zu ermitteln - Das verbietet meine angeborene Faulheit :).**Heißer Tipp:
Schau dir auch ab und zu mal an, welche Memberfunktionen die Steuerelemente noch so haben. Dann wär dir bei CComboBox auch GetLBText aufgefallen.
-
Oh, zu spät
-
oki, das mit CBN_SELENDOK wußt ich net (nie gebraucht)
ABER:
Weiß echt net, wasCString str; m_ComboBox.GetLBText( m_ComboBox.GetCurSel(), str);
mit 'Durchhangeln' zu tun hat!
-
CComboBox::GetLBText,
stimmt, wenn ich früher mal über die Funktion gestolpert wäre hätte sich das ganze schon erledigt. Sory. Mhh, Ich wäre auch nie auf die Idee gekommen unter GetLBText zu suchen. Nehme an LB steht für Listbox - darauf muß der Mensch erstmal kommen. Mir gings halt auch eher darum nachzuvollziehen, warum das eben so mit GetWindowText in dem Fall nicht funktioniert.
Tja wer lesen kann ist klar im Vorteil:)Danke für eure Hilfe