Forum: PC-Programmierung Beim auslesen Combobox bekomme ich falshe werte.


von Gast (Gast)


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?

von Manuel (Gast)


Lesenswert?

Gute Frage...

von der mechatroniker (Gast)


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.

von Gast (Gast)


Lesenswert?

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.

von Gast (Gast)


Lesenswert?

ich habe auch so probiert

int num_auswahl;
num_auswahl=combo->GetCurSel();

DWORD data;
data=combo->GetItemData(num_auswahl);

auch erfolglos!!

von Karl H. (kbuchegg)


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.

von Gast (Gast)


Lesenswert?

GetLBText()
Den kennt das Programm auch nicht

Kann sein, dass ich mein Kombobox falsch definiere?
So mache ich es im Moment!
CEdit *pEdit;

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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...

von Karl H. (kbuchegg)


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!

von Gast (Gast)


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.

von Karl H. (kbuchegg)


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?

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
Noch kein Account? Hier anmelden.