Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net Datagridview控件修改另一个_Vb.net_Datagridview_Combobox - Fatal编程技术网

Vb.net Datagridview控件修改另一个

Vb.net Datagridview控件修改另一个,vb.net,datagridview,combobox,Vb.net,Datagridview,Combobox,我正试图根据在mydatagridview中选择的第一个combobox(其中也包含textbox列)向第二个combobox添加值 这是我的密码: Private Sub DataGridView1_EditingControlShowing(sender As Object, e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlSho

我正试图根据在my
datagridview
中选择的第一个
combobox
(其中也包含
textbox
列)向第二个
combobox
添加值

这是我的密码:

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
我的处理程序向组合框\u 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
出于某种原因,当我使用断点并逐步执行程序时,只有在第二次尝试打开“item”
组合框时,项目才会添加到第二个
组合框中


如果我尝试在不调试的情况下运行程序,则不会显示任何内容。知道我做错了什么吗?

如果在组合框中使用SelectedIndexChanged,即使未单击组合框,也可能会遇到触发事件的问题

打开和关闭Windows窗体时会发生这种情况

通过使用SelectionChangeCommitted事件,这是一个更好的方法

SelectionChangeCommitted事件发生在所选项目已更改且该更改显示在组合框中时

通过使用SelectionChangeCommitted事件,您不需要声明RemoveHandler和AddHandler语句


另一种可能性:

尝试使用处理cmb。SelectedIndexChanged

在VB.NET中声明事件有几种方法。通常使用handles关键字

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

谢谢你的回复!不幸的是,由于在我的EditingControlShowing事件之外声明了该方法,这将出错。它不知道如何处理“cmb”,我知道这将适用于普通的组合框控件。问题是我们正在处理一个DataGridViewComboxColumn,他们需要处理程序才能工作。您是否尝试过使用addHandler和removeHandler处理:SelectionChangeCommitted事件?是的,很遗憾,结果与SelectedIndexChanged相同。同时,我将开发另一个表单,在datagridview中添加信息。这是一个解决办法,但我也会在周末自己的时间努力解决这个问题。