Enter in Combobox und Edit feld schließ Programm
-
Tja siehe Topic.
Welche Nachricht muss ich abfangen, um das zu verhindern? hab schon die CBN_SELENDOK aber die ignoriert er.
-
OnOK
-
estartu schrieb:
OnOK
nö bringt nichts, hatte ich ja als erstes probiert
-
Was hast du damit probiert?
-
Die zu überschreiben. Passiert aber dasselbe.
Dasselbe mit dem Esc. Kann man das nicht irgendwie ausschalten(also nur die Tastenreaktion), ohne gleich die Methode zu überschreiben?
-
also noch zur Ergänzung: Ich habe einen Dialog, der OK-Button war das erste was gelöscht wurde.
Nun habe ich eine Combobox und ein Editfeld. Wenn ich den Focus da reinsetze und Enter drücke schließt sich das Programm. Bei der Combobox habe ich sogar das Ereignis abgefangen, also das CBN_SELENDOK um den Enter auszuwerten, aber der geht net in die Methode, auch hier schließt er einfach mein Programm.
Und "virtual void OnOk() {}" bringt auch nix
-
Augen auf:
virtual void OnOk() {}
virtual void OnOK() {}
Sowas kopiert man am besten aus einer Klasse, wo es der Assistent gemacht hat - der vertippt sich nicht.
-
estartu schrieb:
Augen auf:
virtual void OnOk() {}
virtual void OnOK() {}
Sowas kopiert man am besten aus einer Klasse, wo es der Assistent gemacht hat - der vertippt sich nicht.
OK
Aber meine nachricht die CBN_... tut er trotzdem nicht ausführen? Warum schickt der das Enter an den Dialog und nicht an die Combobox, obwohl diese den Focus hat?
-
Tja, vielleicht ist die gerade nicht zuständig oder die andere wird vorher abgearbeitet - ich weiß es nicht, sorry.
So eine gut erklärte Nachrichtenübersicht (analog zu class members) wäre echt mal nett.
-
hm ohh liegt wohl daran, dass das nicht die richtige Nachricht ist.
Wie kann ich nun abfangen, ob der Nutzer in dem Editfeld der Combobox Enter gedrückt habe?
Genauso nervig: ich fange ab, dass der Nutzer einen neuen Eintrag gewählt hat in dem DropDown-Menu, jedoch wenn die NAchricht rausgeht steht noch nicht der neue Text im Feld, sodass ich mit GetWindowText rankommen würde.
Hat da wer ne Idee?
-
*Push*
Kann ich nun irgendwie das Enter in der Combobox abfangen ohne mit ne neue Klasse von Combobox ableiten zu müssen?
-
Ich weiß es leider nicht. Ich arbeite immer nur mit Comboboxen, wo man nur wählen und nicht eingeben kann.
-
für alle mit gleichem Problem, habe bisher nur folgende Lösung gefunden. Neue Klassen von CComboBox ableiten und PreTranslateMessage aufrufen
BOOL CMyCombobox::PreTranslateMessage(MSG* pMsg) { if (pMsg->message == WM_KEYDOWN) { CWnd* pParent = GetParent(); if ((pParent != NULL) && (MapVirtualKey(pMsg->wParam,2) == 13)) { pParent->SendMessage(WM_ENTERDOWN,NULL,NULL); } } return CComboBox::PreTranslateMessage(pMsg); }
Also WM_ENTERDOWN ist meine eigen User-Message, die ich weiterleite.
WM_KEYDOWN direkt abfangen hat nix gebracht. Irgendwie wird die intern vorher von der MFC anders behandelt, deswegen die PreTranslate
-
geh mal in den Klassenassistenen (strg+w) und bearbeite den Code, der ausgeführt wird, wenn ID_OK geklickt wird... (vllcht. OnOK)
dort löschst du den Code heraus:
CDialog::OnOK();mfg (c)h
-
chille07 schrieb:
geh mal in den Klassenassistenen (strg+w) und bearbeite den Code, der ausgeführt wird, wenn ID_OK geklickt wird... (vllcht. OnOK)
dort löschst du den Code heraus:
CDialog::OnOK();mfg (c)h
Hatten wir doch schon weiter oben, das bringt nix.
Problem ist, dass das Enter in der Combobox an den Dialog weiter gereicht wird. Würde ich das da abfangen, würde ja jedes Enter, auch außerhalb der Combobox genommen werden. Ich will aber nur das Enter, wenn der Cursor im Editfeld der Combobox steht.