繁体   English   中英

Winforms:哪个事件要触发? combobox.selectedindexchanged或bindingsource.currentchanged

[英]Winforms: Which event to fire? combobox.selectedindexchanged OR bindingsource.currentchanged

假设我们在winforms应用程序中有一个Combobox ,它的项绑定到Bindingsource

当用户更改combobox的选定项目时,我需要触发一个事件。

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

我已经进行了大量搜索,以查找文章或有关文章的内容,但找不到清晰明确的内容。 我感谢任何建议或解决方法。

UPDATE

用户从combobox选择一个项目后,我需要基于所选对象ID调用一个函数。 (可从Combobox1.SelectedValuebindingSource1.Current.ID两者访问ID )。 在这种情况下,我应该选择哪个事件?

如果将ComboBox绑定到BindingSource,则通常将其保留在该位置。 如果确实需要利用事件,那么最好在Business Object中创建更多属性。 例如,如果您要在组合框的索引值== 0时禁用按钮,则只需在Business Object中创建一个属性,将Button的Enabled属性绑定到该属性,例如:

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

如果您确实需要在ComboBox的选定索引更改事件中进行操作,则我倾向于在Presentation Tier中进行操作,因为我不建议混入绑定源控件或其事件。

最好的解决方案是处理业务对象中的所有内容,并通过BindingSources绑定控件。 在Presentation Tier层中执行任何逻辑都会使测试变得困难,而更改BindingSources中的任何内容都会增加很多测试。

如果您希望在最终用户选择UI中的任何项目时处理事件,则应使用combobox.selectedindexchanged因为可以出于多种原因触发bindingsource.currentchanged ,例如在MSDN博客上提到的BindingSource.CurrentChanged Event,因此,如果需要,处理MSDN中提到的任何原因的事件,那么它将不必要地通过您可能已经为选择更改事件编码的逻辑。 处理事件时,您的代码应特定。

毕竟,我知道使用Combobox.SelectedIndexChanded事件会更好,因为我正在与用户进行交互并在UI中寻找响应。 尽管这里的事件对我来说是相同的,但是可以使用Bindingsource.CurrentChanged事件,以防我想要从列表更改之类的地方而不是UI跟踪当前对象的更改。 我相信最好在这里使用combobox事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM