【问题标题】:bug in displaying data selected in listbox in text box在文本框中显示在列表框中选择的数据时出现错误
【发布时间】:2013-03-13 11:53:49
【问题描述】:

我正在使用以下代码:

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的值,并没有根据列表框中选择的新值而改变。

【问题讨论】:

    标签: .net c#-4.0 listbox


    【解决方案1】:

    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();
            }
        }
    }
    

    【讨论】:

    • 当我在 listBox1_SelectedIndexChanged 中运行代码时没有任何反应,因此我不得不使用鼠标点击事件。
    • @iyerrama25 那么你没有正确连接事件处理程序。每次选择更改时都会引发此事件。文档保证了这一点。事实上,我链接到的文档甚至说:“当您需要根据 ListBox 中的当前选择在其他控件中显示信息时,这可能很有用。您可以使用此事件的事件处理程序来加载其他控件中的信息控制。”使用MouseClick 不是一种选择,因为它不起作用。你已经学到了这么多。你需要弄清楚为什么SelectedIndexChanged 没有得到提升。
    • 这可能是因为没有任何索引可以比较它来检测我认为索引的任何变化
    • 如果当前未选择任何内容,则选择了某些内容,这仍然算作更改。价值从无到有。
    猜你喜欢
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    相关资源
    最近更新 更多