VBでDataGridViewを使用して表の入力処理をして居ます。
入力内容が数字で無い時はエラー表示をして、セルのフォーカスをエラーセルに戻そうとして居ます。
実際にプログラムを組んだのですが、エラー時にセルのフォーカスが元に戻らす、エラーで無い時と同じ様に次の行に行ってしまいます。
エラー時にRow、Columnのアドレスを保存して置き、ボタンでそのRow、Columnの場所にセルのフォーカスを当てると、その位置のセルにフォーカスが当たります。
コーディング上は全く同じですが、同一処理内ではフォーカスの設定は出来ないものでしょうか。
試しに間にApplication.DoEvents()を入れてみましたが結果は同じでした。
どなたかこの現象を解決出来る方法が分かる方、若しくはDataGridViewではこの様な事は出来ない理由をご存知の方、お教え下さる様お願い致します。
‘CellEndEdit割り込み処理
Private Sub dgvTst_CellEndEdit(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvTst.CellEndEdit
Dim iVal As Integer
Dim sWrk As String
sWrk = dgvTst.CurrentCell.Value ‘セルの値をワークに
If subChkDec(sWrk) = False Then '数字か調べる。
MsgBox("Error") ‘数字で無い時、エラー表示
iRow = dgvTst.CurrentCell.RowIndex ‘Rowアドレス取得
iCol = dgvTst.CurrentCell.ColumnIndex ‘Columnアドレス取得
lblRow.Text = iRow.ToString("D") ‘デバックの為にRow表示
lblCol.Text = iCol.ToString("D") ‘デバックの為にColumn表示
Application.DoEvents()
dgvTst.CurrentCell = dgvTst.Rows(iRow).Cells(iCol) ‘RowとColumnを指定してセル位置変更したつもり、フォーカスは入力したセルの下に移動する。
End If
End Sub
‘ボタンでの割り込み処理。
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
dgvTst.CurrentCell = dgvTst.Rows(iRow).Cells(iCol) ‘同じ処理をボタンの割り込みで行うと指定した(エラーとなった)所にフォーカスが移る。
End Sub
お礼
早速のご回答ありがとうございます。 今、チェックした所、フォーカスが元に戻っていました。 こちらの方法で実装し直してみます。 ありがとうございました。