C# 在DataTable中设置值将触发SelectedIndexChanged事件

C# 在DataTable中设置值将触发SelectedIndexChanged事件,c#,winforms,C#,Winforms,我有一个listbox1,它绑定到名为Notes的DataTable上,我在DataTable的单元格中设置值的行会发生变化listbox1.SelectedIndex=-1然后再次设置listbox1.SelectedIndex为原始值并完成。因此,该行两次调用listBox1\u SelectedIndexChanged事件 相反,它甚至不应该称之为那个事件。如何解决这个问题 private void richTextBox1_TextChanged(object sender, Event

我有一个
listbox1
,它绑定到名为
Notes
DataTable
上,我在DataTable的单元格中设置值的行会发生变化
listbox1.SelectedIndex=-1
然后再次设置
listbox1.SelectedIndex
为原始值并完成。因此,该行两次调用
listBox1\u SelectedIndexChanged
事件

相反,它甚至不应该称之为那个事件。如何解决这个问题

private void richTextBox1_TextChanged(object sender, EventArgs e)
{
    if (listBox1.SelectedIndex != -1)
    {
        dataSet11.Notes.Rows[listBox1.SelectedIndex]["Text"] = richTextBox1.Text; 
        //this line fires listBox1_SelectedIndexChanged event
        //with listBox1.SelectedIndex = -1
        //then it changes listBox1.SelectedIndex back to original value before complete execution, and calls the even again
    }
}

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{

}

暂时删除SelectedIndexChanged处理程序

private void richTextBox1_TextChanged(object sender, EventArgs e)
{
  listBox1.SelectedIndexChanged -= listBox1_SelectedIndexChanged;
  if (listBox1.SelectedIndex != -1)
  {
      dataSet11.Notes.Rows[listBox1.SelectedIndex]["Text"] = richTextBox1.Text; 
      //this line fires listBox1_SelectedIndexChanged event
      //with listBox1.SelectedIndex = -1
      //then it changes listBox1.SelectedIndex back to original value before complete execution, and calls the even again
  }
  listBox1.SelectedIndexChanged += listBox1_SelectedIndexChanged;
}

暂时删除SelectedIndexChanged处理程序

private void richTextBox1_TextChanged(object sender, EventArgs e)
{
  listBox1.SelectedIndexChanged -= listBox1_SelectedIndexChanged;
  if (listBox1.SelectedIndex != -1)
  {
      dataSet11.Notes.Rows[listBox1.SelectedIndex]["Text"] = richTextBox1.Text; 
      //this line fires listBox1_SelectedIndexChanged event
      //with listBox1.SelectedIndex = -1
      //then it changes listBox1.SelectedIndex back to original value before complete execution, and calls the even again
  }
  listBox1.SelectedIndexChanged += listBox1_SelectedIndexChanged;
}

您可以为此使用触发器布尔字段:

private TextBox_OntextChanged(object sender, EventArgs args)
{
    this.supressEvents = true;
    //Do your stuff here
    this.supressEvents = false;
}

private void ListBox_OnSelectionChanged(object sender, EventArgs args)
{
    if (this.supressEvents)
    {
        return;
    }

    //Do your stuff here
}

您可以为此使用触发器布尔字段:

private TextBox_OntextChanged(object sender, EventArgs args)
{
    this.supressEvents = true;
    //Do your stuff here
    this.supressEvents = false;
}

private void ListBox_OnSelectionChanged(object sender, EventArgs args)
{
    if (this.supressEvents)
    {
        return;
    }

    //Do your stuff here
}

为什么它没有出现在我的脑海里。。。谢谢为什么我没有想到。。。谢谢