【问题标题】:Visual Basic Datagridview cell event then press keyboard enterVisual Basic Datagridview 单元格事件然后按键盘输入
【发布时间】:2016-07-12 09:03:48
【问题描述】:

如果可能的话,我有一个问题,我不知道如何解决它。我有一个datagridview,我想要一个事件然后进入一个单元格文本我输入新行(键盘输入),我现在有一个事件“grid_keydown”或“grid_keypress”,但这两个工作只有当我选择datagridview full行而不是每个 datagridview 单元格。有一种解决方案可以配置 datagridview 属性以使这 2 个事件也适用于每个 datagridview 单元格编辑?非常感谢

【问题讨论】:

  • 澄清:您想为数据网格中单元格中存在的文本添加换行符;当您在该特定单元格中按 Enter 时应该会发生这种情况?
  • 我认为这样更清楚.. 然后我按回车键然后我的光标在我想保留一个事件的红色矩形中
  • CellBeginEdit 事件,这是您要找的吗?
  • CellBeginEdit 事件正在调用,然后我将光标放入单元格,但随后我尝试按 Enter 或写一些东西不要进入此事件,很抱歉。
  • @SilviaParfeni 我看到你的网格是德语的。你想用德语告诉我你想达到什么目标吗?我仍然不明白 100% ;)

标签: vb.net


【解决方案1】:

所以我终于找到了一个解决方案来实现您正在寻找的东西。坏消息:这比我想象的要棘手(而且应该是恕我直言)。无论如何,您需要以下步骤:

  1. 创建一个自定义 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
    
  2. 创建一个自定义 DataGridViewTextBoxCell 类。
    就是设置和使用之前创建的DataGridViewTextBoxEditingControl类型。

    Public Class MyDatagridTextBoxCell
       Inherits DataGridViewTextBoxCell
    
       Public Overrides ReadOnly Property EditType As Type
          Get
              Return GetType(MyDatagridTextBoxEditControl)
          End Get
       End Property
    End Class
    
  3. 将数据绑定到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 实现相同的行为

【讨论】:

  • 我想,我可以把第 3 点放在我需要的单元格中,然后我明天尝试这样做。谢谢
猜你喜欢
  • 2014-07-06
  • 1970-01-01
  • 2023-03-11
  • 2014-12-28
  • 1970-01-01
  • 2012-09-27
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多