CellEndEdit之后的DataGridView SetFocus

时间:2013-07-07 10:27:19

标签: vb.net winforms datagridview desktop

我使用CellEndEdit事件,在编辑单元格值后按Enter键,然后单元格焦点向下移动。

我希望焦点回到我编辑值的原始Cell。

我用了很多方法,但都失败了。

Private Sub DataGridVie1_CellEndEdit(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridVie1.CellEndEdit
   '...
   '....editing codes here...to input and validate values...
   '...
   '...
   '...before the End If of the procedure I put this values
   DataGridVie1.Rows(e.RowIndex).Cells(e.ColumnIndex).Selected = True
   DataGridVie1.CurrentCell = DataGridVie1.Rows(e.RowIndex).Cells(e.ColumnIndex)
   'DataGridVie1.BeginEdit(False) '''DID NOT apply this because it cause to edit again.
End If

我不知道编辑后或输入键后的实际代码,焦点重新回到编辑的原始单元格中。

因为每次我按下ENTER键,它都会直接转到下一个Cell。

是什么代码将焦点重新定位回原始的Cell编辑。

我知道EditingControlShowing方法但我不认为我必须使用该方法来获得我想要的东西。

2 个答案:

答案 0 :(得分:7)

试试这个:定义3个变量。 一个用于记忆是否已进行编辑操作,另一个用于存储最后编辑的单元格的行索引和列索引:

Private flag_cell_edited As Boolean
Private currentRow As Integer
Private currentColumn As Integer

当编辑操作发生时,您存储已编辑单元格的坐标,并在CellEndEdit事件处理程序中将您的标志设置为true:

Private Sub DataGridView1_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
    flag_cell_edited = True
    currentColumn = e.ColumnIndex
    currentRow = e.RowIndex
End Sub 

然后在SelectionChanged事件处理程序中,使用DataGridViewCurrentCell变量将currentRow的{​​{1}}属性设置为最后编辑的单元格以撤消默认单元格焦点改变:

currentColumn

答案 1 :(得分:0)

安德里亚(Andrea)的想法,但使用DataGridViewCell处理事情:

Private LastCell As DataGridViewCell = Nothing

Private Sub DataGridView1_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
    LastCell = DataGridView1.CurrentCell
End Sub 

Private Sub DataGridView1_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridView1.SelectionChanged
    If LastCell IsNot Nothing Then
        DataGridView.CurrentCell = LastCell
        LastCell = Nothing
    End If
End Sub