Beim auslesen Combobox bekomme ich falshe werte.

Gast #1364369
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
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.
Gast #1364417
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.
#1364426
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.
Persönliche Seite #1364440
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...
#1364442
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
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
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.