![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
お世話になります。
初歩的な質問で大変恐縮です。
Visual C# 2010 で開発しているのですが、
DataGridViewクラスを継承した独自クラスを定義し、
セルの編集状態でEnterキーを押下した場合、
次の行のセルにフォーカスを移動する処理を記述しています。 ・・・・ (1)
例: this.CurrentCell = this[col, row];
上記(1)とは別のcsファイルに、
上記(1)を親クラスとしてDataGridViewのインスタンスを生成しています。
また、このGridViewのCellValidatingイベント内では、セルに入力された値の
エラーチェック処理を行い、エラーの場合は e.Cancel = true; を設定しています。 ・・・・ (2)
実際にDataGridViewのセルに値を入力し、編集状態でEnterキーを押下すると、
(1) → (2) → (1) の順序で処理が実行され、最後の(1)の処理中に下記エラーが出力されます。
「セル値の変更をコミットまたは中止できないため、操作は成功しませんでした。」
上記(2)の処理後に何かしらフラグをたてて、
エラー発生直前にフラグ内容を判断してエラーを回避しようと試みましたが、
条件文を無視して(1)のフォーカス移動処理が強制実行され、同一エラーが出力されます。
なぜ、他の処理を無視して(1)が強制実行されるのかが理解できずに困っています。
どなたかご存じの方がいらっしゃいましたら、ご教授願えますでしょうか?
よろしくお願いいたします。
No.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;
}
}
といった内容ですよ
No.2
- 回答日時:
用語の使い方が滅茶苦茶なんでよく分からないけど、
>上記(1)を親クラスとしてDataGridViewのインスタンスを生成しています。
>(1)にはフォームなどのデザインはなく、処理のみです。
>(2)は、実際にフォームやDataGridViewを配置しているファイルになります。
このあたりを言葉通りに捉えれば、インスタンス2個作って
継承してるから勝手に連携されると思ってる節がありますが。
画面上に DataGridView1 と DataGridView2 を貼り付けて、
勝手に連携される事がないのと同じく、インスタンスが
別なら何ら関係性はありません。それぞれで独立して
処理されます。
そこはOK?
No.1
- 回答日時:
(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;
:
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
「これはヤバかったな」という遅刻エピソード
寝坊だったり、不測の事態だったり、いずれにしても遅刻の思い出はいつ思い出しても冷や汗をかいてしまいますよね。特にものすごく怒られたときとか、とんでもない損害を与えてしまったときとか…。
-
DataGridViewのフォーカス遷移について
Visual Basic(VBA)
-
DatagridViewの値確定
Visual Basic(VBA)
-
【VB】タブ切り替え時のイベント
Visual Basic(VBA)
-
-
4
DataGridViewのコンボボックスの初期値について
Visual Basic(VBA)
-
5
DataGridViewの特定列に入力されている重複チェックをしたい
Visual Basic(VBA)
-
6
DataGridViewの桁数制限に関して
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
インスタンス参照でアクセスで...
-
VB.NET getとsetの概念がわかり...
-
変数名の付け方
-
オブジェクト参照がオブジェク...
-
抽象クラスのインスタンス生成...
-
データベースから日付型を取得...
-
複数の変数を宣言する時、同時...
-
「インスタンス」の意味をわか...
-
生成したインスタンスを削除す...
-
エクセル(複数インスタンス)...
-
メソッドの引数としてのthisの意味
-
private static という変数の修飾
-
変数の参照でエラーが出てしま...
-
シングルトンパターン
-
他のファイルの変数参照
-
文字列を日付に変換でParseExce...
-
(C++) for文内でのインスタンス...
-
C# インスタンスの破棄
-
C#の構造体の開放のしかた
-
外部ライブラリの動的参照によ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
インスタンス参照でアクセスで...
-
private static という変数の修飾
-
VB.NET getとsetの概念がわかり...
-
次の日本語の意味を教えて下さい
-
複数の変数を宣言する時、同時...
-
C# インスタンスの破棄
-
C#において、同じインスタンス...
-
生成したインスタンスを削除す...
-
オブジェクト参照がオブジェク...
-
変数の参照でエラーが出てしま...
-
「インスタンス」の意味をわか...
-
文字列を日付に変換でParseExce...
-
フォームの存在をチェックする方法
-
SQLを連続発行する時の正しい(?...
-
エクセル(複数インスタンス)...
-
C#の構造体の開放のしかた
-
newしないインスタンス?実体化...
-
他のファイルの変数参照
-
javaのクラスの作り方、エラー...
おすすめ情報