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每次用户在控件内部单击时都会引发该事件,无论他们是否进行了选择。有几种方法可以在不使用鼠标的情况下选择列表框中的项目——例如,我可以使用键盘上的箭头键更改选择。(如果这还不足以说服您,我提请您注意文档,其中说该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();
        }
    }
}
于 2013-03-13T12:05:45.447 回答