- ベストアンサー
[Visual C#] セルの編集状態でEnterキーを押下した場合の処理について
- Visual C# 2010を使用して開発を行っています。DataGridViewクラスを継承した独自クラスを定義し、セルの編集状態でEnterキーを押下した場合、次の行のセルにフォーカスを移動する処理を行っています。
- 別のcsファイルでDataGridViewのインスタンスを生成し、CellValidatingイベント内でセルに入力された値のエラーチェック処理を行っています。しかし、エラーが発生した場合でも強制的にフォーカス移動処理が実行され、同じエラーが出力されます。
- なぜ他の処理を無視してフォーカス移動処理が強制実行されるのかが理解できずに困っています。ご存じの方がいらっしゃいましたら、教えていただけると幸いです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
当方の実験したケースは class DBGviewBase : DataGridView ... (1) class DBGViewMain : DBGVIewBase ... (2) として DBGViewBaseの OnCellEndEditで 質問のコードを少し改変したもの this.CurrenCell = this[ColIndex, RowIndex]; DBGViewMainおよびフォームに配置したコントロールの OnValidatingイベントで // DBGViewMainクラスのみ base.OnValidate(e); if ( e.ColumnIndex == 0 ) { int nID = -1; if ( !Int32.TryParse( e.FormattedValue.ToString(), out nID ) ) { e.Cancel = true; } } といった内容ですよ
その他の回答 (2)
- MARU4812
- ベストアンサー率43% (196/452)
用語の使い方が滅茶苦茶なんでよく分からないけど、 >上記(1)を親クラスとしてDataGridViewのインスタンスを生成しています。 >(1)にはフォームなどのデザインはなく、処理のみです。 >(2)は、実際にフォームやDataGridViewを配置しているファイルになります。 このあたりを言葉通りに捉えれば、インスタンス2個作って 継承してるから勝手に連携されると思ってる節がありますが。 画面上に DataGridView1 と DataGridView2 を貼り付けて、 勝手に連携される事がないのと同じく、インスタンスが 別なら何ら関係性はありません。それぞれで独立して 処理されます。 そこはOK?
- redfox63
- ベストアンサー率71% (1325/1856)
(1)のコードはどこのイベントに書かれているのでしょう 当方で実験すると CellValidatingが先に実行されますが 派生クラスのOnValidatingメソッド > Form1に書いたハンドラ > e.CancelがFalseならば 元クラスのOnCellEditEndメソッド と順で実行されますよ …
補足
ご回答ありがとうございます。 補足させていただきます。 (1)のコードは、 (2)とは別クラスに定義している内容になります。 (別途、新規作成したcsファイルで定義したクラス内に(1)の内容を記述しています) (1)にはフォームなどのデザインはなく、処理のみです。 (2)は、実際にフォームやDataGridViewを配置しているファイルになります。 (2)のcsファイルの関連ファイルxxx.designers.cs内に以下の記述をしています。 (xxx.designers.cs) namespace WindowsFormsApplication1 { partial class passSaleModForm { private PFDataGridView meisaiDataGridView; private xxxxxx xxxxxx; private yyyyyy yyyyyy; : } }