Winforms:触发哪个事件? combobox.selectedindexchanged 或 bindingsource.currentchanged
Winforms: Which event to fire? combobox.selectedindexchanged OR bindingsource.currentchanged
假设我们在 winforms 应用程序中有一个 Combobox
,它的项目绑定到 Bindingsource
。
我需要在用户更改 combobox
中的 selected 项时触发一个事件。
我应该处理 combobox.selectedindexchanged
事件还是 bindingsource.currentchanged
事件。在性能或其他方面哪个更好?
我进行了很多搜索以找到一篇文章或相关内容,但找不到直截了当的内容。感谢任何建议或解决方法。
更新
我需要在用户 select 来自 combobox
的项目后调用基于 selected 对象 ID
的函数。 (ID
可从 Combobox1.SelectedValue
和 bindingSource1.Current.ID
访问。在这种情况下我应该选择哪个事件?
如果 ComboBox 绑定到 BindingSource,您通常会保留它。如果确实需要利用事件,最好在业务对象中创建更多属性。例如,如果组合框是 Index Value == 0,您想禁用一个按钮,只需在 Button 的 Enabled 属性 绑定到的业务对象中创建一个 属性,例如:
public virtual bool IsFunctionEnabled
{
get { return (An_Items_SelectedIndex > 0); }
}
如果您确实需要在 ComboBox 的选定索引更改事件中做一些事情,我会倾向于在表示层中进行,因为我不建议使用绑定源控件或其事件。
最好的解决方案是处理业务对象中的所有内容并通过 BindingSources 绑定控件。在表示层中执行任何逻辑都会使测试变得困难,并且更改 BindingSources 中的任何内容都会增加大量测试。
如果您希望在最终用户选择 UI 中的任何项目时处理事件,那么您应该使用 combobox.selectedindexchanged
,因为 bindingsource.currentchanged
可能由于数字原因而被触发,例如此处提到的MSDN 博客,BindingSource.CurrentChanged Event 因此,如果您出于 MSDN 中提到的任何原因需要处理事件,那么它将不必要地经过您可能为选择更改事件编码的逻辑。在处理事件时,您的代码应该具体。
毕竟,我开始知道使用 Combobox.SelectedIndexChanded
事件应该更好,因为我正在与用户交互并寻找来自 UI 的响应。虽然这里的事件对我来说是一样的,但是 Bindingsource.CurrentChanged
事件可以用于我想从任何地方跟踪当前对象的变化,比如列表变化之类的,而不是 UI。我相信在这里使用 combobox
事件会更好。
假设我们在 winforms 应用程序中有一个 Combobox
,它的项目绑定到 Bindingsource
。
我需要在用户更改 combobox
中的 selected 项时触发一个事件。
我应该处理 combobox.selectedindexchanged
事件还是 bindingsource.currentchanged
事件。在性能或其他方面哪个更好?
我进行了很多搜索以找到一篇文章或相关内容,但找不到直截了当的内容。感谢任何建议或解决方法。
更新
我需要在用户 select 来自 combobox
的项目后调用基于 selected 对象 ID
的函数。 (ID
可从 Combobox1.SelectedValue
和 bindingSource1.Current.ID
访问。在这种情况下我应该选择哪个事件?
如果 ComboBox 绑定到 BindingSource,您通常会保留它。如果确实需要利用事件,最好在业务对象中创建更多属性。例如,如果组合框是 Index Value == 0,您想禁用一个按钮,只需在 Button 的 Enabled 属性 绑定到的业务对象中创建一个 属性,例如:
public virtual bool IsFunctionEnabled
{
get { return (An_Items_SelectedIndex > 0); }
}
如果您确实需要在 ComboBox 的选定索引更改事件中做一些事情,我会倾向于在表示层中进行,因为我不建议使用绑定源控件或其事件。
最好的解决方案是处理业务对象中的所有内容并通过 BindingSources 绑定控件。在表示层中执行任何逻辑都会使测试变得困难,并且更改 BindingSources 中的任何内容都会增加大量测试。
如果您希望在最终用户选择 UI 中的任何项目时处理事件,那么您应该使用 combobox.selectedindexchanged
,因为 bindingsource.currentchanged
可能由于数字原因而被触发,例如此处提到的MSDN 博客,BindingSource.CurrentChanged Event 因此,如果您出于 MSDN 中提到的任何原因需要处理事件,那么它将不必要地经过您可能为选择更改事件编码的逻辑。在处理事件时,您的代码应该具体。
毕竟,我开始知道使用 Combobox.SelectedIndexChanded
事件应该更好,因为我正在与用户交互并寻找来自 UI 的响应。虽然这里的事件对我来说是一样的,但是 Bindingsource.CurrentChanged
事件可以用于我想从任何地方跟踪当前对象的变化,比如列表变化之类的,而不是 UI。我相信在这里使用 combobox
事件会更好。