在我的对话框中,有一个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个字符长度时,我试图通过在文本末尾使用退格键删除一些字符。它不起作用。 有人遇到过这样的问题吗? 我还尝试使用另一种方法在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
}
问题是一样的,再次,我达不到最大字符后就无法使用退格。 有人知道如何解决它吗? 感谢,
答案 0 :(得分: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;
}
}