1

ユーザーが Ctrl+PgDown を押したときに DGV がスクロールしないようにしようとしています。代わりに他のコントロールをスクロールしたい。問題は、一部のセルが編集モードかどうかにかかわらず、動作が異なることです。

1 番目のケース。編集モードがない場合、次の一連のイベントがあります。

  1. DGV キーダウン
  2. DGVスクロール
  3. DGV キーアップ

だから私はDGV KeyDownを扱います。Ctrl+PgDown が押されたかどうかを検出し、DGV スクロールを停止することができます。

2番目のケース。編集モードで Ctrl+PgDown を押すと、次の一連のイベントが発生します (編集モードでは、DGV が TextBox コントロールを動的に作成することに注意してください)。

  1. txtbox_PreviewKeyDown キー = ControlKey Ctrl = True
  2. txtbox_KeyDown キー = ControlKey Ctrl = True
  3. txtbox_PreviewKeyDown キー = 次の Ctrl = True
  4. dGV_Scroll で
  5. dGVEditor_KeyUp キー = 次の Ctrl = True
  6. dGVEditor_KeyUp キー = ControlKey Ctrl = False で
  7. dGVEditor_KeyUp キー = ControlKey Ctrl = False で

また、txtbox_KeyUp と txtbox_KeyPress を追跡しますが、起動することはありません。

したがって、この場合、PreviewKeyDown でのみ Ctrl+PgDown を処理できますが、それを停止してスクロール イベントを発生させることはできません。

3番目のケース。ユーザーが最初に PageDown キーを押した場合、txtbox_KeyDown は発生しません (編集されたセルに変更が加えられていません)。セルにいくつかの変更が加えられた後に PageDown (または Ctrl+PgDown) が押されると、次のように追跡します。

  1. txtbox_PreviewKeyDown キー = ControlKey Ctrl = True
  2. txtbox_KeyDown キー = ControlKey Ctrl = True
  3. txtbox_PreviewKeyDown キー = 次の Ctrl = True
  4. txtbox_KeyDown キー = 次の Ctrl = True
  5. txtbox_KeyUp キー = 次の Ctrl = True
  6. txtbox_KeyUp キー = ControlKey Ctrl = False

したがって、この場合、txtbox_KeyDown で Ctrl+PgDown を処理して、スクロールを停止できます。

私の質問は、2 番目のシナリオで物事を処理する方法ですか? すべてのケースで Ctrl+PgDown を 1 つのイベント ハンドラーで処理する方法 (イベント) はありますか? 私の場合、dGV_KeyDown、dGV_EditingControlShowing (txtbox_KeyDown のキャッチを構成するため)、および txtbox_KeyDown の 3 つを同時に使用します。

4

0 に答える 0