前提
MS SQL、Visual Studioで自分用住所録を作成中です。
フォームにテーブルCsKuwakeTblのcsKuwakeTblDataGridViewを作成し、自動的にcsKuwakeTblBindingNavigatorが作成されました。
ナビゲーター中に「toolStripButton1」を追加しました。又フォーム内に「button1」を追加。
DataGridViewのCellValidatingに下記のプログラムを書きましたが、フォームに作成した「button1」は認識しますがナビゲーター内の各種ボタン類はマウス左クリックしても全く無反応でCellValidatingに入ったら表示される先頭のメッセージも表示されません。
https://dobon.net/vb/dotnet/control/selectcontrol.html
「SplitContainerコントロール上のアクティブコントロールを取得できない問題」が関連するように思えるのですがプログラムを力不足で理解できません。
実現したいこと
CellValidatingをどのように変更すれば全てのボタン類をマウス左クリックした時その名前を受け取ることが出来るのでしょうか?ご教授ください
該当のソースコード
ソースコード C# private void csKuwakeTblDataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) { MessageBox.Show("ヴァリデート イン"); Control c = this.ActiveControl; if (c != null) { MessageBox.Show("現在アクティブなコントロールは" + c.Name); } else { MessageBox.Show("現在アクティブなコントロールはありません。"); } }
####修正編集
回答者の皆さんへご指摘の点をお知らせるるのが遅れていることお詫びします。
どのページで指摘された点を投稿するのか方法が判らず、差し当たって今回の方法でお願しました。
(1)「何を何で作っているかを質問欄を編集して追記してください。」
環境はWindows 11 の Visual Studio 2022 で Windows Forms アプリをターゲットフレームワーク .NET Framework 4.8 です。
(2)テーブル及びlDataGridView
MS SQL ServerにCsPostDb.mdfを作成しここにCsKuwakeTb名のテーブルを作成しました。
Visual Studio 2022でCsPostDbDataSet名のデータセットを作成しこの中にCsKuwakeTbl名のDataTableが有ります。
尚CsKuwakeTbの定義は下の通りです。この名称の為投稿が固有名詞になっています。
CREATE TABLE [dbo].[CsKuwakeTbl] (
[KuwakeId] INT IDENTITY (1, 1) NOT NULL,
[KuwakeName] NVARCHAR (30) NOT NULL,
[HyoujiNo] INT NOT NULL,
CONSTRAINT [PK_CsKuwakeTbl] PRIMARY KEY CLUSTERED ([KuwakeId] ASC),
UNIQUE NONCLUSTERED ([KuwakeName] ASC)
);
(3)lDataGridViewの作成
Visual Studio 2022のデータソースウィンドウ内のCsKuwakeTblをフォームにドラッグ&ペーストしcsKuwakeTblDataGridViewを作成しました。Visual Studio 2022ではこの作業により自動的にcsKuwakeTblBindingNavigatorが作成されました。
(4)ボタン操作でやりたいこと
csKuwakeTblBindingNavigator内に新規作成したボタンはデータベースへの書き込み用としたい。
一方Form内のbutton1はアプリの終了ボタンとしたい。
グリッド内で既存データの編集又は削除、新規追加の作業をした場合csKuwakeTblBindingNavigator内のボタンをクリックしデータベースへの書き込み後でないとForm内のbutton1をクリックしてもグリッド内の現在の作業セルにフォーカスを戻したい。
又BindingNavigatorがクリックされたことを認識し、そのに続いてBindingNavigator内の構成要素のどれがクリックされたかを知る方法などは無いのでしょうか?
不明、不足点あればご指摘ください。理解できる範囲で追加します。よろしくお願いします。
################
####修正編集(2)
説明不足相済みません。フォローしていただいてありがとうございます。
(1)回答者の「意味不明」が判った様な気がします。ありがとうございました
(2)やりたかったのは下記の様なことでした
テーブルの項目には「必須入力」、「重複不可」等の条件が付いています。
この入力中の値をデータベース書き込み前にDataGridViewのCellValidatingで捕捉し、不適の場合作業中のセルにフォーカスを戻そうと考えました。
自分の書ているコードではグリッド内の行移動をしようとした場合はうまく動作したのですが、不正入力の時グリッド外のボタンをクリックすると下記のエラーメッセージが表示されます。
「DataGridviewで次の例外が発生しました。
SystemDataNotNullAllowedException列'KuwakeName'にnullsを使用することはできません」
これを防ぐためにグリッド外でクリックされたボタン類等が入手できれば対処かのかとおもいました。
(3)ご指摘から考えたこと
不正入力状態でボタンクリックすると例外が発生するのでこの例外を捕捉して対処すれば可能になるのではないか?
このようなことから回答者の方は「意味不明」を連発されたのではないか?
当面(2)のような考えでトライしてみます。ご指導ありがとうございました
回答1件
あなたの回答
tips
プレビュー