2013-07-07 3 views
2

Я использовал событие CellEndEdit, после редактирования значения ячейки я нажимаю клавишу ввода, затем фокус ячейки перемещается вниз.DataGridView SetFocus после CellEndEdit

Я хочу, чтобы фокус возвращался в исходную ячейку, где я редактировал значение.

Я использовал много способов, но не смог.

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 KEY фокус возвращается в оригинальной Cell, который был отредактирован.

Потому что каждый раз, когда я нажимаю кнопку ENTER, он сразу переходит к следующей ячейке.

Какой код переместить фокус обратно в исходную ячейку, отредактированную.

Я знаю метод EditingControlShowing, но я не думаю, что должен использовать этот метод, чтобы получить то, что я тоже хотел.

ответ

6

Попробуйте следующее: определите 3 переменные. Один запомнить, если операция редактирования была сделана, другие 2 для хранения строк и столбцов индексов последней редактируемой ячейки:

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

Когда происходит операция редактирования хранить координаты редактируемой ячейки и установить флаг правда внутри обработчика CellEndEdit события:

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 обработчике события вы установили DataGridView «s CurrentCell свойства последней редактируемой ячейку с помощью currentRow и currentColumn переменных, чтобы отменить изменения по умолчанию ячейки фокусировки :

Private Sub DataGridView1_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridView1.SelectionChanged 
    If flag_cell_edited Then 
     DataGridView1.CurrentCell = DataGridView1(currentColumn, currentRow) 
     flag_cell_edited = False 
    End If 
End Sub 
+0

Мне не нужно думать об этом методе, потому что вы уже предоставили. благодарю вас и stackoverflow. – XXXXXXXXXXXXXX

Смежные вопросы