Проблема CEditBox - PullRequest
       5

Проблема CEditBox

0 голосов
/ 21 июля 2009

VC ++ 6.0, приложение MFC

В CEditBox (IDC_EDIT1) я создал переменную CString (m_strEdit1). Как я могу проверить, что ввод является числом, включая знак (+ и -)? например: (+10, -56)

Он не должен принимать буквенно-цифровые символы. Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 07 августа 2009

Вы, вероятно, должны сделать это, проверяя символы по мере их ввода:


class CEditBox public CEdit
{
    afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
    DECLARE_MESSAGE_MAP()
};

BEGIN_MESSAGE_MAP(CEditBox, CEdit)
    ON_WM_CHAR()
END_MESSAGE_MAP()

void CEditBox::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
    // quick validation
    if (nChar != _T('+') && nChar != _T('-') && !isdigit(nChar))
        return;

    CString strText;
    GetWindowText(strText);

    int nStartChar;
    int nEndChar;
    GetSel(nStartChar, nEndChar);

    CString strNewText = strText.Left(nStartChar) + 
                         nChar + 
                         strText.Right(strText.GetLength() - nEndChar);

    CString strFirst = strNewText.Left(1);

    // is first character valid?
    if (strFirst != _T("+") && strFirst != _T("-") && && !isdigit(strFirst[0]))
        return;

    CString strSecond = strNewText.Mid(1);

    // are remaining characters all digits? (ie no more + or -)
    for (int i = 0; i < strSecond.GetLength(); ++i)
    {
        if (!isdigit(strSecond[i]))
            return;
    }

    CEdit::OnChar(nChar, nRepCnt, nFlags);
}
0 голосов
/ 21 июля 2009

Посмотрите на CString :: SpanInclusive ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...