質問/問題:ユーザーがユーザー名を入力する編集コントロール (テキスト ボックス) があります。入力したユーザー名とリスト コントロールにリストされているユーザー名を比較しようとしています。指定されたユーザー名が一致する場合、ボタンのテキストは からCreate User
に変わりますUpdate User
。
私の問題は、無限ループを作成せずに、文字列を比較するための正しいイベント/時間を見つけることです。
私が試したこと: エディット コントロール イベントEN_CHANGE
とEN_UPDATE
. これらのイベントは両方とも、スタック オーバーフロー例外または無限ループを引き起こします。これらのイベントの 1 つは、編集コントロール内で何かが入力されるかバックスペースが使用されるたびに呼び出されると考えていました。
私の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");
}
}
.
赤色のテキストが一致する場合は、青色で強調表示されたボタンのテキストを変更します。
ユーザーが入力した文字列をリアルタイムで検証するために、別のイベントを使用する必要がありますか?