Beim auslesen Combobox bekomme ich falshe werte.

Gast #1364369
Lesenswert?

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?
Gast #1364394
Lesenswert?

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.
#1364426
Lesenswert?

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.
#1364442
Lesenswert?

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!
Gast #1364448
Lesenswert?

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.
#1364453
Lesenswert?

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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren