Textfeld soll nach "Enter" Focus verlieren
-
Hi,
wie erreiche ich es, dass ein Textfeld den Focus verliert (bzw. ein anderes Steuerelement den Focus bekommt), sobald der Benutzer die Eingabe mit "Enter" abschließt?!
-
Ich würde das in PreTranslateMessage angehen:
// Wurde eine Taste gedrückt? if (pMsg->message == WM_KEYDOWN) { UINT nKeyCode = pMsg->wParam; // virtual key code of the key pressed if (nKeyCode == VK_ENTER) { pMsg->wParam = VK_TAB; return CDialog::PreTranslateMessage(pMsg); }
Kann sein, dass das nicht kompiliert und du noch casten musst, aber so etwa sollte das gehen.
-
Habe folgendes probiert:
BOOL CKlasseDlg::PreTranslateMessage(MSG* pMsg) { if (pMsg->message == WM_KEYDOWN) { UINT nKeyCode = pMsg->wParam; // virtual key code of the key pressed if (nKeyCode == VK_ENTER) { pMsg->wParam = VK_TAB; return CDialog::PreTranslateMessage(pMsg); } } }
Da bekomme ich: VK_ENTER' : nichtdeklarierter Bezeichner
Dann habe ich VK_RETURN probiert, sobald ich dann den Dialog starte zieht er mir 100% Prozessor und es geht nix mehr
-
Halt das Programm doch mal an und guck, was da los ist.
Ansonsten gibt es noch eine andere Lösung:
Enter irgendwie abfangen und dann kannst du mitGetNextDlgTabItem(GetDlgItem(IDC_wasauchimmer), FALSE)->SetFocus();
arbeiten.
-
BOOL CKlasseDlg::PreTranslateMessage(MSG* pMsg) { if (pMsg->message == WM_KEYDOWN) { UINT nKeyCode = pMsg->wParam; // virtual key code of the key pressed if (nKeyCode == VK_RETURN) { pMsg->wParam = VK_TAB; } } return CDialog::PreTranslateMessage(pMsg); }
-
Habs jetzt so gelöst:
BOOL CKlasseDlg::PreTranslateMessage(MSG* pMsg) { if (pMsg->message == WM_KEYDOWN) { UINT nKeyCode = pMsg->wParam; // virtual key code of the key pressed if (nKeyCode == VK_RETURN) { GetDlgItem(IDC_LST_LUFTMENGE)->SetFocus(); return CDialog::PreTranslateMessage(pMsg); } } return CDialog::PreTranslateMessage(pMsg); }
-
Jetzt springt der aber immer da hin, wenn du Enter drückst - nicht nur dann, wenn du in dem Edit Enter drückst.
-
Stimmt, drum hab ich noch folgende Überprüfung gemacht:
if(pMsg->message == WM_KEYDOWN && GetFocus()==GetDlgItem(IDC_EDT_LISTE))
In einem Dialog funktioniert das jetzt auch, in einem anderen aber leider nicht, da schließt er den Dialog mit OnOK() sobald ich Enter drücke?!
-
Weil wohl dein 'Beenden' oder 'Ok' Button als Default-Button eingestellt ist.
Schau mal (falls VC .NET) bei deinem Button mit IDOK, ob Default Button auf True steht.
-
Hab VC 6, aber mit pMsg->wParam = VK_TAB; gehts jetzt bei beiden
-
Na, dann.