Private Sub tdbgDetail_BeforeRowColChange(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.CancelEventArgs) Handles tdbgGrid.BeforeRowColChange
Try
MoveGridCarsor(sender, e)
Catch ex As Exception
Dim log As WriteDBLog = New WriteDBLog(Me)
log.SystemErrWithDBLog(ex)
End Try
End Sub
''' <summary>
''' グリッド上で特殊なカーソル移動を行う。
''' </summary>
Private Sub MoveGridCarsor(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.CancelEventArgs)
Try
Dim tdbg As TrueDBGridEx = TryCast(sender, TrueDBGridEx)
With tdbg
' 値に応じてセルの移動先を切り替えます。
Dim currentDispCol As C1DisplayColumn = .Splits(0).DisplayColumns(.Col)
Dim dataField As String = currentDispCol.DataColumn.DataField
SetInputColumns(tdbg.Name)
Dim idx As Integer
idx = m_tabColumns.IndexOf(dataField)
If idx = -1 Then
Return
End If
If .PressGridTabEnter = -1 Then
此处省略
ElseIf .PressGridTabEnter = 1 Then
If idx < m_tabColumns.Count - 1 Then
'次へ移動
e.Cancel = True
.Col = .Splits(0).DisplayColumns.IndexOf(.Splits(0).DisplayColumns(m_tabColumns(idx + 1).ToString))<----运行到这里之后就会出现BeforeRowColChange的无限循环
Else
' 最終列の場合の記述
e.Cancel = True
Dim row As Integer = .Row + 1
If row < .Splits(0).Rows.Count Then
Dim firstCol As String = m_tabColumns(0).ToString
.Col = .Splits(0).DisplayColumns.IndexOf(.Splits(0).DisplayColumns(firstCol))
If tdbg.BeforeColUpdateCancel = False OrElse dataField = firstCol Then
.Row = row
End If
End If
End If
End If
End With
Catch ex As Exception
Throw
End Try
End Sub |