1

我试图让我的 DGV 在用户按下 Ctrl+PgDown 时不滚动。我想滚动其他一些控件。问题是,无论某些单元格是否处于编辑模式,都有一些不同的行为。

第一种情况。当没有编辑模式时,我们有以下事件链:

  1. DGV KeyDown
  2. DGV 卷轴
  3. DGV KeyUp

所以我处理 DGV KeyDown。听说我可以检测是否按下了 Ctrl+PgDown 并停止 DGV 滚动发生。

第二种情况。当有编辑模式并且我按下 Ctrl+PgDown 时,我们有以下事件链(请注意,在编辑模式下 DGV 会动态创建 TextBox 控件):

  1. 在 txtbox_PreviewKeyDown Key = ControlKey Ctrl = True
  2. 在 txtbox_KeyDown Key = ControlKey Ctrl = True
  3. 在 txtbox_PreviewKeyDown Key = Next Ctrl = True
  4. 在 dGV_Scroll
  5. 在 dGVEditor_KeyUp Key = Next Ctrl = True
  6. 在 dGVEditor_KeyUp Key = ControlKey Ctrl = False
  7. 在 dGVEditor_KeyUp Key = ControlKey Ctrl = False

我还跟踪 txtbox_KeyUp 和 txtbox_KeyPress 但它们从不触发。

所以在这种情况下,我只能在 PreviewKeyDown 中处理 Ctrl+PgDown 但不能阻止它触发滚动事件。

第三种情况。如果用户先按下 txtbox_KeyDown 键,则不会在 PageDown 键上触发(在编辑的单元格中未进行任何更改)。当在单元格中进行一些更改后按下 PageDown(或 Ctrl+PgDown)时,我会跟踪以下内容:

  1. txtbox_PreviewKeyDown Key = ControlKey Ctrl = True
  2. txtbox_KeyDown Key = ControlKey Ctrl = True
  3. txtbox_PreviewKeyDown Key = Next Ctrl = True
  4. txtbox_KeyDown Key = Next Ctrl = True
  5. txtbox_KeyUp 键 = 下一个 Ctrl = True
  6. txtbox_KeyUp Key = ControlKey Ctrl = False

所以在这种情况下,我可以在 txtbox_KeyDown 中处理 Ctrl+PgDown 并可以停止滚动。

我的问题是如何处理第二种情况?是否有某种方法(某些事件)可以在所有情况下由一个事件处理程序处理 Ctrl+PgDown?在我的例子中,我使用了三个:dGV_KeyDown、dGV_EditingControlShowing(用于配置捕获 txtbox_KeyDown)和 txtbox_KeyDown。

4

0 回答 0