1

質問/問題:ユーザーがユーザー名を入力する編集コントロール (テキスト ボックス) があります。入力したユーザー名とリスト コントロールにリストされているユーザー名を比較しようとしています。指定されたユーザー名が一致する場合、ボタンのテキストは からCreate Userに変わりますUpdate User

私の問題は、無限ループを作成せずに、文字列を比較するための正しいイベント/時間を見つけることです。

私が試したこと: エディット コントロール イベントEN_CHANGEEN_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");
    }
}

編集コントロールの例.

赤色のテキストが一致する場合は、青色で強調表示されたボタンのテキストを変更します。

ユーザーが入力した文字列をリアルタイムで検証するために、別のイベントを使用する必要がありますか?

4

1 に答える 1

1

私のコードには 2 つの問題がありました。UpdateDataすべてのダイアログ コントロールのデータが最新になるように、を使用する必要がありました。また、間違った変数を更新していました。ありがとう@rrirower

于 2015-04-15T14:57:04.657 に答える