mikrocontroller.net

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


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Manuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gute Frage...

Autor: der mechatroniker (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe auch so probiert

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

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

auch erfolglos!!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
GetLBText()
Den kennt das Programm auch nicht

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

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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)
void bDlg:OnCbnSelchangefreq()
{
  CString    Freq;
  CComboBox* pCombo = NULL;

  pCombo = (CComboBox*)GetDlgItem( IDC_FREQ );
  if( pCombo ) {
    int Index = pCombo->GetCurSel();
    if( Index != CB_ERR ) {
      pCombo->GetLBText( Index, Freq );
      Berechnen( Freq );
    }
  }
}

(aus dem Gedächtnis geschrieben, vorbehaltlich Tippfehler)

Deine Combobox ist of Listen-Modus geschaltet?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.