2008-09-12 12 views
2

Ich muss eine combobox mit einem neuen Wert aktualisieren, damit der darin enthaltene Text geändert wird. Der sauberste Weg, dies zu tun ist, nachdem die combobox initialisiert wurde und mit einer Nachricht.Programmgesteuertes Ändern der Combobox

Also ich versuche, eine postmessage zu der HWND, die die combobox enthält, zu fertigen.

Also, wenn ich eine Nachricht an sie senden möchte, das aktuelle Element zum n-ten Element ändern, was würde die postmessage aussehen?

Ich vermute, dass es ON_CBN_SELCHANGE beinhalten würde, aber ich kann es nicht richtig funktionieren.

+0

Gibt es eine Sprache insbesondere Sie in für ein Beispiel suchen? C++? – GEOCHET

+0

Der Hinweis ist im MFC-Tag :) –

Antwort

8

Sie wollen ComboBox_SetCurSel:

ComboBox_SetCurSel(hWndCombo, n); 

oder wenn es sich um eine MFC CComboBox Kontrolle ist können Sie wahrscheinlich tun:

m_combo.SetCurSel(2); 

Ich könnte mir vorstellen, wenn Sie es manuell tun Sie auch Sendmessage wollen lieber als PostMessage. CBN_SELCHANGE ist die Benachrichtigung, dass die Steuerung an Sie zurücksendet, wenn die Auswahl geändert wird.

Schließlich möchten Sie möglicherweise das C++ - Tag zu dieser Frage hinzufügen.

1

Eine kurze Version:

const int index = 0; 
m_comboBox.PostMessage(CBN_SELCHANGE, index); 
0

Was schief gehen könnte, ist die Auswahl in der Auswahländerung Nachrichtenhandler geändert wird, die in einer anderen Auswahl ändern Meldung.

Eine Möglichkeit, um diese unerwünschte Rückkopplungsschleife zu erhalten, 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; 
    } 
} 
-1

wenn Sie fx den Titel ändern mögen - das ist die Linie Wenn die Combobox geschlossen ist, können Sie Folgendes tun:

m_ComboBox.DeleteString (0); // Lösche vorher, falls vorhanden, 0 = visuelle Zeichenkette m_ComboBox.AddString (_T ("Hallo da"));

setzen Sie dies in FX. in OnCloseupCombo - wenn ein Ereignis ein Dropdownbox Feuer

ON_CBN_CLOSEUP(IDC_COMBO1, OnCloseupCombo) 

Diese Änderung eine neue Zeichenfolge schließen nicht eine Auswahl der bereits zugeordnet ist Combobox Elemente

+0

Ich würde mich über einen Kommentar freuen, wenn ich abgelehnt werde, sonst kann ich es nicht ernst nehmen – serup

Verwandte Themen