入力チェックのイベントハンドラを追加
VB
Private Sub DataGridView1_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing
'表示されているコントロールがDataGridViewTextBoxEditingControlか調べる
If TypeOf e.Control Is DataGridViewTextBoxEditingControl Then
Dim dgv As DataGridView = CType(sender, DataGridView)
'編集のために表示されているコントロールを取得
Dim tb As DataGridViewTextBoxEditingControl = CType(e.Control, DataGridViewTextBoxEditingControl)
'イベントハンドラを削除
RemoveHandler tb.TextChanged, AddressOf DataGridViewTextBox_Changed
'編集可能列である場合
If Not dgv.CurrentCell.ReadOnly Then
'イベントハンドラを追加
AddHandler tb.TextChanged, AddressOf DataGridViewTextBox_Changed
End If
End If
End Sub
入力チェック処理
VB
Private Sub DataGridViewTextBox_Changed(sender As Object, e As EventArgs)
Dim tb As DataGridViewTextBoxEditingControl = CType(sender, DataGridViewTextBoxEditingControl)
Select Case DataGridView1.CurrentCell.OwningColumn.Name
Case "Column1"
'0~9以外の場合、空文字に置換
tb.Text = Regex.Replace(tb.Text, "[^0-9]", "")
End Select
End Sub
動作確認用コード
VB
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim dt As New DataTable
With dt
.Columns.Add("Column1", GetType(String))
.Columns.Add("Column2", GetType(String))
.Rows.Add("001", "002")
End With
With DataGridView1
.DataSource = dt
.AllowUserToAddRows = False
End With
End Sub
コメント