以下是我的代码示例:
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”,因此它将显示消息为“请先选择项目”。如果我按下确定,则事件再次被触发并且Item2被绑定。
如果我遗漏了任何东西,请帮助我。在此先感谢。
答案 0 :(得分: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;
}
答案 1 :(得分:0)
这是正常行为。唯一不正常的部分是当没有选择项目时你正在抛出一个MessageBox。 ListView可以选择零项,您需要优雅地处理它。
如果你不喜欢这种行为,你应该使用ListBox
控件,它总是需要选择1个项目,并且不会抛出多个SelectedIndexChanged事件。
答案 2 :(得分:0)
根据MSDN:
当用户选择项目而不按CTRL执行 多次选择,控件首先清除先前的选择。 在这种情况下,对于每个项目,此事件都会发生一次 先前已选择,一次为新选择的项目。
您可以检查是否在其他事件处理程序中选择了任何项目,例如按钮单击。
答案 3 :(得分:0)
这是单选控件的正常行为。有关详细信息,请参阅链接:
http://www.knowdotnet.com/articles/listviewselectedindexchanged.html