1

问题/问题:我有一个用户输入用户名的编辑控件(文本框)。我正在尝试将输入的用户名与列表控件中列出的用户名进行比较。如果给定的用户名匹配,我的按钮文本应该从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");
    }
}

示例编辑控件.

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

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

4

1 回答 1

1

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

于 2015-04-15T14:57:04.657 回答