Курсор внутри ячейки datagridview vb.net - PullRequest
0 голосов
/ 16 августа 2011

Элемент управления VB.NET DataGridView:

Я знаю, что это, вероятно, очень просто, но как я могу поместить мигающий курсор внутри определенной ячейки при загрузке формы?

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

По смежному вопросу: как я могу заставить ключ ввода активировать кнопку подтверждения формы, когда вы находитесь внутри ячейки?

Спасибо!

Ответы [ 2 ]

1 голос
/ 17 августа 2011

Вы правы, довольно просто поместить курсор ввода в определенную ячейку в DataGridView.Установите свойство DataGridView CurrentCell для ячейки, в которой требуется курсор, и затем вызовите метод DGV BeginEdit.

Программировать также легко (я полагаю, это то, что вы подразумеваете под «активировать») формы AcceptButton.Вызвать метод PerformClick для экземпляра формы AcceptButton:

Me.AcceptButton.PerformClick()

Получение DGV для обработки клавиши Enter немного сложнее, даже если наповерхность.Причина в том, что это сложно, потому что когда у вас есть ячейка DGV в режиме редактирования, события DGV KeyPress и PreviewKeyPress не запускаются.Решение состоит в том, чтобы создать свой собственный DataGridView, расширив стандартный DataGridView, а затем переопределив функцию ProcessCmdKey, чтобы вызвать событие, сообщающее слушателям, что была нажата клавиша Enter.

Вот как может выглядеть ваш расширенный элемент управления DGV:

Public Class MyDataGridView
    Inherits System.Windows.Forms.DataGridView

    Public Event EnterKeyPressed()

    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
            RaiseEvent EnterKeyPressed()
        End If

        Return MyBase.ProcessCmdKey(msg, keyData)
    End Function
End Class

Итак, предположим, что вы используете расширенный DGV, описанный выше, как вы можете сделать то, что вам нужно сделать:

' This positions the input cursor in the third column in the third row.
MyDataGridView1.CurrentCell = MyDataGridView1.Rows(2).Cells(2)
MyDataGridView1.BeginEdit(False)


' Be sure to wire up the EnterKeyPress event on your shiny new MyDataGridView.
Private Sub MyDataGridView1_EnterKeyPressed() Handles MyDataGridView1.EnterKeyPressed
   Me.AcceptButton.PerformClick()
End Sub
0 голосов
/ 23 декабря 2012

Попробуйте этот код, он точно будет работать

dim strRowNumber as string

For Each row As DataGridViewRow In DataGrid.Rows

     strRowNumber = DataGrid.Rows.Count - 1
     DataGrid.CurrentCell = DataGrid.Rows(strRowNumber).Cells(1)'Cell(1) is a cell nowhich u want to edit or set focus
     DataGrid.BeginEdit(False)
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...