单元格datagridview vb.net中的光标

时间:2011-08-16 16:22:26

标签: vb.net datagridview

VB.NET DataGridView控件:

我知道这可能非常简单,但是如何在表单加载时将闪烁的光标放在特定的单元格中?

我希望效果有点像当你有一个带有文本框的表单时,当你正确设置标签顺序时,第一个文本框会自动获得焦点,你可以马上开始输入。

在一个相关的问题上:当你进入一个单元格时,如何让enter键激活表单的接受按钮?

谢谢!

2 个答案:

答案 0 :(得分:1)

你是对的,将输入光标定位到DataGridView中的特定单元格相当容易。将DataGridView的CurrentCell属性设置为您希望光标所在的单元格,然后调用DGV的BeginEdit方法。

通过编程方式点击(我相信你的意思是'激活')表格AcceptButton也很容易。在表单实例AcceptButton上调用PerformClick方法:

Me.AcceptButton.PerformClick()

让DGV处理Enter键有点棘手,尽管表面看起来似乎并非如此。它很棘手的原因是因为当您在编辑模式下有DGV单元格时,DGV KeyPressPreviewKeyPress事件不会触发。解决方案是通过扩展标准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

答案 1 :(得分:0)

试试这段代码,一定会有效

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