VB.NET DataGridView控件:
我知道这可能非常简单,但是如何在表单加载时将闪烁的光标放在特定的单元格中?
我希望效果有点像当你有一个带有文本框的表单时,当你正确设置标签顺序时,第一个文本框会自动获得焦点,你可以马上开始输入。
在一个相关的问题上:当你进入一个单元格时,如何让enter键激活表单的接受按钮?
谢谢!
答案 0 :(得分:1)
你是对的,将输入光标定位到DataGridView中的特定单元格相当容易。将DataGridView的CurrentCell
属性设置为您希望光标所在的单元格,然后调用DGV的BeginEdit
方法。
通过编程方式点击(我相信你的意思是'激活')表格AcceptButton
也很容易。在表单实例AcceptButton
上调用PerformClick
方法:
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
答案 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