0

这是我的代码示例:

private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
    if (listView1.SelectedItems.Count < 1)
    {
        MessageBox.Show("Please select an item first.");
    }
    else
    {
        string name = listView1.SelectedItems[0].SubItems[0].Text;
        Binddata(name);
    }
}

public void Binddata(string name)
{
    textBox1.Text=name;            
}

我的 Windows From 将如下所示:

形式

当我第一次单击 Item1 时,文本框正在显示 Item1。但是,如果我单击 Item2,则所选项目的数量变为“0”,因此显示消息为“请先选择一个项目”。如果我按下 ok,事件再次被触发并且 Item2 被绑定。

如果我遗漏任何东西,请帮助我。提前致谢。

4

4 回答 4

1

不知道为什么会发生这种情况,我认为它会触发一次以取消选择先前选择的项目,第二次触发选择新项目。

作为一种解决方法使用Timer这样的。

    private void listView1_SelectedIndexChanged(object sender, EventArgs e)
    {
        var timer = new System.Windows.Forms.Timer() { Interval = 50 };
        EventHandler handler = null;
        handler = (x, y) =>
        {
            timer.Tick -= handler;
            timer.Enabled = false;
            timer.Dispose();

            if (listView1.SelectedItems.Count < 1)
            {
                MessageBox.Show("Please select an item first.");
            }
            else
            {
                string name = listView1.SelectedItems[0].SubItems[0].Text;
                Binddata(name);
            }
        };
        timer.Tick += handler;
        timer.Enabled = true;
    }
于 2013-10-08T13:40:20.663 回答
0

这是正常行为。唯一不正常的部分是您在未选择任何项目时抛出 MessageBox 。ListView 可以选择零个项目,您需要优雅地处理它。

如果您不喜欢这种行为,您应该使用ListBox始终需要选择 1 个项目并且不会引发多个 SelectedIndexChanged 事件的控件。

于 2013-10-08T13:40:05.277 回答
0

根据MSDN

当用户选择一个项目而不按 CTRL 来执行多选时,控件首先清除先前的选择。在这种情况下,该事件对先前选择的每个项目发生一次,对新选择的项目发生一次。

您可以检查是否在其他事件处理程序中选择了任何项目,例如按钮单击。

于 2013-10-08T13:48:32.607 回答
0

这是单选控件的正常行为。请参阅链接了解更多详情:

http://www.knowdotnet.com/articles/listviewselectedindexchanged.html

于 2013-10-08T13:49:24.953 回答