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イベントを使い:表示の表示は出来たのですが
:を省く事が出来ません、何でも構いません、ご教授お願いします。
幾つかの方法があるかと思いますが、たとえば、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