в моем диалоге есть поле 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 после того, как она достигла максимального символа.
У кого-нибудь есть идеи как это исправить?
Спасибо,
После проверки кода он не имеет отношения к 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;
}
}
Других решений пока нет …