Winforms:要开火的事件? combobox.selectedindexchanged OR bindingsource.currentchanged

时间:2017-04-03 05:58:54

标签: c# winforms combobox event-handling bindingsource

假设我们在winforms应用程序中有Combobox,其项目绑定到Bindingsource

我需要在用户更改combobox中的所选项目时触发事件。

我应该处理combobox.selectedindexchanged事件还是bindingsource.currentchanged事件。在性能或其他方面哪个更好?

我经常搜索一篇关于它的文章或其他内容,但找不到直截了当的内容。我感谢任何建议或解决方法。

更新

用户从ID中选择一个项目后,我需要在所选对象combobox上调用一个函数库。 (IDCombobox1.SelectedValue都可以访问bindingSource1.Current.ID。在这种情况下,我应该选择哪个事件?

3 个答案:

答案 0 :(得分:0)

如果ComboBox绑定到BindingSource,您通常会将其保留在那里。如果您确实需要利用事件,那么最好不要在业务对象中创建更多属性。例如,如果组合框是索引值== 0,则要禁用按钮,只需在业务对象中创建Button的Enabled属性绑定的属性,例如:

public virtual bool IsFunctionEnabled
{
  get { return (An_Items_SelectedIndex > 0); }
}

如果你真的需要在ComboBox选择的索引更改事件中做一些事情,我会倾向于在Presentation Tier中进行操作,因为我不推荐使用绑定源控件或它们的事件。

最佳解决方案是处理Business Objects中的所有内容并通过BindingSources绑定控件。在Presentation Tier中执行任何逻辑都会使测试和更改BindingSources中的任何内容变得很困难,从而增加了大量测试。

答案 1 :(得分:0)

如果您希望在最终用户选择UI中的任何项目时处理事件,那么您应该使用combobox.selectedindexchanged,因为bindingsource.currentchanged可以由于数量原因而触发,例如MSDN博客上提到的{{3}所以万一,你需要为MSDN中提到的任何原因处理一个事件,然后它将不必要地通过你可能为选择更改事件编码的逻辑。在处理事件时,您的代码应该是特定的。

答案 2 :(得分:0)

毕竟,我开始知道使用Combobox.SelectedIndexChanded事件会更好,因为我正在与用户交互并从UI中寻找响应。虽然这里的事件对我来说也是一样的,但是Bindingsource.CurrentChanged事件可以用于我想跟踪当前对象的变化,如列表更改或其他任何东西,而不是UI。我相信在这里使用combobox事件会更好。