
お世話になります。
初歩的な質問で大変恐縮です。
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) セルS2に入力した「月」と一致したB列の右隣へセルS110の値を転記する下記マクロを実行するとエラー 2 2022/12/06 17:32
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Excel(エクセル) 表内で、Enterキーで横→行の最後入力したら次の行の先頭に移動するマクロを作りたい 3 2022/05/01 21:19
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/21 09:42
- Visual Basic(VBA) 特定の文字を条件に指定範囲のデータを貼り付けるVBA 3 2023/01/15 06:14
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) Indirect関数について、Formulatextで抽出した数式を参照したい。 1 2022/12/15 11:16
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
このQ&Aを見た人はこんなQ&Aも見ています
-
DataGridViewのフォーカス遷移について
Visual Basic(VBA)
-
CellEnterイベント仕様について
Visual Basic(VBA)
-
DataGridViewで入力チェック後、フォーカスをあてたい
Visual Basic(VBA)
-
-
4
DataGridViewでセルクリックイベントを発生させるには
Visual Basic(VBA)
-
5
CloseとDisposeの違い
Visual Basic(VBA)
-
6
グリッドビューでのチェックボックス押下時イベント
Visual Basic(VBA)
-
7
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
8
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
9
DatagridViewの値確定
Visual Basic(VBA)
-
10
DataGridViewのセル編集完了後に値を設定するには
Visual Basic(VBA)
-
11
DataGridViewでyyyy/MM/dd
Visual Basic(VBA)
-
12
DataGrdViewに関連付けたデータの更新
C言語・C++・C#
-
13
datetime型でNULL値を入れたい。
SQL Server
-
14
Loadイベント中にほかのイベントを発生したくない
その他(プログラミング・Web制作)
-
15
【DB】同じトランザクション内でupdateとselectをしたときの結果値
その他(データベース)
-
16
DoEventsがやはり分からない
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
private static という変数の修飾
-
複数の変数を宣言する時、同時...
-
C# インスタンスの破棄
-
オブジェクト参照がオブジェク...
-
変数名の付け方
-
生成したインスタンスを削除す...
-
C#において、同じインスタンス...
-
インタフェースのメソッド
-
VB.NET getとsetの概念がわかり...
-
javaのクラスの作り方、エラー...
-
フォームの存在をチェックする方法
-
Javaプログラムでプロキシを経...
-
クラスのインスタンス名をクラ...
-
セッションについて jspサーブ...
-
オブジェクトの消滅と関数の戻...
-
VC++からのocxの使用方法
-
マルチスレッド間でデータ交換...
-
メソッドの引数としてのthisの意味
-
static 参照するには??
-
C++で継承を学習するのに適した...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
オブジェクト参照がオブジェク...
-
private static という変数の修飾
-
変数名の付け方
-
複数の変数を宣言する時、同時...
-
C#において、同じインスタンス...
-
インスタンス参照でアクセスで...
-
生成したインスタンスを削除す...
-
C# インスタンスの破棄
-
VB.NET getとsetの概念がわかり...
-
変数の参照でエラーが出てしま...
-
フォームの存在をチェックする方法
-
「インスタンス」の意味をわか...
-
[Visual C#] 優先される処理に...
-
javaのクラスの作り方、エラー...
-
クラスのインスタンス名をクラ...
-
C#の構造体の開放のしかた
-
エクセル(複数インスタンス)...
-
VB6.0で、DLLを動的に参照したい
-
C#「オブジェクト参照が必要で...
-
vb.netでFAXを送信する方法
おすすめ情報