2

comboboxの最初の選択に基づいて、2番目に値を追加しようとしています(列も含まれています)。comboboxdatagridviewtextbox

これが私のコードです:

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と、「アイテム」を開こうとした2回目にのみアイテムが追加されますcombobox

デバッグせずにプログラムを実行しようとすると、何も表示されません。私が間違っていることは何か分かりますか?

4

1 に答える 1

1

ComboBox で SelectedIndexChanged を使用している場合、ComboBox をクリックしていなくてもイベントが発生するという問題が発生する可能性があります。

これは、Windows フォームを開いて閉じるときに発生します。

これには、 SelectionChangeCommittedイベントを使用することをお勧めします。

SelectionChangeCommitted イベントは、選択した項目が変更され、その変更が ComboBox に表示されるときに発生します。

SelectionChangeCommitted イベントを使用すると、RemoveHandler および AddHandler ステートメントを宣言する必要がなくなります。


別の可能性:

ハンドル cmb.SelectedIndexChangedで試してください

VB.NET でイベントを宣言するには、いくつかの方法があります。通常は、handles キーワードを使用します。

Private Sub ComboBox_SelectedIndexChanged(ByVal sender As Object,
            ByVal e As EventArgs) Handles cmb.SelectedIndexChanged
于 2013-02-28T14:53:49.383 に答える