【VB.NET】正規表現でDataGridViewへの入力を制限する方法

入力チェックのイベントハンドラを追加

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

コメント

タイトルとURLをコピーしました