C# Select Index Changed事件触发两次

C# Select Index Changed事件触发两次,c#,winforms,events,C#,Winforms,Events,以下是我的代码示例: private void listView1_SelectedIndexChanged(object sender, EventArgs e) { if (listView1.SelectedItems.Count < 1) { MessageBox.Show("Please select an item first."); } else { string name = listView1.Sel

以下是我的代码示例:

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;            
}
private void listView1\u SelectedIndexChanged(对象发送方,事件参数e)
{
如果(listView1.SelectedItems.Count<1)
{
MessageBox.Show(“请先选择一个项目”);
}
其他的
{
字符串名称=listView1.SelectedItems[0]。子项[0]。文本;
Binddata(名称);
}
}
公共void Binddata(字符串名称)
{
textBox1.Text=名称;
}
我的窗口将如下所示:

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


如果我遗漏了什么,请帮助我。提前谢谢。

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


如果您不喜欢这种行为,您应该使用
列表框
控件,该控件可以始终要求选择一个项目,并且不会引发多个SelectedIndexChanged事件。

不确定为什么会发生这种情况,我想它会在取消选择以前选择的项目时触发一次,在选择新项目时触发第二次

作为一种解决方法,请像这样使用
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;
    }
private void listView1\u SelectedIndexChanged(对象发送方,事件参数e)
{
var timer=new System.Windows.Forms.timer(){Interval=50};
EventHandler=null;
处理器=(x,y)=>
{
timer.Tick-=处理程序;
timer.Enabled=false;
timer.Dispose();
如果(listView1.SelectedItems.Count<1)
{
MessageBox.Show(“请先选择一个项目”);
}
其他的
{
字符串名称=listView1.SelectedItems[0]。子项[0]。文本;
Binddata(名称);
}
};
timer.Tick+=处理程序;
timer.Enabled=true;
}
根据:

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


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

这是单选控件的正常行为。有关更多详细信息,请参阅链接:


我想您可以在物品计数时进行检查。这是因为,当您单击另一个项目时,第一个选定的项目会失去焦点,因此会触发changeEvent。第二个事件被激发,因为另一项获得焦点。您可以检查您输入BindData的名称是否为空…显示您的form_int和form_load事件的代码………@HimBromBeere我正在检查项目计数,因为在选择item1后单击item2时,计数变为“0”。我在Binddata中得到的名称是正确的,只有当我在message中按OK时才显示出来box@satyanarayana不客气,您需要克服多选的情况,当取消选择项目时,也会多次填充火焰。将此代码作为一个良好的开端,并构建它:)