【问题标题】:How can I handle Enter Key Press in DataGridView when the Cell is in EditMode?当单元格处于 EditMode 时,如何处理 DataGridView 中的 Enter Key Press?
【发布时间】:2016-11-06 03:56:07
【问题描述】:

我有一个DataGridView 并且我已将AllowUserToAddRows 属性设置为false 并在Load 表单的事件处理程序中,我使用函数向网格添加了一个新行。现在,当用户编辑 datagidview 并且一旦他结束编辑并按下 Enter 我想调用该函数以再次向网格添加新行。

我尝试了DataGridView 的KeyDown 事件,但似乎在单元格处于编辑模式时该事件不会触发。

【问题讨论】:

  • 你试过什么?这是非常模糊的。我对 datagridview 不太熟悉,但如果它有 KeyDown 事件,您可以检查是否输入了密钥。 If e.KeyCode = Keys.Enter Then '我的代码
  • 在单元格中按下回车键时,它应该调用一个函数。当单元格处于编辑模式时,keydown 事件不会触发。谢谢
  • 如果用户只想编辑一个单元格而不想添加一个新行,你会怎么做?我建议您忘记按 Enter 键,而只需使用快捷键添加新记录。此外,当您允许用户使用快捷键添加记录时,我看不出有任何理由禁止用户手动添加行(即使您想使用回车键)。

标签: vb.net winforms


【解决方案1】:
 Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
If msg.WParam.ToInt32() = Keys.Enter Then
  DataGridView1.EndEdit()
  MessageBox.Show("Enter key is pressed")
  Return True
End If

Return MyBase.ProcessCmdKey(msg, keyData)
End Function

根据您的情况使用此功能

【讨论】:

    【解决方案2】:

    Microsoft 表示您不能向数据绑定的 DataGridView 添加新行,但事实并非如此。 我假设您想在网格的末尾添加一个新行。默认情况下,DataGridView 控件在网格底部有一个索引为 -1 的空行。要以编程方式添加新行,请执行以下操作:

    Dim rowindex as Int32
    rowIndex = 
    DataGridView1.Rows.GetLastRow(includeFilter:=0)
    DataGridView1.CurrentCell = 
    DataGridView1.Rows.Item(rowIndex).Cells(1)
    DataGridView1.BeginEdit(selectAll:=True)
    

    这为您提供了一个新行。如果您将 DataGridView 设置为 EditOnEnter,当您单击单元格时,您将在最左侧看到笔图标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      • 2015-05-10
      相关资源
      最近更新 更多