Как найти другой тип datagridviewcell или datagridviewcolumn (среда выполнения создана) - PullRequest
0 голосов
/ 05 октября 2018

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

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Код 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

См. https://stackoverflow.com/a/6580236/832052

0 голосов
/ 05 октября 2018

Включить 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 type с type.Если по какой-то причине это не работает, вам следует проверить код с точкой останова.

...