【问题标题】:Why selected index change on adding data source?为什么在添加数据源时选择索引更改?
【发布时间】:2014-05-11 17:45:57
【问题描述】:

每当我们使用下面的代码将数据源添加到组合框时。

            comboBoxBusNo.DataSource = busNo.Tables[0];
            comboBoxBusNo.DisplayMember = "BusId";
            comboBoxBusNo.ValueMember = "Id";

为什么会调用private void comboBoxBusNo_SelectedIndexChanged(object sender, EventArgs e) 事件。我们如何阻止它在加载时被调用。

【问题讨论】:

    标签: c# winforms combobox datatable datasource


    【解决方案1】:

    当您将列表绑定到 ComboBox 时,默认选择第一项,这会将 SelectedIndex 设置为 0。绑定之前没有任何项目,因此没有选择任何项目,因此 SelectedIndex 开始时为 -1。 SelectedIndex 从 -1 变为 0,因此引发 SelectedIndexChanged 事件。

    【讨论】:

    • 如何解决这个问题,加载时不调用索引更改事件。
    • 没有这样的解决方案。如果将数据绑定到控件,则 SelectedIndex 将发生变化,如果 SelectedIndex 发生变化,则将引发 SelectedIndexChanged。如果您想要的只是通知用户所做的更改,那么您正在处理错误的事件。仅当用户通过 UI 进行更改时才会引发 SelectionChangeCommitted。
    【解决方案2】:

    这将阻止事件在加载时触发。

    comboBoxBusNo.SelectedIndexChanged -= comboBoxBusNo_SelectedIndexChanged;
    
            comboBoxBusNo.DataSource = busNo.Tables[0];
            comboBoxBusNo.DisplayMember = "BusId";
            comboBoxBusNo.ValueMember = "Id";
    
            comboBoxBusNo.SelectedIndexChanged += comboBoxBusNo_SelectedIndexChanged;
    

    【讨论】:

    • comboBoxBusNo_SelectedIndexChanged 在这里是什么变量或函数。
    • comboBoxBusNo_SelectedIndexChanged 是组合框的选定索引更改事件的事件处理程序的名称。第一行取消附加它,最后一行重新附加它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多