プロが教えるわが家の防犯対策術!

お世話になります。
現在VB2005で開発中なのですが、DataGridViewの処理で躓いております。

DataGridViewには「氏名」「住所」「生年月日」を入力できるようにしており、全ての項目において入力必須としています。
よって、どれか一つでも入力がなかった場合はエラーメッセージを表示させ、メッセージ表示後に該当項目のセルにフォーカスをあてたいと考え、ロジックを組んでおります。

仮に「氏名」が空白で、次の行の任意セルをクリックした場合、RowValidatedイベントで各セルに対し入力チェックを行い、メッセージを表示させた後にCurrentCellを空白だったCellにし、さらにEditModeで編集可能状態にすればいいと考えていたのですが、結果は最後にクリックした任意セルにフォーカスが移ってしまいます。

入力チェックを発生させるイベントに問題があるのか、カレントセルにフォーカスを当てる処理で問題があるのかで悩んでいる状態です。

どなたか心当たりがあれば教授願いたいです。
よろしくお願いいたします。

A 回答 (4件)

>これはフォーカスを当てずに、メッセージで対処する方法と考えてよろしいでしょうか?


他のセルに移動しようとした時(フォーカスを失った時)にチェックをしてます。
不正ならメッセージを出してフォーカスの移動をキャンセルしてます。

>どれか一つでも入力がなかった場合はエラーメッセージを表示させ、メッセージ表示後に該当項目のセルにフォーカスをあてたいと考え、ロジックを組んでおります。

と言う事だったので、行ではなく1セル単位で、
CellValidating:セルが入力フォーカスを失い、内容の検証が有効になった場合に発生します。
でチェックをして、今回はどのセルでも空白だったらe.cancel=trueでフォーカスを戻しています。
「エラーメッセージを表示させ」とあるので、エラーメッセージを出してます。
Select Case e.ColumnIndex
Case 0
Case 1
Case 2
End Select
でもよかったんですが、メッセージは列見出しを使っています。
    • good
    • 0

こんなのではどうでしょうか?


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
    • good
    • 0
この回答へのお礼

fumufumu_2006さん、ありがとうございます。

これはフォーカスを当てずに、メッセージで対処する方法と考えてよろしいでしょうか?

なるべくならエラー個所をすぐに直させたいので、フォーカスで対処したかったのですが・・・方法がなければ上記の方法で対処したいと考えております。

ありがとうございました。

お礼日時:2008/01/28 17:18

CellValidatingでイベントでエラーチェックを行い、


エラーであれば、e.Cancel = Trueでイベントをキャンセル
すればいいのかな?
    • good
    • 0
この回答へのお礼

unamana19さん、ありがとうございます。

CellValidatingイベント内で「e.cancel = true」を定義できませんでした・・・
VB2005だと出来ないのでしょうか?

ちなみに「Exit Sub」でイベントを抜けても同様に、指定したセルへのフォーカスは出来ませんでした。

お礼日時:2008/01/28 17:16

CellValidatedイベントでは駄目でしょうか?

    • good
    • 0
この回答へのお礼

unamana19さん、ありがとうございます。

CellValidatedイベントやRowLeaveイベントでも試みましたが、結果は同様でした。

カレントセルを指定(チェック対象セル)し、イベント処理内でMsgBoxで確認した段階では、指定したセルのアドレスが表示されたのですが、イベントを抜けてしまうとクリックしたセルに戻ってしまいます。

どこかでクリックしたセルのアドレスを保有していて、イベントを抜けた後にそちらを優先してしまうのでしょうか・・・

お礼日時:2008/01/28 13:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A