Перемещение по ячейкам DataGridView клавишей tab - Visual Basic .NET
Формулировка задачи:
в форме windows form представлен программно созданый datagridview состоящий из 4 столбцов
в первых трех - значения получаемые ранее. а в последнем необходимо ввести данные
при создании первым трем столбцам присваивается свойство readonly=true
как сделать так, чтобы:
1. при нажатии TAB при выделении ячейки в колонке 4 выделение переходило на следующую строку в колонку 4(а не в колонку 1)...по хорошему первые три колонки не доступные для редактирования не должны никак выделяться...
ну или с помощью нажатия tab как перемещаться вниз по столбцу
повторюсь: grid создается программно в ходе работы, так что и свойства надо писать ручками...
вообщем надо чтобы пользователь ввел в ячейку 1 строки столбца 4 значение, нажал таб ввел значение которое уже ввелось в ячейку 2 строки 4 столбца и тд...
пытался сделать так:
при создании формы и грида создаем событие
далее уже в форме
при этом верно работает если кликать мышкой на ячейки первых трех столбцов, но при нажатии таб
при этом выделяется правильная ячейка, но вот активная, обведенная пунктиром ячейка в которую вводятся данные все равно перемещается по старой схеме, таким образом чтобы добраться до нужной надо нажать таб трижды, что не хорошо...
что подскажете?
Листинг программы
- AddHandler dg.SelectionChanged, AddressOf ProtFill_User.dgw_selectNext
Листинг программы
- Public Class ProtFill_User
- Public Sub dgw_selectNext(sender As System.Object, e As System.EventArgs)
- Dim dd As DataGridView = sender
- For Each c As DataGridViewCell In dd.SelectedCells
- dd.CurrentCell = dd.Item(dd.ColumnCount - 1, c.RowIndex)
- dd.CurrentCell.Selected = True
- Next
- End Sub
- End Class
Решение задачи: «Перемещение по ячейкам DataGridView клавишей tab»
textual
Листинг программы
- Private Sub DataGridView1_KeyDown(sender As Object, e As KeyEventArgs) Handles DataGridView1.KeyDown
- If e.KeyCode = Keys.Tab Then
- e.Handled = True
- If sender.CurrentRow.Index <> sender.Rows.Count - 1 Then
- sender.CurrentCell = sender(3, sender.CurrentRow.Index + 1)
- End If
- End If
- End Sub
- Private Sub DataGridView1_KeyUp(sender As Object, e As KeyEventArgs) Handles DataGridView1.KeyUp
- If e.KeyCode = Keys.Tab Then
- e.Handled = True
- If sender.CurrentRow.Index <> sender.Rows.Count Then
- sender.CurrentCell = sender(3, sender.CurrentRow.Index)
- End If
- End If
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д