DataGridView OnKeyPressed行为

时间:2013-09-05 07:56:44

标签: c# winforms datagridview

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

第一个案例。当没有编辑模式时,我们有以下事件链:

  1. DGV KeyDown
  2. DGV Scroll
  3. DGV KeyUp
  4. 所以我处理了DGV KeyDown。听到我可以检测是否按下Ctrl + PgDown并停止DGV滚动。

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

    1. in txtbox_PreviewKeyDown Key = ControlKey Ctrl = True
    2. in txtbox_KeyDown Key = ControlKey Ctrl = True
    3. in txtbox_PreviewKeyDown Key = Next Ctrl = True
    4. in dGV_Scroll
    5. in dGVEditor_KeyUp Key = Next Ctrl = True
    6. in dGVEditor_KeyUp Key = ControlKey Ctrl = False
    7. in dGVEditor_KeyUp Key = ControlKey Ctrl = False
    8. 我也跟踪txtbox_KeyUp和txtbox_KeyPress,但他们从不开火。

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

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

      1. txtbox_PreviewKeyDown Key = ControlKey Ctrl = True
      2. txtbox_KeyDown Key = ControlKey Ctrl = True
      3. txtbox_PreviewKeyDown Key =下一步Ctrl = True
      4. txtbox_KeyDown Key =下一步Ctrl = True
      5. txtbox_KeyUp Key =下一步Ctrl = True
      6. txtbox_KeyUp Key = ControlKey Ctrl = False
      7. 所以在这种情况下我可以在txtbox_KeyDown中处理Ctrl + PgDown并且可以停止滚动。

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

0 个答案:

没有答案