在数据网格视图中有五列
1 - 产品ID 2-产品名称3-描述4-Price和第五个是
选择国家,即组合柱
DataGridView1.Columns.Add("ID", "Product ID")
DataGridView1.Columns.Add("Name", "Product Name")
DataGridView1.Columns.Add("Description", "Description")
DataGridView1.Columns.Add("Price", "Price")
Dim datagridviewcol As New DataGridViewComboBoxColumn
datagridviewcol.Items.Add("Pak")
datagridviewcol.Items.Add("KUI")
datagridviewcol.Name = "Select"
DataGridView1.Columns.Add(datagridviewcol)
我在datagridview editingcontrolshowing中添加处理程序selectedindexchanged,如
Private Sub DataGridView1_EditingControlShowing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing
If Me.DataGridView1.CurrentCell.ColumnIndex = 4 Then
Dim cb As ComboBox = CType(e.Control, ComboBox)
AddHandler cb.SelectedIndexChanged, AddressOf ComboBox_SelectedIndexChanged
End If
End Sub
selectedindexchanged事件,如
Private Sub ComboBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
If CType(sender, ComboBox).SelectedIndex = 0 Then
MessageBox.Show("PAK")
Else
MessageBox.Show("KUI")
End If
End Sub
它运行良好,但如果你在datagridview第4行,那么消息框4次提示你 如果你从第15行选择“PAK”,那么messagebox将提示15次,我只需要1次提示。
帮助我。因此,独立于行的消息框显示的时间不会超过行号。答案 0 :(得分:1)
这是因为每次组合框显示你正在向它添加事件,所以它会触发x次。
If Me.DataGridView1.CurrentCell.ColumnIndex = 4 Then
Dim cb As ComboBox = CType(e.Control, ComboBox)
RemoveHandler cb.SelectedIndexChanged, AddressOf ComboBox_SelectedIndexChanged //remove handler if it was added before
AddHandler cb.SelectedIndexChanged, AddressOf ComboBox_SelectedIndexChanged
End If
这样您就可以删除附加到ComboBox.SelectedIndexChanged
的任何处理程序。
来自MSDN
DataGridView控件一次托管一个编辑控件,和 只要单元格类型没有改变,就重复使用编辑控件 编辑之间。将事件处理程序附加到编辑控件时 因此,您必须采取预防措施,以避免附加相同的 处理程序多次。要避免此问题,请从中删除处理程序 将处理程序附加到事件之前的事件。这将 如果处理程序已附加到事件,则防止重复, 但是否则没有效果。有关更多信息,请参阅 DataGridViewComboBoxEditingControl类概述中的示例代码。