Werte einer Combobox beim ändern aktualisieren

Hallo,
ich habe eine auf Dialogfeldern basierende Anwendung mit MFC und folgendes Problem:
Ich habe eine Combobox (Dropdown) und wenn der Anwender einen Eintrag auswählt (oder etw. ändert) soll die Eingabe ausgelesen werden und je nachdem ein Ereignis ausgelöst werden.
Ich habe schon mit verschiedenen Funktionen (OnCbnEditchangeDropdown(); OnCbnSelchangeDropdown(); OnCbnSelendokDropdown(); OnCbnEditupdateDropdown()) probiert sofort nach dem ändern den Eintrag auszulesen.
Die Funktionen wurden ausgeführt aber es konnte nicht der aktuelle Eintrag ausgelesen werden.
Was mach ich falsch, bzw. was kann ich tun?

gruß DR

Guck mal http://www.cpp-tutor.de/mfc/mfc/kap8/lektion3.htm

runterscrollen zu Combobox, Datentausch :smile:

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Also , hab ich mal gemacht,

START -> Programme -> Visual C++
Neues Project -> MFC Anwendung
Dialogfeldbasiert

Dann hab ich in der Form eine Combobox gemacht. Ein bisschen die Auswahl aufgezogen , Platz für 2 Eintraege :smile: . Typ einfach.

Jetzt hab ich die Combobox selektiert , rechte Maus und variable hinzufügen :smile: Hab ich mal m_combobox genannt.

Nun bin ich in

CTestDialogViewDlg::open\_mouth:nInitDialog() 

gegangen und hab die Combobox gefüllt
mit

m\_combobox.AddString("Selection 0");
m\_combobox.AddString("Selection 1");
m\_combobox.AddString("Selection 2");

danach bin ich wieder zum Layout und Combobox selektiert mit der Rechtenmaus und Ereignisshändler hinzufügen .
Da gibt es dann sowas wie
z.b. OnCbnSelchangeCombo1() also CbnSelchange auswählen.

da hab ich dann

void CTestDialogViewDlg::open\_mouth:nCbnSelchangeCombo1()
{
 // TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein.
 int currentselection;
 currentselection = -1;
 currentselection = m\_combobox.GetCurSel();
 TRACE("Curr select %d",currentselection);
}

Also innerhalb des dialoges weisst du es jetzt :smile:
siehe Ausgabe :smile: Trace

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Dann hab ich in der Form eine Combobox gemacht. Ein bisschen
die Auswahl aufgezogen , Platz für 2 Eintraege :smile: . Typ
einfach.

Bei mir ist das ein bisschen anders. Meine Combobox ist vom Typ „Dropdown“.

Jetzt hab ich die Combobox selektiert , rechte Maus und
variable hinzufügen :smile: Hab ich mal m_combobox genannt.

Du hast wahrscheinlich eine Control-Variable gewählt. Auch hier hab ich das etw. anders gemacht:
Ich habe ein Value-Variable vom Typ CString.(also z.B. m_strCombo1)

Da gibt es dann sowas wie
z.b. OnCbnSelchangeCombo1() also CbnSelchange auswählen.

da hab ich dann

void CTestDialogViewDlg::open_mouth:nCbnSelchangeCombo1()
{
// TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die
Benachrichtigung ein.
int currentselection;
currentselection = -1;
currentselection = m_combobox.GetCurSel();
TRACE(„Curr select %d“,currentselection);
}

Das hatte ich bei mir auch ausprobiert:

void CDialogDlg::open\_mouth:nCbnSelchangeCombo1()
{
 MessageBox(m\_strCombo1);
}

Auch mit

UpdateData(TRUE)

klappt es nicht.
Es erscheint ein leerer Dialog und auch erst nachdem man OK geklickt hat, erscheint die gewählte Auswahl in der Combobox.

gruß DR

Dann hab ich in der Form eine Combobox gemacht. Ein bisschen
die Auswahl aufgezogen , Platz für 2 Eintraege :smile: . Typ
einfach.

Bei mir ist das ein bisschen anders. Meine Combobox ist vom
Typ „Dropdown“.

Das ist nicht der Punkt der was daran ändert .

Jetzt hab ich die Combobox selektiert , rechte Maus und
variable hinzufügen :smile: Hab ich mal m_combobox genannt.

Du hast wahrscheinlich eine Control-Variable gewählt. Auch
hier hab ich das etw. anders gemacht:
Ich habe ein Value-Variable vom Typ CString.(also z.B.
m_strCombo1)

Meinst du jetzt ein CEdit oder ein CCombobox

Da gibt es dann sowas wie
z.b. OnCbnSelchangeCombo1() also CbnSelchange auswählen.

da hab ich dann

void CTestDialogViewDlg::open_mouth:nCbnSelchangeCombo1()
{
// TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die
Benachrichtigung ein.
int currentselection;
currentselection = -1;
currentselection = m_combobox.GetCurSel();
TRACE(„Curr select %d“,currentselection);
}

Das hatte ich bei mir auch ausprobiert:

void CDialogDlg::open_mouth:nCbnSelchangeCombo1()
{
MessageBox(m_strCombo1);
}

Also es wird in einer Combobox welcher ?? Eintrag als String abgelegt .

Soviel ich weiss geht das doch mit Get(INDEX , INSTRVARIABLE);

oder ist deine Combobox jetzt mit der STRING Zuweisung mehrzeilig ?

Weil im LayoutEditor erzeugt man eine Graphic , die Funktionen allerdings mit dessen Control Object, und bei einigen kann man das auch einem Value zuweisen , denke aber nur wenn die Structur es zulässt.
Rückabe wäre dann wert der Combobox als String , also immer der Gleiche ? oder der Selectierte zuerst und dann alle anderen. ?
Oder merkt sich die Combobox das. ?

Auch mit

UpdateData(TRUE)

klappt es nicht.
Es erscheint ein leerer Dialog und auch erst nachdem man OK
geklickt hat, erscheint die gewählte Auswahl in der Combobox.

gruß DR

Und darum denke ich mal Für eine Combobox kann man mit Value Typ String wenig anfangen, da meist der Index Typ int des Eintrages zurückgegeben wird und nimmer Text :smile:

Aber wenn du ne lösung findest , bin ich dabei :smile:

Wers besser weis, belehre mich bitte :smile:

Du hast wahrscheinlich eine Control-Variable gewählt. Auch
hier hab ich das etw. anders gemacht:
Ich habe ein Value-Variable vom Typ CString.(also z.B.
m_strCombo1)

Meinst du jetzt ein CEdit oder ein CCombobox

void CCombo::open\_mouth:nSelchangeCombo1() 
{
int index; CString Str;
index=m\_combo.GetCurSel();
m\_combo.GetLBText(index,Str);
m\_show=Str;
UpdateData(FALSE); 
}

Ok ich bin deinem Rat gefolgt und habe es mit einer ControlVariable gelöst.
Hat auch gut geklappt. Danke.

gruß DR