问题/问题:我有一个用户输入用户名的编辑控件(文本框)。我试图将输入的用户名与我的列表控件中列出的用户名进行比较。如果给定的用户名匹配,我的按钮文字应该从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");
}
}
如果红色文本匹配,请更改以蓝色突出显示的按钮文本。
我应该使用不同的事件来实时验证字符串吗?
答案 0 :(得分:1)
我的代码有两个问题。我需要使用UpdateData
,以便我所有对话框控件的数据都是最新的。我也在更新错误的变量。谢谢@rrirower