Вопрос / Проблема: У меня есть элемент управления редактирования (текстовое поле), в который пользователь вводит имя пользователя. Я пытаюсь сравнить введенное имя пользователя с теми, которые перечислены в моем элементе управления списком. Если имя пользователя соответствует, текст моей кнопки должен измениться с 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");
}
}
.
Если текст красного цвета совпадает, измените текст кнопки, выделенный синим цветом.
Должен ли я использовать другое событие для проверки строки в режиме реального времени при вводе пользователем?
У моего кода было две проблемы. Мне нужно было использовать UpdateData
, так что данные для всех моих диалоговых элементов управления будут текущими. Я также обновлял неправильные переменные. Спасибо @rrirower