T
Achsooo, er motzt, wenn nur ein '-' im Textfeld steht.... Jetzt verstehe ich.
Dann schreib doch einfach ganz frech dein eigenes UpdateData (Das Original steht in mfc/src/Wincore.cpp). Ich habe noch einen weiteren Parameter eingefügt, mit dem Du festlegen kannst, ob Du eine Meldung sehen willst.
//irgendwo in der *.h
class CMeinDialog
{
//...
BOOL UpdateData(BOOL bSaveAndValidate = TRUE, BOOL bReportError = TRUE);
//...
};
// irgendwo in der *.cpp
BOOL CMeinDialog::UpdateData(BOOL bSaveAndValidate, BOOL bReportError)
{
ASSERT(::IsWindow(m_hWnd)); // calling UpdateData before DoModal?
CDataExchange dx(this, bSaveAndValidate);
// prevent control notifications from being dispatched during UpdateData
_AFX_THREAD_STATE* pThreadState = AfxGetThreadState();
HWND hWndOldLockout = pThreadState->m_hLockoutNotifyWindow;
ASSERT(hWndOldLockout != m_hWnd); // must not recurse
pThreadState->m_hLockoutNotifyWindow = m_hWnd;
BOOL bOK = FALSE; // assume failure
TRY
{
DoDataExchange(&dx);
bOK = TRUE; // it worked
}
CATCH(CUserException, e)
{
// validation failed - user already alerted, fall through
ASSERT(!bOK);
// Note: DELETE_EXCEPTION_(e) not required
}
AND_CATCH_ALL(e)
{
if(bReportError)
{
// validation failed due to OOM or other resource failure
e->ReportError(MB_ICONEXCLAMATION, AFX_IDP_INTERNAL_FAILURE);
}
ASSERT(!bOK);
DELETE_EXCEPTION(e);
}
END_CATCH_ALL
pThreadState->m_hLockoutNotifyWindow = hWndOldLockout;
return bOK;
}
Eine Fehlermeldung gibt's dann nur, wenn bReportError auf TRUE gesetzt ist
(Du solltest in dem Fall vielleicht noch per SetDlgItemText o.Ä. dem Benutzer mitteilen, dass irgendwo ein falscher Wert steht, denn es gibt ja keine Meldung mehr)
Wichtig: UpdateData ist nicht virtual, du musst die veränderte Version selber aufrufen (machst du ja eh, wie ich das verstanden habe ). Der Rest von MFC wird weiterhin das Original verwenden.