0

私は単純な Windows フォームを持っています: 'Message' TextBox には Enter イベントと Leave イベントがあり、ユーザーはそのフィールドにのみ別の言語でテキストを入力できます。「送信」ボタンは、フォームの内容を送信します。ユーザーがメッセージを入力して [送信] をクリックすると、テキストボックスの Leave イベントがボタンの Click イベントの発生を防ぎます。両方のハンドラーを実行する必要があります。

関連するコードは次のとおりです。

private void Message_Enter(object sender, EventArgs e)
{
    inputLang = InputLanguage.CurrentInputLanguage;
    foreach (InputLanguage lang in InputLanguage.InstalledInputLanguages)
    {
        if (lang.LayoutName == "United States-International")
        {
            InputLanguage.CurrentInputLanguage = lang;
            break;
        }
    }
}

private void Message_Leave(object sender, EventArgs e)
{
    InputLanguage.CurrentInputLanguage = inputLang;
}

private void Send_Click(object sender, EventArgs e)
{
    string dest = ServerList.Text;
    string msg = Message.Text;
    if (dest.Length == 0 || msg.Length == 0 )
    {
        Log("Fill the destination server and the message");
        return;
    }
    if (context.SendMessage(dest, msg))
    {
        if (!ServerList.Items.Contains(dest))
        {
            ServerList.Items.Add(dest);
        }
    }
    else
    {
        if (ServerList.Items.Contains(dest))
        {
            ServerList.Items.Remove(dest);
        }
    }
}
4

2 に答える 2

0

問題は解決しました。この問題は、入力言語の変更によって発生します。enter ハンドラーと leave ハンドラーが他の処理を行った場合、クリック イベントは正常に発生します。入力言語を変更する必要があるため、MouseDown、MouseClick、および MouseUp イベントを監視し、自動的に生成されない場合はクリックを生成することで解決しました。

于 2013-04-11T16:31:38.533 に答える
0

私は同じ問題を抱えています。入力言語を変更した後、イベントを終了すると、デフォルトの言語に戻りました。他のコンポーネントをクリックすると、クリックイベントが発生しません。その後、2回クリックする必要がありました。私はそれが焦点と関係があると思います。入力言語を元に戻した後、フォーカスをフォームに戻すことで解決しました。ハンドラーは次のとおりです。

void textBoxSearch_LostFocus(object sender, EventArgs e)
    {
        InputLanguage.CurrentInputLanguage = InputLanguage.DefaultInputLanguage;
        this.Focus();
    }

それが役に立てば幸い...

于 2014-05-21T12:25:48.017 に答える