DataGridViewでのセル値編集


TOSHI  2008-01-20 11:09:10  No: 144320  IP: 192.*.*.*

VB2005を使い開発しているのですが、詰まってしまいました。
初心者の為、くだらない内容かも知れませんが、ご教授よろしくお願いいたします。

DataGridViewで時間を入力するプログラムを作っています。
セルに時間を入れ、セルからフォーカスが無くなったら":"を間に入れ表示し
またセルにフォーカスが戻ったら":"を取りたいのですがうまく行きません

現在はこんな感じでCellEnterとCellLeaveイベントを使ってます。
    Private Sub DataGridView1_CellEnter(ByVal sender As Object, _
        ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
        Handles DataGridView1.CellEnter
        DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = _
        DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value _
        .ToString.Replace(":", String.Empty)
    End Sub

    Private Sub DataGridView1_CellLeave(ByVal sender As Object, _
        ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
        Handles DataGridView1.CellLeave
        DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = _
        Val(DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value) _
        .ToString("#0:00")
    End Sub

いろいろと試しCellEndEditイベントを使い:表示の表示は出来たのですが
:を省く事が出来ません、何でも構いません、ご教授お願いします。

編集 削除
魔界の仮面弁士  2008-01-21 01:16:57  No: 144321  IP: 192.*.*.*

幾つかの方法があるかと思いますが、たとえば、DataGridView のイベントではなく
DataGridViewTextBoxEditingControl のものを使うようにするとか。


Public Class Form1
    Private dgv1 As New DataGridView()
    WithEvents Text1 As DataGridViewTextBoxEditingControl

    Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
        AddHandler dgv1.EditingControlShowing, AddressOf dgv1_EditingControlShowing
        dgv1.Dock = DockStyle.Fill
        dgv1.AllowUserToAddRows = False
        dgv1.RowCount = 3
        dgv1.ColumnCount = 3
        dgv1.EditMode = DataGridViewEditMode.EditOnEnter
        dgv1.DefaultCellStyle.Font = New Font("MS Gothic", 15)
        Controls.Add(dgv1)
        dgv1(1, 0).Value = "11:22"
        dgv1(1, 1).Value = "12:34"
        dgv1(1, 2).Value = "23:59"
    End Sub

    Sub Form1_Shown(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Shown
        dgv1.CurrentCell = dgv1(1, 1)
    End Sub
 
    Sub dgv1_EditingControlShowing(ByVal sender As Object, _
        ByVal e As DataGridViewEditingControlShowingEventArgs)
        RemoveHandler dgv1.EditingControlShowing, AddressOf dgv1_EditingControlShowing
        Text1 = DirectCast(e.Control, DataGridViewTextBoxEditingControl)
    End Sub

    Sub Text1_Enter(ByVal sender As Object, ByVal e As EventArgs) Handles Text1.Enter
        If Text1.TextLength > 0 Then
            Text1.Text = Text1.Text.Replace(":", "")
        End If
    End Sub

    Sub Text1_Leave(ByVal sender As Object, ByVal e As EventArgs) Handles Text1.Leave
        Dim c As DataGridViewCell = Text1.EditingControlDataGridView.CurrentCell
        c.ErrorText = Nothing
        Dim i As Integer
        If Integer.TryParse(Text1.Text, i) Then
            Text1.Text = i.ToString("#0:00")
        ElseIf Text1.TextLength > 0 Then
            c.ErrorText = "非数値"
        End If
    End Sub
End Class

編集 削除