(извините за слабость на английском)
Я работаю с окном, VB, VS 2012, .net F / W-4.5
У меня есть DGV (datagridview) в форме.
Существуют разные типы столбцов в dgv, которые создаются во время выполнения.
Чтобы выполнить следующий шаг процесса, прежде всего, я должен определить, какой тип ячейки / столбца щелкнут (например, dgv-combobox, dgv-textbox и т. Д.).
Код здесь, который не работает для меня, поэтому я попытался проверить тип щелчка dgv-cell с помощью MsgBox.
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
с Dim column_type As Object
.
Пожалуйста, помогите мне, ребята. Заранее спасибо.
Всего 2 ответа
Код TypeOf column_type
является избыточным, потому что type_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
Включите параметр Strict on, если вы еще этого не сделали (свойства проекта> Compile)
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 с типом. Если по какой-то причине это не работает, вы должны проверить код с точкой останова.