asked on
Option Explicit On
Public Class frmMain
Dim intCurrentRow As Integer = 0
Dim intCurrentColumn As Integer = 0
Delegate Sub SetColumnIndex(ByVal i As Integer)
Private Sub Create_Grid_Column()
Dim dgvItemCode As New DataGridViewTextBoxColumn
Add_Column("ItemCode", "Code", 0, dgvItemCode, DataGridView1)
Dim dgvItemName As New DataGridViewTextBoxColumn
Add_Column("ItemName", "Name", 1, dgvItemName, DataGridView1)
Dim dgvItemQty As New DataGridViewTextBoxColumn
Add_Column("ItemQty", "Qty", 2, dgvItemQty, DataGridView1)
End Sub
Private Sub frmMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.StartPosition = FormStartPosition.CenterScreen
With DataGridView1
.EditMode = DataGridViewEditMode.EditProgrammatically
.AllowUserToAddRows = False
End With
Create_Grid_Column()
Add_Row(DataGridView1)
Add_Row(DataGridView1)
End Sub
Private Sub DataGridView1_CellBeginEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles DataGridView1.CellBeginEdit
With DataGridView1
If e.RowIndex <> intCurrentRow Then
intCurrentColumn += 1
Dim method As New SetColumnIndex(AddressOf Grid_Navigation)
Me.DataGridView1.BeginInvoke(method, intCurrentRow)
End If
.Rows(e.RowIndex).Cells(e.ColumnIndex).Style.BackColor = Color.FromArgb(255, 128, 0)
End With
End Sub
Private Sub Grid_Navigation(ByVal RowIndex As Integer)
With DataGridView1
If .CurrentCell.ColumnIndex < .Columns.Count - 1 Then
.CurrentCell = DataGridView1.Rows(RowIndex).Cells(intCurrentColumn)
Else
intCurrentRow += 1
.CurrentCell = DataGridView1.Rows(intCurrentRow).Cells(0)
End If
.BeginEdit(True)
End With
End Sub
Private Sub DataGridView1_CellEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEnter
With DataGridView1
.BeginEdit(True)
End With
End Sub
Private Sub DataGridView1_CellLeave(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellLeave
With DataGridView1
.Rows(e.RowIndex).Cells(e.ColumnIndex).Style.BackColor = Color.White
End With
End Sub
Public Sub Add_Column(ByVal strColumnName As String, _
ByVal strHeaderName As String, _
ByVal intDisplayIndex As Integer, _
ByVal dgvTextColumn As DataGridViewTextBoxColumn, _
ByVal dgvName As DataGridView)
With dgvName
dgvTextColumn.DisplayIndex = intDisplayIndex
dgvTextColumn.HeaderText = strHeaderName
dgvTextColumn.DataPropertyName = strColumnName
dgvTextColumn.Name = strColumnName
.Columns.Add(dgvTextColumn)
End With
End Sub
Public Sub Add_Row(ByVal dgvName As DataGridView)
With dgvName
.Rows.Add()
End With
End Sub
End Class
ASKER
ASKER
Option Explicit On
Public Class frmMain
Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
If keyData = Keys.Enter And Me.DataGridView1.IsCurrentCellInEditMode Then
SendKeys.Send("{TAB}")
Return True
Else
Return MyBase.ProcessCmdKey(msg, keyData)
End If
End Function
Private Sub DataGridView1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DataGridView1.KeyDown
If e.KeyCode = Keys.Enter Then
e.SuppressKeyPress = True
SendKeys.Send("{TAB}")
End If
End Sub
Private Sub Create_Grid_Column()
Dim dgvItemCode As New DataGridViewTextBoxColumn
Add_Column("ItemCode", "Code", 0, dgvItemCode, DataGridView1)
Dim dgvItemName As New DataGridViewTextBoxColumn
Add_Column("ItemName", "Name", 1, dgvItemName, DataGridView1)
Dim dgvItemQty As New DataGridViewTextBoxColumn
Add_Column("ItemQty", "Qty", 2, dgvItemQty, DataGridView1)
End Sub
Public Sub Add_Row(ByVal dgvName As DataGridView)
With dgvName
.Rows.Add()
End With
End Sub
Public Sub Add_Column(ByVal strColumnName As String, _
ByVal strHeaderName As String, _
ByVal intDisplayIndex As Integer, _
ByVal dgvTextColumn As DataGridViewTextBoxColumn, _
ByVal dgvName As DataGridView)
With dgvName
dgvTextColumn.DisplayIndex = intDisplayIndex
dgvTextColumn.HeaderText = strHeaderName
dgvTextColumn.DataPropertyName = strColumnName
dgvTextColumn.Name = strColumnName
.Columns.Add(dgvTextColumn)
End With
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.StartPosition = FormStartPosition.CenterScreen
With DataGridView1
.EditMode = DataGridViewEditMode.EditProgrammatically
.AllowUserToAddRows = False
End With
Create_Grid_Column()
Add_Row(DataGridView1)
Add_Row(DataGridView1)
End Sub
Private Sub DataGridView1_CellEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEnter
With DataGridView1
.Rows(e.RowIndex).Cells(e.ColumnIndex).Style.BackColor = Color.FromArgb(255, 128, 0)
.BeginEdit(True)
End With
End Sub
Private Sub DataGridView1_CellLeave(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellLeave
With DataGridView1
.Rows(e.RowIndex).Cells(e.ColumnIndex).Style.BackColor = Color.White
End With
End Sub
End Class
ASKER
ASKER
ASKER
ASKER
Option Explicit On
Public Class frmMain
Dim intCurrentRow As Integer = 0
Dim intCurrentColumn As Integer = 0
Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
If keyData = Keys.Enter And Me.DataGridView1.IsCurrentCellInEditMode Then
SendKeys.Send("{TAB}")
Return True
Else
Return MyBase.ProcessCmdKey(msg, keyData)
End If
End Function
Private Sub DataGridView1_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
intCurrentRow = e.RowIndex
intCurrentColumn = e.ColumnIndex
With DataGridView1
Select Case intCurrentColumn
Case 0
.CurrentCell = .Rows(intCurrentRow).Cells(intCurrentColumn + 2)
.BeginEdit(True)
Case 2
.CurrentCell = .Rows(intCurrentRow + 1).Cells(1)
.BeginEdit(True)
End Select
End With
End Sub
Private Sub DataGridView1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DataGridView1.KeyDown
If e.KeyCode = Keys.Enter Then
e.SuppressKeyPress = True
SendKeys.Send("{TAB}")
End If
End Sub
Private Sub Create_Grid_Column()
Dim dgvItemCode As New DataGridViewTextBoxColumn
Add_Column("ItemCode", "Code", 0, dgvItemCode, DataGridView1)
Dim dgvItemName As New DataGridViewTextBoxColumn
Add_Column("ItemName", "Name", 1, dgvItemName, DataGridView1)
Dim dgvItemQty As New DataGridViewTextBoxColumn
Add_Column("ItemQty", "Qty", 2, dgvItemQty, DataGridView1)
End Sub
Public Sub Add_Row(ByVal dgvName As DataGridView)
With dgvName
.Rows.Add()
End With
End Sub
Public Sub Add_Column(ByVal strColumnName As String, _
ByVal strHeaderName As String, _
ByVal intDisplayIndex As Integer, _
ByVal dgvTextColumn As DataGridViewTextBoxColumn, _
ByVal dgvName As DataGridView)
With dgvName
dgvTextColumn.DisplayIndex = intDisplayIndex
dgvTextColumn.HeaderText = strHeaderName
dgvTextColumn.DataPropertyName = strColumnName
dgvTextColumn.Name = strColumnName
.Columns.Add(dgvTextColumn)
End With
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.StartPosition = FormStartPosition.CenterScreen
With DataGridView1
.EditMode = DataGridViewEditMode.EditProgrammatically
.AllowUserToAddRows = False
End With
Create_Grid_Column()
Add_Row(DataGridView1)
Add_Row(DataGridView1)
End Sub
Private Sub DataGridView1_CellEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEnter
With DataGridView1
.Rows(e.RowIndex).Cells(e.ColumnIndex).Style.BackColor = Color.FromArgb(255, 128, 0)
.BeginEdit(True)
End With
End Sub
Private Sub DataGridView1_CellLeave(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellLeave
With DataGridView1
.Rows(e.RowIndex).Cells(e.ColumnIndex).Style.BackColor = Color.White
End With
End Sub
End Class
ASKER
ASKER
Private Sub DataGridView1_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
intCurrentRow = e.RowIndex
intCurrentColumn = e.ColumnIndex
With DataGridView1
Select Case intCurrentColumn
Case 0
.CurrentCell = .Rows(intCurrentRow).Cells(intCurrentColumn + 2)
.BeginEdit(True)
Case 2
.CurrentCell = .Rows(intCurrentRow + 1).Cells(1)
.BeginEdit(True)
End Select
End With
End Sub
Option Explicit On
Public Class frmMain
Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
If keyData = Keys.Enter Then 'And Me.DataGridView1.IsCurrentCellInEditMode Then
With DataGridView1
Select Case .CurrentCell.ColumnIndex
Case 0
.CurrentCell = .Rows(.CurrentCell.RowIndex).Cells(.CurrentCell.ColumnIndex + 2)
Case 2
If .CurrentCell.RowIndex + 1 = .RowCount Then Add_Row(DataGridView1)
.CurrentCell = .Rows(.CurrentCell.RowIndex + 1).Cells(0)
Case Else
SendKeys.Send("{TAB}")
End Select
.BeginEdit(True)
End With
Return True
Else
Return MyBase.ProcessCmdKey(msg, keyData)
End If
End Function
Private Sub Create_Grid_Column()
Dim dgvItemCode As New DataGridViewTextBoxColumn
Add_Column("ItemCode", "Code", 0, dgvItemCode, DataGridView1)
Dim dgvItemName As New DataGridViewTextBoxColumn
Add_Column("ItemName", "Name", 1, dgvItemName, DataGridView1)
Dim dgvItemQty As New DataGridViewTextBoxColumn
Add_Column("ItemQty", "Qty", 2, dgvItemQty, DataGridView1)
End Sub
Public Sub Add_Row(ByVal dgvName As DataGridView)
With dgvName
.Rows.Add()
End With
End Sub
Public Sub Add_Column(ByVal strColumnName As String, _
ByVal strHeaderName As String, _
ByVal intDisplayIndex As Integer, _
ByVal dgvTextColumn As DataGridViewTextBoxColumn, _
ByVal dgvName As DataGridView)
With dgvName
dgvTextColumn.DisplayIndex = intDisplayIndex
dgvTextColumn.HeaderText = strHeaderName
dgvTextColumn.DataPropertyName = strColumnName
dgvTextColumn.Name = strColumnName
.Columns.Add(dgvTextColumn)
End With
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.StartPosition = FormStartPosition.CenterScreen
With DataGridView1
.EditMode = DataGridViewEditMode.EditProgrammatically
.AllowUserToAddRows = False
End With
Create_Grid_Column()
Add_Row(DataGridView1)
Add_Row(DataGridView1)
End Sub
Private Sub DataGridView1_CellEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEnter
With DataGridView1
.Rows(e.RowIndex).Cells(e.ColumnIndex).Style.BackColor = Color.FromArgb(255, 128, 0)
.BeginEdit(True)
End With
End Sub
Private Sub DataGridView1_CellLeave(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellLeave
With DataGridView1
.Rows(e.RowIndex).Cells(e.ColumnIndex).Style.BackColor = Color.White
End With
End Sub
End Class
ASKER
Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
If keyData = Keys.Enter Then
With DataGridView1
Select Case .CurrentCell.ColumnIndex
Case 0
Dim dgvRow As DataGridViewRow = .Rows(.CurrentRow.Index)
Dim strData As String = dgvRow.Cells(.CurrentCell.ColumnIndex).Value
If strData Is Nothing Then strData = ""
If strData.Trim = "" Then
'Stay At current cell
Else
.CurrentCell = .Rows(.CurrentCell.RowIndex).Cells(.CurrentCell.ColumnIndex + 2)
End If
Case 2
If .CurrentCell.RowIndex + 1 = .RowCount Then Add_Row(DataGridView1)
.CurrentCell = .Rows(.CurrentCell.RowIndex + 1).Cells(0)
Case Else
SendKeys.Send("{TAB}")
End Select
.BeginEdit(True)
End With
Return True
Else
Return MyBase.ProcessCmdKey(msg, keyData)
End If
End Function
ASKER
Visual Basic .NET (VB.NET) is an object-oriented programming language implemented on the .NET framework, but also supported on other platforms such as Mono and Silverlight. Microsoft launched VB.NET as the successor to the Visual Basic language. Though it is similar in syntax to Visual Basic pre-2002, it is not the same technology,
TRUSTED BY
Why do use CellBeginEdit() event to navigate instead of keydown/keypress/keyup ?
Just curiosity before continue.