我使用以下代码:
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的值不会根据列表框中选择的新值进行更改。
答案 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();
}
}
}