ユーザーが Ctrl+PgDown を押したときに DGV がスクロールしないようにしようとしています。代わりに他のコントロールをスクロールしたい。問題は、一部のセルが編集モードかどうかにかかわらず、動作が異なることです。
1 番目のケース。編集モードがない場合、次の一連のイベントがあります。
- DGV キーダウン
- DGVスクロール
- DGV キーアップ
だから私はDGV KeyDownを扱います。Ctrl+PgDown が押されたかどうかを検出し、DGV スクロールを停止することができます。
2番目のケース。編集モードで Ctrl+PgDown を押すと、次の一連のイベントが発生します (編集モードでは、DGV が TextBox コントロールを動的に作成することに注意してください)。
- txtbox_PreviewKeyDown キー = ControlKey Ctrl = True
- txtbox_KeyDown キー = ControlKey Ctrl = True
- txtbox_PreviewKeyDown キー = 次の Ctrl = True
- dGV_Scroll で
- dGVEditor_KeyUp キー = 次の Ctrl = True
- dGVEditor_KeyUp キー = ControlKey Ctrl = False で
- dGVEditor_KeyUp キー = ControlKey Ctrl = False で
また、txtbox_KeyUp と txtbox_KeyPress を追跡しますが、起動することはありません。
したがって、この場合、PreviewKeyDown でのみ Ctrl+PgDown を処理できますが、それを停止してスクロール イベントを発生させることはできません。
3番目のケース。ユーザーが最初に PageDown キーを押した場合、txtbox_KeyDown は発生しません (編集されたセルに変更が加えられていません)。セルにいくつかの変更が加えられた後に PageDown (または Ctrl+PgDown) が押されると、次のように追跡します。
- txtbox_PreviewKeyDown キー = ControlKey Ctrl = True
- txtbox_KeyDown キー = ControlKey Ctrl = True
- txtbox_PreviewKeyDown キー = 次の Ctrl = True
- txtbox_KeyDown キー = 次の Ctrl = True
- txtbox_KeyUp キー = 次の Ctrl = True
- txtbox_KeyUp キー = ControlKey Ctrl = False
したがって、この場合、txtbox_KeyDown で Ctrl+PgDown を処理して、スクロールを停止できます。
私の質問は、2 番目のシナリオで物事を処理する方法ですか? すべてのケースで Ctrl+PgDown を 1 つのイベント ハンドラーで処理する方法 (イベント) はありますか? 私の場合、dGV_KeyDown、dGV_EditingControlShowing (txtbox_KeyDown のキャッチを構成するため)、および txtbox_KeyDown の 3 つを同時に使用します。