Hallo Leute mein Ziel ist es sobal der Wert sich in Comboox ändert, soll ein Unterprogramm "Berechnen()" starten. Bei Änderung von Combobox nutze ich das Programm OnCbnSelchangeFreq(). Ich lese mein ComboBox folgender Masse aus. pEdit->GetWindowText(FREQ); Es läuft eigentlich alles wunderbar, der befehl "Berechnen()" wird auch durchgeführt. Aber aus dem Combobox werden falsche Werte ausgelesen! D.h. Der Wert, welcher vorher stand, wird in das Programm "Berechnen()" genommen, nicht der aktuelle wert. Was mache ich falsch?
Wenn ich mich richtig erinnere, wird das markierte Element der Liste erst nach Abarbeiten der SelChange-Message in die Textbox übernommen. Das dient dazu, dass man im Message-Handler noch genau dieses Verhalten (das Übernehmen) ändern kann. Ich hab die API nicht im Kopf, aber irgendwie bekommt man auch den Index des selektierten Elements in der Liste raus. Probier mal, darauf loszugehen anstatt auf den WindowText.
ich programmiere übrignen cmit MFC C++ ich habe schon vile ausprobiert aber, die Befehle wie GETCURSEL oder pEdit.Items sind dem Programm gar nicht bekannt.
ich habe auch so probiert int num_auswahl; num_auswahl=combo->GetCurSel(); DWORD data; data=combo->GetItemData(num_auswahl); auch erfolglos!!
Gast schrieb: > ich habe auch so probiert > > int num_auswahl; > num_auswahl=combo->GetCurSel(); Bis hierher ist es korrekt > > DWORD data; > data=combo->GetItemData(num_auswahl); Du brauchst GetLBText(), nicht GetItemData. ItemData wäre ein Wert, den du mit SetItemData an den Eintrag gebunden hast.
GetLBText() Den kennt das Programm auch nicht Kann sein, dass ich mein Kombobox falsch definiere? So mache ich es im Moment! CEdit *pEdit;
Gast schrieb:
> ich habe schon vile ausprobiert aber, die Befehle wie GETCURSEL oder
Nur so als Tipp, eine Programiersprache folgt im Allgemeinen festen
Regeln, da muß man nicht alles irgenwie ausprobieren sondern mal
versuchen zu verstehen und anzuwenden.
Außerdem KÖNNTE es helfen wenn du einfach mal deine Code postest...
Gast schrieb: > GetLBText() > Den kennt das Programm auch nicht Du programmierst doch MFC, oder nicht? GetLBText ist eine Memberfunktion deines CComboBox Controls. > Kann sein, dass ich mein Kombobox falsch definiere? > So mache ich es im Moment! > CEdit *pEdit; Genau. Eine Kombobox heisst Combobox, weil man ein CEdit Control hernimmt um es im Programm zu repräsentieren. Warum nimmst du denn nicht den Wizzard, um in deinem Dialog ein ComboBox Controll Variable zu erzeugen. Der baut sie dann auch richtig ein. Im übrigen solltest du in der nächsten Bibliothek ein MFC-Buch besorgen. Für Komboboxen ist das richtige Control ein CComboBox Pointer. Welche Überraschung!
void bDlg:OnCbnSelchangefreq(){ CEdit* pEdit; pEdit=(CEdit*)GetDlgItem(IDC_FREQ); pEdit->GetWindowText(Freq); Berechnen(Freq); } Das ist der momentane Code, welche wie gesagt falsche Werte herausgibt.
Nochmal: Benutze am besten den Wizard um dir Dialogweit eine Combobox Control Variable erzeugen zu lassen. Das ist für dich das Allereinfachste. Wenn du mit GetDlgItem rumhantieren musst, bist du entweder fortgeschrittener MFC Programmierer oder du machst etwas grundsätzlich falsch (nämlich nicht dem Wizard für Routineaufgaben zu benutzen)
1 | void bDlg:OnCbnSelchangefreq() |
2 | {
|
3 | CString Freq; |
4 | CComboBox* pCombo = NULL; |
5 | |
6 | pCombo = (CComboBox*)GetDlgItem( IDC_FREQ ); |
7 | if( pCombo ) { |
8 | int Index = pCombo->GetCurSel(); |
9 | if( Index != CB_ERR ) { |
10 | pCombo->GetLBText( Index, Freq ); |
11 | Berechnen( Freq ); |
12 | }
|
13 | }
|
14 | }
|
(aus dem Gedächtnis geschrieben, vorbehaltlich Tippfehler) Deine Combobox ist of Listen-Modus geschaltet?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.