Programmatische Änderung Combobox
-
09-06-2019 - |
Frage
Ich brauche einen combobox
mit einem neuen Wert aktualisieren, damit sie das reflektierte Text in sie sich ändert. Der sauberste Weg, dies zu tun ist, nachdem die combobox
has und mit einer Meldung initialisiert.
Also ich versuche, eine postmessage
zum Hwnd Handwerk, das den combobox
enthält.
Also, wenn ich eine Nachricht an sie senden möchte, das aktuell ausgewählte Element des n-ten Punkt zu ändern, was wäre die postmessage
aussehen?
Ich vermute, dass es ON_CBN_SELCHANGE
bedeuten würde, aber ich kann es nicht richtig zu arbeiten.
Lösung
Sie wollen ComboBox_SetCurSel :
ComboBox_SetCurSel(hWndCombo, n);
oder wenn es eine MFC CComboBox Steuerung können Sie wahrscheinlich tun:
m_combo.SetCurSel(2);
Ich könnte mir vorstellen, wenn Sie es manuell tun würden Sie auch Sendmessage wollen, anstatt Postmessage. CBN_SELCHANGE ist die Benachrichtigung, dass die Steuerung sendet Sie zurück , wenn die Auswahl geändert wird.
Schließlich sollten Sie den c ++ Tag auf diese Frage hinzuzufügen.
Andere Tipps
Eine kurze Version:
const int index = 0;
m_comboBox.PostMessage(CBN_SELCHANGE, index);
Was könnte schief gehen wird die Auswahl in der Auswahländerung Nachrichtenhandler wird geändert, das in einer anderen Auswahl Änderungsmeldung zur Folge hat.
Eine Möglichkeit, dies unerwünschte Rückkopplungsschleife zu bekommen ist eine Sentinel an die Auswahländerungsnachrichtenhandler hinzufügen, wie unten dargestellt:
void onSelectChangeHandler(HWND hwnd)
{
static bool fInsideSelectChange = 0;
//-- ignore the change message if this function generated it
if (fInsideSelectChange == 0)
{
//-- turn on the sentinel
fInsideSelectChange = 1;
//-- make the selection changes as required
.....
//-- we are done so turn off the sentinel
fInsideSelectChange = 0;
}
}
Wenn Sie FX wollen den Titel ändern - das ist die Linie angezeigt, wenn Combobox geschlossen ist, dann können Sie wie folgt vorgehen:
m_ComboBox.DeleteString (0); // zuerst löschen vorherige falls vorhanden, 0 = visuelle Zeichenfolge m_ComboBox.AddString (_T ( "Hallo"));
setzen diese in fx. in OnCloseupCombo - wenn ein Ereignis ein Dropdownbox Feuer schließen
ON_CBN_CLOSEUP(IDC_COMBO1, OnCloseupCombo)
Diese Änderung ist eine neue Zeichenfolge nicht eine Auswahl der bereits zugewiesen Combobox Elemente