Werteeingabe in eine ComboBox



  • Hallo Leute,

    ich habe in einem Dialog eine ComboBox mit vorgegebenen Werten.
    Wenn ich nun z.B. den Wert 120 frei eingebe und das Feld verlasse, wird der vorgegebene Wert 1200 angezeigt und gesetzt.
    Wie kann ich Werte eingeben, welche auch Teil von Vorgaben sind?

    Danke vorab



  • Ich schätze mal da gibt es ne Nachricht die anzeigt, daß der Text geändert wurde.
    Und was du dann mit dem Text machst bleibt dir überlassen.
    (genauer gehts nicht, da dein letzter Satz etwas mystisch ist.)



  • Hallo nö,

    danke für den Tip.
    Also mein letzter Satz meint: Wenn ich z.B. die Zahl 120
    in die ComboBox eingebe (nicht wähle) springt die Anzeige zum
    nächsten passenden Vorgabewert, in diesem Fall der Wert 1200.
    Ich will aber 120 als Zahl eingeben und weiter verwenden. In die Membervariable wird aber nach updatedata der Vorgabewert 1200 und nicht 120 eingelesen.

    Ich werde es aber mal mit Editchange probieren.



  • Normalerweise sollte das eine Combobox nicht tun, es sei denn du hast vorher schon was geändert.
    Das Autovervollständigen muss man eigentlich immer selbst implementieren,



  • Wenn du die (oder eine) Member als nen Wert (CString) festlegst wird der Wert gesetzt den du eingegeben hast.



  • Ich hab das gerade mal bei einem testprogramm ausprobiert und bei mir erfolgt keine Vervollständigung und es wird der richtige Wert angezeigt der in die Combobox geschrieben wurde.
    Hier mal der Code:

    void CComboDlg::OnOK() 
    {
        // TODO: Add extra validation here
    
        UpdateData(TRUE);//schreibt in das Member m_strCombo den  
                             //aktuellen Wert
        AfxMessageBox(m_strCombo);
    
        CDialog::OnOK();
    }
    


  • Danke für die Antworten,

    Also der eingegebene Wert wird tatsächlich korrekt in die
    Member geschrieben. Die Anzeige in der ComboBox zeigt aber
    nicht den eingetippten Wert, sondern springt zum nächsten
    passenden Vorgabewert. Die Member ist ein CString und wird
    später konvertiert.
    Ich habe bisher dieses Problem durch ein Leerzeichen vor den
    Vorgabewerten umgangen. Die Auswahl leidet allerdings darunter,
    weil beim dropdown immer der Anfang der Listeneinträge gezeigt
    wird.
    Hier ein konkretes Beispiel:
    Vorgabeliste: Werte 100, 200, 300, 400, 500, ...
    Gebe ich den Wert 30 ein, wird 300 angezeigt und 30 in der Member
    gespeichert. Die 300 bleibt in der Anzeige auch nach erneutem Öffnen
    des Dialoges und Initialisierung mit 30.
    Eine Lösung wäre das Hinzufügen des neuen Wertes, aber die Liste soll
    nur Standardwerte enthalten.

    Vielleicht hat jemand eine Idee 🙂



  • Welche Behandlungsroutinen für die ComboBox hast du denn sonst noch implementiert?



  • Hallo thomas80d

    in OnKillfocus erfolgt die Wertzuweisung an die Member
    mittels UpdateData und die Zuweisung des Memberwertes
    an eine Klassenvariable über eine Zugriffsfunktion.


Anmelden zum Antworten