在 MFC 中,当 CEdit 控件达到最大字符时,退格不起作用

Posted

技术标签:

【中文标题】在 MFC 中,当 CEdit 控件达到最大字符时,退格不起作用【英文标题】:in MFC when CEdit control reached the maximum characters, backspace doesn't work 【发布时间】:2018-02-19 22:17:32 【问题描述】:

在我的对话框中,有一个 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

问题是一样的,再次,达到最大字符后我不能使用退格。 有人对如何解决它有任何想法吗? 谢谢,

【问题讨论】:

我从来没有遇到过这个。您是否也遇到了新创建的应用程序的问题?您的平台是什么(操作系统、Visual Studio 版本等)?发布 .rc 文件中的对话框资源 从来没有听说过这样的事情。在按下 OK 按钮之前不会进行验证。因此,当您编辑字段时,验证器处于非活动状态,不会导致编辑字段出现任何问题。 【参考方案1】:

经查代码,与SetLimitTextDDV_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;
    

【讨论】:

代码将有助于说明问题和解决方案。 在您的问题中发布失败的代码会有所帮助。否则人们将不得不查看这个答案,从那里得出问题,并决定他们是否有同样的问题。问题和答案都应该是独立的。

以上是关于在 MFC 中,当 CEdit 控件达到最大字符时,退格不起作用的主要内容,如果未能解决你的问题,请参考以下文章

MFC的Dialogbox多行文本框(CEdit)有最大字符限制,默认最大显示长度是?怎么实现显示160KB大小的文件

在 CEdit 控件中显示省略号

单击控件时在MFC中选择CEdit控件的内容

MFC输入框CEdit控件十六进制转换

为啥子控件不出现在 MFC 派生的 CWnd 中

MFC CEdit 控件在添加到加速器后不处理 Key Pressed