Проверка текста редактируемого элемента управления, когда пользователь вводит MFC

Вопрос / проблема: у меня есть элемент управления редактирования (текстовое поле), в который пользователь вводит имя пользователя. Я пытаюсь сравнить введенное имя пользователя с теми, которые перечислены в моем элементе управления списком. Если имя пользователя соответствует, текст моей кнопки должен измениться с Create User в Update User,

Моя проблема в том, чтобы найти правильное событие / время для сравнения строк, не создавая бесконечный цикл.

Что я пробовал: я пытался использовать события управления редактированием EN_CHANGE а также EN_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");
    }
}

пример редактирования,

Если текст красного цвета совпадает, измените текст кнопки, выделенный синим цветом.

Должен ли я использовать другое событие для проверки строки в режиме реального времени при вводе пользователем?

1 ответ

Решение

У моего кода было две проблемы. Мне нужно было использовать UpdateData, так что данные для всех моих диалоговых элементов управления будут текущими. Я также обновлял неправильные переменные. Спасибо @rrirower

Другие вопросы по тегам