我在winforms中有一个组合框,根据你选择的内容,它决定了其他组合框中填充的内容。我使用数据视图填充了最初的组合框:
combobox_process.DataSource = dataview
combobox_process.DisplayMember = "UserDefine1"
combobox_process.SelectedIndex = -1
哪个行正常,除了每一行都抛出SelectedIndexChanged事件。填充下一个组合框的函数会侦听该事件,因此它会运行三次。我问了一个同事,他建议只循环数据并手动将它们全部添加为字符串,但如果可以,我宁愿坚持数据绑定。特别是如果将来我需要做一些我只能用数据绑定做的事情。
有什么想法?也许某种方法可以在此代码的一部分期间禁用该事件?
答案 0 :(得分:3)
当您不想要它们时触发事件是Windows窗体中的常见问题 - SelectedIndexChanged是一个典型示例。我经常使用的一种方法是声明在运行一部分代码时设置的标志,我知道当我不想听它时会激活该事件。
一个例子:
Public Class Form1
Private m_IsSettingDataSource As Boolean = False
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Try
Me.m_IsSettingDataSource = True
combobox_process.DataSource = DataView
combobox_process.DisplayMember = "UserDefine1"
combobox_process.SelectedIndex = -1
Catch
Throw
Finally
Me.m_IsSettingDataSource = False
End Try
End Sub
Private Sub combobox_process_SelectedIndexChanged(sender As Object, e As EventArgs) Handles combobox_process.SelectedIndexChanged
If Not Me.m_IsSettingDataSource Then
' Do what you want to do when not setting data source
End If
End Sub
End Class
你可以这样做,或者像John说的那样,关闭事件处理程序。当您知道两个或更多事件处理程序将受到影响时,标记方法可能会更好。
答案 1 :(得分:1)
您可以在拨打电话之前取消绑定事件处理程序,然后在调用完成后重新绑定它。