focus auf Dialogfeld
-
Hallo NG.
Trotz intensiver Recherche der MSDN und von Google, funzt der folgende Code nicht. Wisst Ihr warum ich auf dieses Eingabefeld innerhalb eines Dialogfeldes keinen Focus setzen kann? Die Funktion DDX_FieldText rufe ich innerhalb der doDataExchange().
void input::DDX_FieldText( CDataExchange *pDX, UINT nID, CString& datevar ) { if ( pDX->m_bSaveAndValidate ) { if( datevar.GetLength() < 5 ) { MessageBox( "Toll!" ); GetDlgItem( nID ) -> SetFocus( ); pDX->Fail(); } } }
Vielen Dank und Gruß,
c[ Dieser Beitrag wurde am 16.10.2002 um 13:36 Uhr von connor editiert. ]
-
SIEHE MSDN:
Fail() Called when validation fails. Resets focus to the previous control and throws an exception
-
Vielleicht kannst Du mir noch weiter auf die Sprünge helfen.
Also, entweder eine andere Möglichkeit die Validation anders abzubrechen oder eine andere Möglchkeit den Focus richtig zu setzen.Danke,
c
-
Ist irgendwie unschön für den Benutzer, das überhaupt aufzurufen. Erst kommt Deine MessageBox mit "Toll", und danach noch die von CDataExchange, dass die Validierung nicht funktioniert hat. Das ist nervig.
Da Fail() ohne den Fokus auf ein anderes Control zu setzen, einfach nur eine UserException auswürft, kannst Du statt pDX->Fail() einfach nur AfxThrowUserException() aufrufen.
-
Vielen Dank für die Hilfe, werde das ganze noch überarbeiten. Ich glaube, das mir diese Standard Überprüfungen auch zu unflexibel sind. Welcher User gibt z.B. schon ein Float korrekt mit Punkt an, das wiederrum die Standardroutine anmeckert. Den Focus zu setzen klappt ja immerhin auch schon.