0

次のコードを使用しています。

private void listBox1_MouseClick(object sender, MouseEventArgs e)
{
    txtFrom.Clear();
    txtSubject.Clear();
    txtBody.Clear();
    something = this.listBox1.SelectedIndex.ToString();

    int something1 = Convert.ToInt32(something);

    foreach (MailMessage email in messages)
    {
        count++;
        if (count == something1)
        {
            txtFrom.Text = email.From.ToString();
            txtSubject.Text = email.Subject.ToString();
            txtBody.Text = email.Body.ToString();
        }
    }

問題は、別の項目を選択すると、txtFrom.Text、txtSubject.Text、txtBody.Text の値が、リスト ボックスで選択した新しい値に応じて変化しないことです。

4

1 に答える 1

0

選択が変更されたときに学習することに興味がある場合は、MouseClickイベントを処理する必要はありません。ユーザーが選択を行ったMouseClickかどうかに関係なく、ユーザーがコントロール内をクリックするたびにイベントが発生します。また、マウスを使用せずにリスト ボックス内の項目を選択する方法はいくつかあります。たとえば、キーボードの矢印キーを使用して選択を変更できます。(そして、それだけでは説得力がない場合は、イベントが「.NET Framework インフラストラクチャをサポートしており、コードから直接使用することを意図していない」と書かれているドキュメントに注目してください。)MouseClick

SelectedIndexChanged代わりに、イベントの処理に切り替える必要があります。そのイベントは、SelectedIndexプロパティ (またはSelectedIndices複数選択リストボックスのコレクション) が変更されるたびに発生します。これは、選択が行われるか変更されるたびに自動的に発生します。

コードに他の変更を加える必要さえありません。

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    txtFrom.Clear();
    txtSubject.Clear();
    txtBody.Clear();
    something = this.listBox1.SelectedIndex.ToString();

    int something1 = Convert.ToInt32(something);

    foreach (MailMessage email in messages)
    {
        count++;
        if (count == something1)
        {
            txtFrom.Text = email.From.ToString();
            txtSubject.Text = email.Subject.ToString();
            txtBody.Text = email.Body.ToString();
        }
    }
}
于 2013-03-13T12:05:45.447 に答える