自由区/.NET Tipsの器/DaraGridViewの使用方法/実用 †下記のファイル名(コントロール継承ファイルに追加) ファイル名 DataGridVeiwEx.Designer.vb <System.Security.Permissions.UIPermission( _
System.Security.Permissions.SecurityAction.Demand, _
Window:=System.Security.Permissions.UIPermissionWindow.AllWindows)> _
Protected Overrides Function ProcessDialogKey( _
ByVal keyData As Keys) As Boolean
If (keyData And Keys.KeyCode) = Keys.Tab OrElse (keyData And Keys.KeyCode) = Keys.Enter Then
'***現在の行
Dim col As Integer
Dim row As Integer = Me.CurrentCell.RowIndex
If (keyData And Keys.Shift) = Keys.Shift Then
col = Me.CurrentCell.ColumnIndex - 1
Else
col = Me.CurrentCell.ColumnIndex + 1
End If
While 0 <= col AndAlso col < Me.Columns.Count AndAlso Me.Columns(col).ReadOnly
If (keyData And Keys.Shift) = Keys.Shift Then
col -= 1
Else
col += 1
End If
End While
If col < 0 Then
row -= 1
ElseIf Me.ColumnCount <= col Then
row += 1
End If
If 0 <= row AndAlso row < Me.RowCount Then
If col < 0 Then
Return MyBase.ProcessDialogKey(keyData)
ElseIf 0 <= col AndAlso col < Me.Columns.Count Then
'***現在の行
Me.CurrentCell = Me.Rows(Me.CurrentCell.RowIndex).Cells(col)
Else
'***次行
col = 0
While col < Me.Columns.Count AndAlso Me.Columns(col).ReadOnly
col += 1
End While
If row < Me.RowCount AndAlso col < Me.ColumnCount Then
Me.CurrentCell = Me.Rows(row).Cells(col)
End If
End If
Return True
ElseIf Me.RowCount <= col Then
'Me.SelectNextControl(Me, True, True, True, True)
End If
End If
Return MyBase.ProcessDialogKey(keyData)
End Function
<System.Security.Permissions.SecurityPermission( _
System.Security.Permissions.SecurityAction.Demand, _
Flags:=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)> _
Protected Overrides Function ProcessDataGridViewKey( _
ByVal e As KeyEventArgs) As Boolean
If (e.KeyData And Keys.KeyCode) = Keys.Tab OrElse (e.KeyData And Keys.KeyCode) = Keys.Enter Then
Dim col As Integer
Dim row As Integer = Me.CurrentCell.RowIndex
If e.Shift Then
'シフトTABのときの動き
col = Me.CurrentCell.ColumnIndex - 1
While 0 <= col AndAlso Me.Columns(col).ReadOnly
col -= 1
End While
If col < 0 Then
row -= 1
If 0 < row Then
Return Me.FindForm().SelectNextControl(Me, False, False, False, True)
ElseIf 0 <= row AndAlso row < Me.RowCount Then
'***前行
col = Me.Columns.Count - 1
While 0 <= col AndAlso Me.Rows(row).Cells(col).ReadOnly
col -= 1
End While
Me.CurrentCell = Me.Rows(row).Cells(col)
Return True
End If
Else
'***現在の行
Me.CurrentCell = Me.Rows(Me.CurrentCell.RowIndex).Cells(col)
Return True
End If
Else
'TABのときの動き
col = Me.CurrentCell.ColumnIndex + 1
While col < Me.Columns.Count AndAlso Me.Columns(col).ReadOnly
col += 1
End While
If Me.ColumnCount <= col Then
row += 1
'***次行
col = 0
While col < Me.Columns.Count AndAlso Me.Columns(col).ReadOnly
col += 1
End While
If row < Me.RowCount Then
Me.CurrentCell = Me.Rows(row).Cells(col)
Return True
Else
e.Handled = False
Me.FindForm().SelectNextControl(Me.FindForm().ActiveControl, True, True, True, True)
Return True
End If
Else
If 0 <= col AndAlso col < Me.Columns.Count Then
'***現在の行
Me.CurrentCell = Me.Rows(row).Cells(col)
Return True
End If
End If
End If
End If
Return MyBase.ProcessDataGridViewKey(e)
End Function
では、よりいいコントロールボックスを作成してください。
|