设置组合框的SelectIndex调用SelectedIndexChanged事件

时间:2017-03-20 10:13:50

标签: c# winforms

下面是我的代码,List_sheet_name是一个组合框

 List_sheet_name.Items.Clear();
            List_sheet_name.Items.Insert(0,"Select a table from Sheet");
            for (int i = 0; i < Sheets.Rows.Count; i++)
            {
                List_sheet_name.Items.Add(Sheets.Rows[i]["TABLE_NAME"].ToString());
            }
            List_sheet_name.SelectedIndex = 0;
            //List_sheet_name.SelectedIndex = List_sheet_name.FindStringExact("Select a table from Sheet");

将SelectIndex设置为零(最后两行)后,它也会自动调用SelectedIndexChanged事件。有人能告诉我为什么会这样吗?

2 个答案:

答案 0 :(得分:1)

最初,它是-1。如果设置为0,则将调用SelectedIndexChanged。

每次将其设置为另一个值时,都会引发SelectedIndexChanged。对于setbehind中的set,您可以使用变量bool _codeBehind,在更改SelectedIndex之前设置它并在事件处理程序中进行评估

private bool _cmbSelIdxIntern = false;

void YourMeth()
{
    _cmbSelIdxIntern = true;
    cmbTest.SelectedIndex = 0;
    _cmbSelIdxIntern = false;
}

private void cmbTest_SelectedIndexChanged(object sender, EventArgs e)
{
    if (_cmbSelIdxIntern)
    {
        return;
    }
}

答案 1 :(得分:1)

根据MSDN,该事件会对所有SelectedIndex更改做出反应。如果您将索引更改为与前一个值相等的新值,则该事件不会再次触发,您需要手动调用它。

如果您不希望在设置SelectedIndexChanged时调用SelectedIndex事件,则应在SelectedIndexChanged事件中检查发件人对象(即{ {1}})重点突出。

ComboBox