в MFC, когда элемент управления CEdit достиг максимального количества символов, Backspace не работает

в моем диалоге есть поле CEdit, в котором задается максимальное количество символов. ниже в функции DoDataExchange:

void CDlgSurvey::DoDataExchange(CDataExchange* pDX)
{
DDX_Control(pDX, IDC_EDIT_SURVEY_ID, m_SurveyIDEdit);//ACUTALLY THE ISSUE IS HERE,SO LATER WE MODIFIED THE CLASS FUNCTION Onchar in m_SurveyIDEdit RELATED
DDX_Text(pDX, IDC_EDIT_SURVEY_ID, m_SurveyID);
DDV_MaxChars(pDX, m_SurveyID, SURVEY_ID_FIELD_LENGTH);
}

Я нашел, что это работает. это означает, что я не могу ввести символы больше, чем SURVEY_ID_FIELD_LENGTH. Но проблема в том, что я уже ввел длину символов SURVEY_ID_FIELD_LENGTH и попытался удалить какой-то символ, используя клавишу Backspace в конце текста. это не работает
Кто-нибудь встречал такую ​​проблему?
и я также пытаюсь использовать другой способ установить максимальный текст в OnInitDialog,

BOOL CDlgSurvey::OnInitDialog()
{
//set Max Text in Edit Box
CEdit* pEditControl = (CEdit*)GetDlgItem(IDC_EDIT_SURVEY_ID);
if (pEditControl)
{
pEditControl->SetLimitText(SURVEY_ID_FIELD_LENGTH);
}

return TRUE;  // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}

проблема та же, опять же, я не могу использовать клавишу Backspace после того, как она достигла максимального символа.
У кого-нибудь есть идеи как это исправить?
Спасибо,

2

Решение

После проверки кода он не имеет отношения к SetLimitText или же DDV_MaxChars, Актуальная проблема связана с DDX_Control,

С переменной m_SurveyIDEdit мы проверяем ограничение символов. Как только мы находим, длина текста уже достигнута (MaxLength), он просто возвращается. Это проблема.

Итак, мы изменили код. Мы по-прежнему занимаемся CEdit::OnChar метод.
Итак, ключевой момент для решения этой проблемы: каждый раз, когда вы должны изучить весь не связанный код и посмотреть, что произойдет.

Мой элемент управления редактированием был фактически получен из CRestrictedEdit, Мое решение было настроить OnChar обработчик.

void CRestrictedEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// Get the text of the edit control
CString sText;
GetWindowText(sText);

// if the control limit is already reached, no need to validate the character.
if ((static_cast<UINT>(sText.GetLength())) == this->GetLimitText())
{
CEdit::OnChar(nChar, nRepCnt, nFlags); //THIS IS NEW LINE ADDED
return;
}
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector