0

我在 winforms 中有一个组合框,它根据您选择的内容确定其他组合框中填充的内容。我使用数据视图填充了初始组合框:

combobox_process.DataSource = dataview
combobox_process.DisplayMember = "UserDefine1"
combobox_process.SelectedIndex = -1

效果很好,除了这些行中的每一行都会引发 SelectedIndexChanged 事件。填充下一个组合框的函数会监听该事件,因此它运行了 3 次。我问了一位同事,他建议只是循环遍历数据并将它们全部手动添加为字符串,但如果可以的话,我更愿意坚持使用数据绑定。特别是如果将来我需要做一些我只能通过数据绑定来做的事情。

有什么想法吗?也许有某种方法可以在这段代码的一部分期间禁用该事件?

4

2 回答 2

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

您可以这样做,或者像约翰所说的那样,关闭并打开事件处理程序。当您知道两个或多个事件处理程序将受到影响时,标志方法可能会更好。

于 2012-06-14T22:02:35.123 回答
1

您可以在进行调用之前取消绑定事件处理程序,然后在调用完成后重新绑定它。

于 2012-06-14T16:29:51.053 回答