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

Validating an Edit Control's text while the user types MFC

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

我的问题是找到正确的 event/time 来比较字符串,而不创建无限循环。

我试过的:我试过使用编辑控件事件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");
    }
}

.

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

我是否应该使用不同的事件在用户键入时实时验证字符串?

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