C# WinForms SelectedIndexChangeCommitted未启动

C# WinForms SelectedIndexChangeCommitted未启动,c#,winforms,combobox,event-handling,C#,Winforms,Combobox,Event Handling,我正在从一个数据源填充一个组合框,并且我有当用户更改组合框中的选择时的代码。显然,我不希望SelectedIndexChanged方法中的代码在表单加载时触发 答案是提出两件事: 1在将数据加载到组合框之前和之后,请使用以下代码: private void LoadYourComboBox() { this.comboBox1.SelectedIndexChanged -= new EventHandler(comboBox1_SelectedIndexChanged);

我正在从一个数据源填充一个组合框,并且我有当用户更改组合框中的选择时的代码。显然,我不希望SelectedIndexChanged方法中的代码在表单加载时触发

答案是提出两件事:

1在将数据加载到组合框之前和之后,请使用以下代码:

private void LoadYourComboBox()
{
    this.comboBox1.SelectedIndexChanged -= new EventHandler(comboBox1_SelectedIndexChanged);
        // Set your bindings here . . .
    this.comboBox1.SelectedIndexChanged += new EventHandler(comboBox1_SelectedIndexChanged);
}
this.cboSelectCategory.SelectedIndexChanged -= new EventHandler(cboSelectCategory_SelectedIndexChanged);
我用这个代码试过了:

private void LoadYourComboBox()
{
    this.comboBox1.SelectedIndexChanged -= new EventHandler(comboBox1_SelectedIndexChanged);
        // Set your bindings here . . .
    this.comboBox1.SelectedIndexChanged += new EventHandler(comboBox1_SelectedIndexChanged);
}
this.cboSelectCategory.SelectedIndexChanged -= new EventHandler(cboSelectCategory_SelectedIndexChanged);
但是,cboSelectCategory_SelectedIndexChanged部分有一个红色错误,在其上方悬停表示:cboSelectCategory_SelectedIndexChanged名称在当前上下文中不存在。我在表单加载和实际填充组合框的方法中尝试了该代码

2同一个SO问题的答案是使用事件SelectedIndexChangeCommitted

但当我更改组合框中的选择时,该事件不会触发

我是不是错过了什么?我的密码是错的还是放错地方了

显然,我不希望SelectedIndexChanged方法中的代码在表单加载时触发

如果在初始化Component后将组合框绑定到窗体的构造函数中,则SelectedIndexChanged将在窗体可见之前触发,因此,如果窗体不可见,您只需从SelectedIndexChanged事件返回:

    public MainForm()
    {
        InitializeComponent();

        DataTable dt = new DataTable();
        dt.Columns.Add("Name");
        dt.Columns.Add("Code");


        dt.Rows.Add("Milk", "MLK");
        dt.Rows.Add("Bread", "BRD_WHITE");
        dt.Rows.Add("Bread", "BRD_BROWN");
        dt.Rows.Add("Coffee", "COFF");

        comboBox1.DataSource = dt;
        comboBox1.DisplayMember = "Name";
        comboBox1.ValueMember = "Code";

    }


    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (!this.Visible)
            return;

        MessageBox.Show("a");
    }
在不需要的时间简单地从事件处理程序返回通常比尝试删除和添加事件处理程序更容易


旁注:如果使用强类型数据集并使用windows窗体设计器创建绑定,则不会触发事件,我相信,因为表单设计器InitializeComponent在开始和结束时对组件调用Begin/EndInit

您的代码中是否有一个名为cboSelectCategory\u SelectedIndexChanged的方法?@LarsTech-我添加了事件,在表单加载事件中添加了删除/添加事件的代码,并在SelectedIndexChanged事件中添加了此代码:Console.WriteLineThis不应在表单加载时触发;事件确实在表单加载时触发-但没有错误。如果您向我们展示您的代码而不是来自另一个问题的代码,那么我们可以提供更多帮助@Caius&LarsTech-抱歉,伙计们-我不知道我做错了什么/不同了,但是添加SelectedIndexChanged事件现在被阻止在表单加载时触发,所以它可以根据需要工作。是星期一吗?标题中的SelectedIndexChangeCommitted是SelectedIndexChanged和SelectionChangeCommitted的奇妙组合。后一个事件仅在手动更改项目时引发,而在填充列表时不会引发,并且索引可能设置为-1,这是您在订阅前一个事件解决方案时经常检查的内容。简短、简单、容易。实施!谢谢