我有一个问题,如果可能的话,我不明白如何解决它。我有一个datagridview,我希望有一个事件然后进入一个单元格文本我输入新行(键盘输入),我现在有一个事件" grid_keydown"或" grid_keypress",但这两个工作只有我选择datagridview完整行而不是每个datagridview单元格。有一个解决方案来配置datagridview属性来处理这个2事件也为每个datagridview单元格编辑?非常感谢你
答案 0 :(得分:1)
所以我终于找到了解决方案来实现您的目标。坏消息:这比我想象的要复杂得多(而且应该是imho)。无论如何,您需要以下步骤:
创建自定义DataGridViewTextBoxEditingControl
课程
它是覆盖Enter
键接受Cell
中的更改并切换到下一行的默认行为。它还会在当前单元格文本中附加NewLine
。
Public Class MyDatagridTextBoxEditControl
Inherits DataGridViewTextBoxEditingControl
Public Overrides Function EditingControlWantsInputKey(keyData As Keys, dataGridViewWantsInputKey As Boolean) As Boolean
If dataGridViewWantsInputKey AndAlso keyData = Keys.Enter Then
AppendText(Environment.NewLine)
Return MyBase.EditingControlWantsInputKey(keyData, False)
End If
Return MyBase.EditingControlWantsInputKey(keyData, dataGridViewWantsInputKey)
End Function
End Class
创建自定义DataGridViewTextBoxCell
课程
它是设置和使用以前创建的DataGridViewTextBoxEditingControl
类型。
Public Class MyDatagridTextBoxCell
Inherits DataGridViewTextBoxCell
Public Overrides ReadOnly Property EditType As Type
Get
Return GetType(MyDatagridTextBoxEditControl)
End Get
End Property
End Class
将数据绑定在DataGridView
。
对于我的例子,我将代码放入Form的构造函数中(之后
InitializeComponent()
),但您也可以将其放入Load
事件
'Assume [Beschreibung] is column no. 5
DataGridView1.Columns.Item(4).CellTemplate = New MyDatagridTextBoxCell()
(根据您放置此代码的位置,您可能需要调用DataGridVie1.Refresh()
)。
备注:此代码将导致您无法再使用Enter
键接受文本单元格中更改的值。但是,当您在单元格外单击鼠标时,它将接受输入。 Esc
按键仍会恢复文本更改。
您可以将代码添加到EditingControlWantsInputKey
中,该代码会处理另一个密钥,例如Enter
,例如Insert
或类似的。
如果没有此代码,您可以使用组合键Shift + Enter