(对不起,英语不佳)
我正在与-
窗口应用程序,VB,VS 2012,.net F / W- 4.5
我有一个DGV(datagridview)的形式。
dgv中有不同类型的列是在运行时创建的。
要首先执行下一步,我必须确定单击了哪种类型的单元格/列(例如dgv-combobox,dgv-textbox等)。
代码在这里,对我不起作用,因此我尝试使用MsgBox检查单击的dgv-cell的类型。
Private Sub dgv_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles dgv.EditingControlShowing
Dim column_type As Object
column_type = dgv.Columns(dgv.SelectedCells(0).ColumnIndex).CellType
column_type.GetType()
If TypeOf column_type Is DataGridViewComboBoxCell Then
'code goes here
MsgBox("yes")
Else
'code goes here
MsgBox(column_type.ToString)
End If
End Sub
但是问题是,控制权一直都在if...else statement
的其他部分,而MsgBox(column_type.ToString)
则在显示System.Windows.Forms.DataGridViewTextBoxCell或System的所有类型的列。 Windows.Forms.DataGridViewComboBoxCell。
我尝试使用
检查列类型
DataGridViewComboBoxCell,
DataGridViewComboBoxColumn,
DataGridViewComboBoxEditingControl-但无效。
我不确定,但是我认为问题出在Dim column_type As Object
上。
请帮助我。预先感谢。
答案 0 :(得分:1)
如果尚未启用Option Strict(项目严格)(项目属性>“编译”)
If TypeOf DataGridView1.Columns(0) Is DataGridViewTextBoxColumn Then
MsgBox("yes")
End If
对我来说很好。
替代:
If DataGridView1.Columns(0).GetType Is GetType(DataGridViewTextBoxColumn) Then
MsgBox("yes")
End If
您当前正在比较typeof类型。 如果由于某种原因它不起作用,则应使用断点检查代码。
答案 1 :(得分:1)
代码TypeOf column_type
是多余的,因为column_type实际上是一个类型!将其分配给对象时,这是错误的。您可以将其指定为类型。但更容易的是让编译器为您做思考并使用隐式输入
Private Sub dgv_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles dgv.EditingControlShowing
' cursor on Dim, it is Type
Dim column_type = dgv.Columns(dgv.SelectedCells(0).ColumnIndex).CellType
' the proper syntax is Type is GetType(Type)
If column_type Is GetType(System.Windows.Forms.DataGridViewComboBoxCell) Then
MsgBox("yes")
Else
MsgBox(column_type.ToString)
End If
End Sub
语法为If Type is GetType(Type) Then