2013-02-28 73 views
2

我想基於的價值選擇添加到我的第二combobox我在第一comboboxdatagridview(包含textbox列以及)。DataGridView控件修改另一個

這裏是我的代碼:

Private Sub DataGridView1_EditingControlShowing(sender As Object, e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing 
    Try 
     'Sub Recurrence combobox is selected 
     If DataGridView1.CurrentCell.ColumnIndex = 4 Then 
      'Verify what is chosen in the Recurrence textbox 
      Dim rowIndex = DataGridView1.CurrentCell.RowIndex 
      Dim FirstComboboxValue = DataGridView1(3, rowIndex).Value 

      If Not IsNothing(FirstComboboxValue) Then 
       Dim cmb As ComboBox = TryCast(e.Control, ComboBox) 
       RemoveHandler cmb.SelectedIndexChanged, New EventHandler(AddressOf ComboBox_SelectedIndexChanged) 
       AddHandler cmb.SelectedIndexChanged, New EventHandler(AddressOf ComboBox_SelectedIndexChanged) 
      End If 
     End If 
    Catch ex As Exception 
     MsgBox(ex.ToString()) 
    End Try 
End Sub 

我處理火朝ComboBox_SelectedIndexChanged事件觸發:

Private Sub ComboBox_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) 
    If DataGridView1.CurrentCell.ColumnIndex = 4 Then 
     Dim comboBox As ComboBox = CType(sender, ComboBox) 
     Dim cbCell As DataGridViewComboBoxCell = DirectCast(DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(4), DataGridViewComboBoxCell) 
     Dim rowIndex = DataGridView1.CurrentCell.RowIndex 
     Dim FirstComboboxValue = DataGridView1(3, rowIndex).Value 

     'Clear items so they don't keep adding on each other 
     cbCell.Items.Clear() 

     Select Case FirstComboboxValue 
      Case "Choice1" 
       cbCell.Items.Add("Item1") 
       cbCell.Items.Add("Item2") 
      Case "Choice2" 
       cbCell.Items.Add("Item3") 
       cbCell.Items.Add("Item4") 
      Case "Choice3" 
       cbCell.Items.Add("Item5") 
      Case "Choice4" 
       cbCell.Items.Add("Item6") 
       cbCell.Items.Add("Item7") 
     End Select 

     'Remove event handler to prevent memory leak 
     RemoveHandler comboBox.SelectedIndexChanged, AddressOf ComboBox_SelectedIndexChanged 
    End If 
End Sub 

出於某種原因,當我用一個破發點,並通過程序步驟中,僅在第二次嘗試打開「項目」combobox時第二次添加項目combobox

如果我嘗試在沒有調試的情況下運行程序,則不顯示任何內容。任何想法我做錯了什麼?

回答

1

如果在ComboBox中使用SelectedIndexChanged,則即使未單擊ComboBox,也可能遇到事件被觸發的問題。

當您打開和關閉Windows窗體時會發生這種情況。

通過使用SelectionChangeCommitted事件來獲得更好的效果。

SelectionChangeCommitted事件發生在所選項目已更改並且該更改顯示在組合框中。

通過使用SelectionChangeCommitted事件,您不需要聲明RemoveHandler和AddHandler語句。


另一種可能性:

手柄試試吧cmb.SelectedIndexChanged

有幾種方法在VB.NET聲明事件。通常使用的是句柄關鍵字。

Private Sub ComboBox_SelectedIndexChanged(ByVal sender As Object, 
      ByVal e As EventArgs) Handles cmb.SelectedIndexChanged 
+0

感謝您的回覆!不幸的是,由於該方法在我的EditingControlShowing事件之外被聲明,所以會出錯。它不知道該怎麼辦「cmb」 – Alex 2013-02-28 15:01:45

+0

我知道這將適用於一個正常的組合框控件。問題是我們正在處理一個DataGridViewComboBoxColumn,他們需要處理程序才能工作 – Alex 2013-02-28 15:42:22

+0

你試過了:SelectionChangeCommitted事件與addHandler和removeHandler? – 2013-02-28 15:58:51

相關問題