
お世話になります。
現在VB2005で開発中なのですが、DataGridViewの処理で躓いております。
DataGridViewには「氏名」「住所」「生年月日」を入力できるようにしており、全ての項目において入力必須としています。
よって、どれか一つでも入力がなかった場合はエラーメッセージを表示させ、メッセージ表示後に該当項目のセルにフォーカスをあてたいと考え、ロジックを組んでおります。
仮に「氏名」が空白で、次の行の任意セルをクリックした場合、RowValidatedイベントで各セルに対し入力チェックを行い、メッセージを表示させた後にCurrentCellを空白だったCellにし、さらにEditModeで編集可能状態にすればいいと考えていたのですが、結果は最後にクリックした任意セルにフォーカスが移ってしまいます。
入力チェックを発生させるイベントに問題があるのか、カレントセルにフォーカスを当てる処理で問題があるのかで悩んでいる状態です。
どなたか心当たりがあれば教授願いたいです。
よろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
>これはフォーカスを当てずに、メッセージで対処する方法と考えてよろしいでしょうか?
他のセルに移動しようとした時(フォーカスを失った時)にチェックをしてます。
不正ならメッセージを出してフォーカスの移動をキャンセルしてます。
>どれか一つでも入力がなかった場合はエラーメッセージを表示させ、メッセージ表示後に該当項目のセルにフォーカスをあてたいと考え、ロジックを組んでおります。
と言う事だったので、行ではなく1セル単位で、
CellValidating:セルが入力フォーカスを失い、内容の検証が有効になった場合に発生します。
でチェックをして、今回はどのセルでも空白だったらe.cancel=trueでフォーカスを戻しています。
「エラーメッセージを表示させ」とあるので、エラーメッセージを出してます。
Select Case e.ColumnIndex
Case 0
Case 1
Case 2
End Select
でもよかったんですが、メッセージは列見出しを使っています。
No.3
- 回答日時:
こんなのではどうでしょうか?
Private Sub DataGridView1_CellValidating(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
If Not DataGridView1.Rows(e.RowIndex).IsNewRow Then '新しいレコードの行ならチェックしない
If e.FormattedValue.ToString.Length = 0 Then '空白なら
MsgBox(DataGridView1.Columns(e.ColumnIndex).HeaderText & "は必須です") '列ヘッダを表示
e.Cancel = True
End If
End If
End Sub
fumufumu_2006さん、ありがとうございます。
これはフォーカスを当てずに、メッセージで対処する方法と考えてよろしいでしょうか?
なるべくならエラー個所をすぐに直させたいので、フォーカスで対処したかったのですが・・・方法がなければ上記の方法で対処したいと考えております。
ありがとうございました。
No.1
- 回答日時:
CellValidatedイベントでは駄目でしょうか?
unamana19さん、ありがとうございます。
CellValidatedイベントやRowLeaveイベントでも試みましたが、結果は同様でした。
カレントセルを指定(チェック対象セル)し、イベント処理内でMsgBoxで確認した段階では、指定したセルのアドレスが表示されたのですが、イベントを抜けてしまうとクリックしたセルに戻ってしまいます。
どこかでクリックしたセルのアドレスを保有していて、イベントを抜けた後にそちらを優先してしまうのでしょうか・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
DataGridViewのフォーカス遷移について
Visual Basic(VBA)
-
DataGridViewの特定列に入力されている重複チェックをしたい
Visual Basic(VBA)
-
DataGridViewに空白がある場合はエラーにしたい
Visual Basic(VBA)
-
-
4
[Visual C#] 優先される処理について
C言語・C++・C#
-
5
DataGridViewのセル編集完了後に値を設定するには
Visual Basic(VBA)
-
6
DataGridViewでセルクリックイベントを発生させるには
Visual Basic(VBA)
-
7
CellEnterイベント仕様について
Visual Basic(VBA)
-
8
DataGridViewの桁数制限に関して
Visual Basic(VBA)
-
9
DataGridView 列ごとの入力制限
Visual Basic(VBA)
-
10
VB.net 重複チェックがしたいです
Visual Basic(VBA)
-
11
DataGridViewの各セル幅を自由に決め、その幅で固定したい
Visual Basic(VBA)
-
12
グリッドビューでのチェックボックス押下時イベント
Visual Basic(VBA)
-
13
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
14
[VB.net] ボタン(Flat)のEnable時の背景色について
Visual Basic(VBA)
-
15
データグリッドビューの一番最初の行に列を追加したい
Visual Basic(VBA)
-
16
初心者)DataGridViewの入力桁数を制限したいのですが
Visual Basic(VBA)
-
17
【VB.NET】DataGridViewセルの十字キー移動ができません
Visual Basic(VBA)
-
18
CloseとDisposeの違い
Visual Basic(VBA)
-
19
C# DataGridView内での制御について
Visual Basic(VBA)
-
20
データグリッドビューの結合セルに文字を表示させたい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SPREAD(GrapeCity)のセルにフォ...
-
レーザのスポット径の計算式
-
Excelのマクロで実行時エラー”1...
-
初期フォーカスについて
-
コンボボックスの開いたリスト...
-
ComboBoxのフォーカスをはずす
-
メッセージボックスを前面に表...
-
コンボボックスの三角を一時的...
-
Chrome フォーカス時に枠が表示...
-
C#でButtonのフォーカス枠を消...
-
Macのウィンドウが透ける
-
Delphiで最前列にFormを表示し...
-
eclipseでフォーカスされた変数...
-
雷のようなアニメーションをウ...
-
【至急】フォトショップの「自...
-
"判定"の英語表現について
-
ザベストテン風ランキング動画...
-
どういう意味
-
他の人には声だして挨拶してる...
-
vba ListViewの選択色について...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
メッセージボックスを前面に表...
-
SPREAD(GrapeCity)のセルにフォ...
-
C#でButtonのフォーカス枠を消...
-
Chrome フォーカス時に枠が表示...
-
Excelのマクロで実行時エラー”1...
-
コンボボックスの開いたリスト...
-
レーザのスポット径の計算式
-
雷のようなアニメーションをウ...
-
DataGridViewで入力チェック後...
-
初期フォーカスについて
-
PowershellでCLIとISEの結果が違う
-
DAMのデンモクの使い方
-
コンボボックスの三角を一時的...
-
フォトショのアクションを別のM...
-
[化学基礎] μmのμはどうして...
-
iPhoneのクイックアクションを...
-
ウインドウの最前面表示
-
ComboBoxのフォーカスをはずす
-
パソコンで音楽を聞くときのHDD...
-
ふわっと色が変わるボタンを作...
おすすめ情報