2014-04-04 49 views
2

我有MFC對話框窗體與文本編輯控件,允許輸入不超過5個符號。但是如何讓系統不接受小於5個符號的字符串呢?MFC輸入窗體不接受少於5個符號

對話形式:

IMPLEMENT_DYNAMIC(InputDialog, CDialogEx) 



InputDialog::InputDialog(CWnd* pParent /*=NULL*/) 
    : CDialogEx(InputDialog::IDD, pParent) 
    , m_edit(_T("")) 
{ 
} 

InputDialog::~InputDialog() 
{ 
} 

void InputDialog::DoDataExchange(CDataExchange* pDX) 
{ 


    CDialogEx::DoDataExchange(pDX); 

    DDX_Text(pDX, IDC_EDIT_INPUT, m_edit); 
    DDV_MaxChars(pDX, m_edit, 5); 
} 


BEGIN_MESSAGE_MAP(InputDialog, CDialogEx) 
    ON_BN_CLICKED(IDOK, &InputDialog::OnBnClickedOk) 
END_MESSAGE_MAP() 

回答

0

處理文本字段的殺焦點事件。在事件的處理程序中獲取輸入的字符串的長度。如果它小於5,則可選擇彈出消息,並將焦點設回該字段。

+1

這與MFC對話框的理念完全相反,MFC對話框在對話框關閉時會執行所有的數據驗證。 –

+1

@MarkRansom我不同意。從UX的角度來看,在數據輸入的時候驗證是更有意義的。 – rrirower

+0

艱難的人羣....我會爭辯說,這取決於應用程序的類型。 – rrirower

4

Microsoft向MFC提供源代碼,以便您可以看到它們如何實現DDV_MaxChars。只需複製它並更改條件。

void AFXAPI DDV_MinChars(CDataExchange* pDX, CString const& value, int nChars) 
{ 
    // ... 
    if (pDX->m_bSaveAndValidate && value.GetLength() < nChars) 
    { 
     // ...