EditOnF2 に設定された DataGridView があります。セルの値を設定する CellEndEdit イベント ハンドラでデータの特別な処理を行います。Esc キーが押されたときに元の値に戻る EditOnKeystrokeOrF2 の機能が必要です。残念ながら、CellEndEdit イベント ハンドラでは、CellEndEdit イベントが発生した原因を特定する方法がわかりません。Esc キーが押されていない場合にのみセルの値を変更したい。それがあったかどうかはどうすればわかりますか?
編集: セルが編集されているとき、または最後の終了キーストロークに対して KeyDown イベントが発生しないことに注意してください。
Edit2: KeyPreview の提案を試しましたが、フォームは押された Escape キーをまだキャプチャしません。
Edit3:これを機能させるために実験を行ってきました。元々、以下のいくつかを別の投稿として投稿しましたが、ここに含める方がより関連性があると感じています.
EditProgrammatically に設定されている DataGridView にセルがあります。編集を開始するキーストロークをキャプチャするために、cell.Value をキーストロークに等しく設定しています。ただし、これはセルの「エスケープ」機能を台無しにします。エスケープを押すと、元の値に戻るのではなく、プログラムでセルに挿入したキーストロークに戻ります。
セルに「EditedFormattedValue」を設定できれば、キーストロークの値を入力したい場所になると思いますが、これは読み取り専用のようです。私が試みていることをどのように達成できますか?
明確にする例:セルに「54.3」の値があり、「9」キーを押すと、セルの編集が開始され、そこに「9」が配置されます。Escape を押すと、「54.3」ではなく「9」に戻ります。私が欲しいのは、元の値「54.3」に戻ることです。
ですから、私はこの問題に最初から最後まで取り組んでいます。本当の問題は、元の値を上書きしていて、元に戻す必要があるかどうかを判断する方法がないことだと思います。
Edit4: CellValidating を使用する価値があるように見えますが、実験すると奇妙な動作が見られます。新しいプロジェクトで、DataGridView を作成し、さまざまなイベントに登録して、CellValidating が CellEndEdit の前に起動されることを確認します。ただし、これを機能させようとしている私のプロジェクトでは、CellEndEdit が CellValidating の前に起動しています。違いが何であるかについてのアイデアはありますか?