私はEditOnF2に設定されたDataGridViewを持っています。セルの値を設定するCellEndEditイベントハンドラで、データの特別な処理を行います。 Escキーを押したときに元の値に戻すというEditOnKeystrokeOrF2の機能がまだ必要です。残念ながら、CellEndEditイベントハンドラでは、CellEndEditイベントの原因を突き止める方法はありません。 Escキーが押されていないと、セルの値を変更したいだけです。それがあったかどうかはどうすればわかりますか?C#のDataGridViewで "CellEndEdit"をトリガするキーストロークをキャプチャする方法はありますか?
編集:セルの編集中にKeyDownイベントが発生しないことや、最終的な終了キーストロークがないことに注意してください。
Edit2:KeyPreviewの提案を試しましたが、フォームはまだ押されているEscキーをキャプチャしません。
Edit3:私はこれを動作させようと試みています。私はもともと別々の投稿として以下のいくつかを投稿しましたが、ここにそれを含めることがより適切かもしれないと感じています。
DataGridViewには、EditProgrammaticallyに設定されているセルがあります。編集を開始するキーストロークをキャプチャするには、cell.Valueをキーストロークと同じに設定します。しかし、これはセルの "エスケープ"機能を破壊します。エスケープを押すと、元の値に戻す代わりに、プログラムでセルに挿入したキーストロークに戻ります。
私はセルに "EditedFormattedValue"を設定できたら、これは私がキーストロークの値を入れたい場所になると思っていますが、これは読み取り専用です。私は何をしようとしていますか?
明確な例:セルの値が「54.3」で、「9」キーを押すと、セルの編集が開始され、「9」が配置されます。エスケープを押すと "54.3"に戻るのではなく "9"に戻ります。私が望むのは、それが "54.3"の元の値に戻ることです。
私はこの問題を最初と最後の両方から解決しようとしています。実際の問題は、元の値を上書きして元に戻すべきかどうかを判断できないということです。
Edit4:CellValidatingは価値があるかもしれませんが、実験をすると変な動作が見られます。新しいプロジェクトでは、DataGridViewを作成してさまざまなイベントに登録し、CellEndEditの前にCellValidatingが起動されることを確認します。しかし、私がこの問題を解決しようとしている私のプロジェクトでは、CellEndEditはCellValidatingの前に実行しています。違いが何であるかについてのアイデアは?
おかげで、これを試した後、それはエスケープキーがあるように見えます編集の終了としてセルによって認識され、フォーム上の実際のKeyDownまたはKeyPressイベントとしては認識されません。 –