2012-06-14 28 views
0

我在winforms中有一個組合框,它取決於你選擇的內容決定其他組合框中填充的內容。我填寫使用數據視圖的初始組合框:如何防止引發多個SelectedIndexChanged事件?

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

除了那些線中的每一個工作正常,引發SelectedIndexChanged事件。填充下一個組合框的函數偵聽該事件,因此它運行三次。我問了一位同事,他建議循環瀏覽數據並手動添加所有數據作爲字符串,但如果可以的話,我寧願堅持數據綁定。特別是如果將來我需要做一些我只能通過數據綁定來做的事情。

有什麼想法?也許某種方式可以在部分代碼中禁用該事件?

+0

我想這就是你要找的 - ComboBox.SelectionChangeCommitted :: http://stackoverflow.com/a/10333311/763026 –

回答

1

在撥打電話之前,您可以解除綁定您的事件處理程序,然後在通話完成後重新綁定它。

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 

你可以做到這一點,還是像約翰說,關閉和打開的事件處理程序。如果知道兩個或更多事件處理程序將受到影響,則標誌方法可能會更好。

相關問題