|
2011/03/31(Thu) 20:10:13 編集(投稿者)
■No58381 (イノシシ さん) に返信
VB2008でしか試していないので、試してほしいのですが、セル編集を行った時、イベントは CellValueChanged→CellEndEditの順で発生するようです。 また、Escで編集を中断したときには、CellValueChangedは発生せず、CellEndEditのみ発生するようです。 これを利用すればいけそうな気がします。
※セル入力内容退避用変数について追記しました。 例えば、親フォーム内のスコープのフラグ変数1,2およびセル入力内容退避用変数を用意しておきます。 (フラグ変数1はセルが編集中かどうかのフラグ、フラグ変数2はセルが入力によって編集されたかどうかのフラグです。) ・通常時はフラグ変数1=False, フラグ変数2=False ・CellBeginEditイベントが発生したときに、CellBeginEditイベントハンドラ内で、 セル入力内容退避用変数に元のセルの内容を退避し、式の文字列を設定してからフラグ変数1をTrueにする。 ・CellValueChangedイベントが発生した場合、このイベントハンドラ内で フラグ変数1=Trueの時だけフラグ変数2をTrueにする。 ・CellEndEditイベントが発生した時、フラグ変数2=Trueまたはセルの内容がセル入力内容退避用変数と異なれば編集あり、 それ以外は編集なし(Esc)と判断する。 最後にフラグ変数1=False, フラグ変数2=Falseとして初期化する。
これは単なる思い付きですので、どうでしょうか。
なお、shuさんの
> CancelButtonに割り当てる について代わりに解説すると、フォームのCancelButtonプロパティに任意のボタンを設定すると、 Escキーを押すことによってそのボタンがクリックされることと同じ働きをします。 セル編集中にEscキーを押すと、Escキーの効果はセル編集中断には使用されず、CancelButtonに 設定されたボタンのクリックが行われます。 (この時セルの内容は編集中の内容で確定されます) この方法は、すでにフォームのCancelButtonプロパティに何らかのボタン(例えばキャンセルボタン)を 割り当てている場合にはこの方法は使用できませんし、そのボタンが容易にクリックできる場所にあると 問題ありそうです。
|