显示在文本框的列表框中选择的数据的错误

时间:2013-03-13 11:53:49

标签: .net c#-4.0 listbox

我使用以下代码:

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的值不会根据列表框中选择的新值进行更改。

1 个答案:

答案 0 :(得分:0)

如果您对选择更改时感兴趣,MouseClick事件不是您要处理的事件。每次用户在控件内部单击时,都会引发MouseClick事件,无论他们是否进行选择。并且有几种方法可以在不使用鼠标的情况下选择列表框内的项目 - 例如,我可以使用键盘上的箭头键更改选择。 (如果这还不足以说服你,我会引起你的注意documentation,它表示MouseClick事件“支持.NET Framework基础结构,并不打算直接在你的代码中使用” 。)

相反,您需要切换到处理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();
        }
    }
}