Перемещение по ячейкам DataGridView клавишей tab - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

в форме windows form представлен программно созданый datagridview состоящий из 4 столбцов в первых трех - значения получаемые ранее. а в последнем необходимо ввести данные при создании первым трем столбцам присваивается свойство readonly=true как сделать так, чтобы: 1. при нажатии TAB при выделении ячейки в колонке 4 выделение переходило на следующую строку в колонку 4(а не в колонку 1)...по хорошему первые три колонки не доступные для редактирования не должны никак выделяться... ну или с помощью нажатия tab как перемещаться вниз по столбцу повторюсь: grid создается программно в ходе работы, так что и свойства надо писать ручками... вообщем надо чтобы пользователь ввел в ячейку 1 строки столбца 4 значение, нажал таб ввел значение которое уже ввелось в ячейку 2 строки 4 столбца и тд... пытался сделать так: при создании формы и грида создаем событие
Листинг программы
  1. AddHandler dg.SelectionChanged, AddressOf ProtFill_User.dgw_selectNext
далее уже в форме
Листинг программы
  1. Public Class ProtFill_User
  2. Public Sub dgw_selectNext(sender As System.Object, e As System.EventArgs)
  3. Dim dd As DataGridView = sender
  4. For Each c As DataGridViewCell In dd.SelectedCells
  5. dd.CurrentCell = dd.Item(dd.ColumnCount - 1, c.RowIndex)
  6. dd.CurrentCell.Selected = True
  7. Next
  8. End Sub
  9. End Class
при этом верно работает если кликать мышкой на ячейки первых трех столбцов, но при нажатии таб при этом выделяется правильная ячейка, но вот активная, обведенная пунктиром ячейка в которую вводятся данные все равно перемещается по старой схеме, таким образом чтобы добраться до нужной надо нажать таб трижды, что не хорошо... что подскажете?

Решение задачи: «Перемещение по ячейкам DataGridView клавишей tab»

textual
Листинг программы
  1.   Private Sub DataGridView1_KeyDown(sender As Object, e As KeyEventArgs) Handles DataGridView1.KeyDown
  2.         If e.KeyCode = Keys.Tab Then
  3.             e.Handled = True
  4.             If sender.CurrentRow.Index <> sender.Rows.Count - 1 Then
  5.                 sender.CurrentCell = sender(3, sender.CurrentRow.Index + 1)
  6.             End If
  7.         End If
  8.     End Sub
  9.  
  10.     Private Sub DataGridView1_KeyUp(sender As Object, e As KeyEventArgs) Handles DataGridView1.KeyUp
  11.         If e.KeyCode = Keys.Tab Then
  12.             e.Handled = True
  13.             If sender.CurrentRow.Index <> sender.Rows.Count Then
  14.                 sender.CurrentCell = sender(3, sender.CurrentRow.Index)
  15.             End If
  16.         End If
  17.     End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут