【问题标题】:DataGridView Cell Validating only when 'Enter' is pressedDataGridView 单元格仅在按下“Enter”时验证
【发布时间】:2010-04-21 09:12:20
【问题描述】:

我想在用户按下“Enter”键时验证并提交在 DataGridViewCell ONLY 中输入的值。

如果用户按下任何其他键或鼠标按钮(箭头键,使用鼠标按下不同的单元格...),我希望行为类似于“ESC”键:将焦点移动到新单元格并将编辑后的单元格值恢复为之前的值。

【问题讨论】:

  • 你为什么要给用户这么辛苦?完全无法猜测,Enter 键的用途完全不同。
  • @Passant:Enter 键是我正在使用的所有类似工具中的标准确认。表中的每次更改都会将值写入我们的芯片,我们希望用户确定他想要更改芯片值。另一种选择是放置一个应用或检查按钮,但我们不希望使用此选项。

标签: .net winforms datagridview


【解决方案1】:

以下可能有效。

处理 CellValidating 并取消任何更改,除非最后按下的键是 enter。

编辑:

使用您自己的类对 DataGridView 控件进行子类化,并向其中添加以下代码:

  private bool m_lastWasEnter = false;
  public bool LastWasEnter()
  {
     return m_lastWasEnter;
  }
  protected override bool ProcessDialogKey(System.Windows.Forms.Keys keyData)
  {
     m_lastWasEnter = keyData == Keys.Return;
     return base.ProcessDialogKey(keyData);
  }

然后您可以将以下内容添加到 CellValidating 事件的处理程序中:

e.Cancel = !instanceOfYourControl.LastWasEnter();

这不会为您提供您想要的确切内容,但应确保仅在用户至少按 Enter 时才会停止编辑,并且您应该能够对其进行修改以满足您的确切要求。

【讨论】:

  • KeyDown 在我处于编辑模式时永远不会被调用。有什么建议吗?
  • KeyPress 没有捕获“Enter”键。
  • 请查看修改后的答案,这将起作用(这个我有时间测试)。
猜你喜欢
  • 1970-01-01
  • 2011-05-15
  • 2012-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-01
  • 1970-01-01
相关资源
最近更新 更多