在用户键入MFC时验证编辑控件的文本

时间:2015-04-10 18:25:55

标签: c++ events mfc editcontrol

问题/问题:我有一个用户输入用户名的编辑控件(文本框)。我试图将输入的用户名与我的列表控件中列出的用户名进行比较。如果给定的用户名匹配,我的按钮文字应该从Create User更改为Update User

我的问题是找到正确的事件/时间来比较字符串,而不会产生无限循环。

我尝试了什么:我尝试过使用编辑控件事件EN_CHANGEEN_UPDATE。这两个事件都会导致堆栈溢出异常或无限循环。我认为每次输入某些内容或在我的编辑控件中使用退格时,都会调用其中一个事件。

在我的EN_CHANGE / EN_UPDATE事件中,我会比较用户名字符串并设置按钮的文字。无论哪种情况,它都被称为无限次:

void Users::OnEnUpdateLoginName()  //EN_UPDATE Event
{
    bool match = false;

    //Compare the edit control text with each List Control text.
    for(int i = 0; i<m_UserList.GetItemCount(); i++)
    {
        if(strcmp(m_UserList.GetItemText(i,0),m_loginName)==0)
            match = true;
    }

    //If the usernames match, change the button's text to "Update User"
    if(match) 
    {
        CWnd *currentSelection = GetDlgItem(TXTC_LOGIN_NAME);
        currentSelection->SetWindowTextA("Update User");
    }
    else
    {
        CWnd *currentSelection = GetDlgItem(TXTC_LOGIN_NAME);
        currentSelection->SetWindowTextA("Create User");
    }
}

example edit control

如果红色文本匹配,请更改以蓝色突出显示的按钮文本。

我应该使用不同的事件来实时验证字符串吗?

1 个答案:

答案 0 :(得分:1)

我的代码有两个问题。我需要使用UpdateData,以便我所有对话框控件的数据都是最新的。我也在更新错误的变量。谢谢@rrirower