|
2009/04/28(Tue) 13:20:48 編集(投稿者)
■No35370 (そんな さん) に返信 > 恐れ入りますが、上記のソースコードは、【8列目に、7列目から6列目を引き算した > 値を表示させたい】 という願いで書いたものなんですが、
テキストの選択色は青とは限らないので、 『7列目または6列目を青い色で塗りつぶされた状態になるまでクリック』 という表現だと、意図が伝わりにくいかも。
> タイプし終えた時点ですぐに計算結果で8列目が更新するようにしたいのですが。 『編集後』でよければ、こんな感じで如何でしょうか。
Private Sub DataGridView1_CellEndEdit(ByVal sender As Object, _ ByVal e As DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit Dim dgv As DataGridView = DirectCast(sender, DataGridView) If e.ColumnIndex = 6 OrElse e.ColumnIndex = 7 Then dgv(8, e.RowIndex).Value = dgv(7, e.RowIndex).Value - dgv(6, e.RowIndex).Value End If End Sub
『編集中』に処理する必要があるのならば、こんな感じで。
Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, _ ByVal e As DataGridViewEditingControlShowingEventArgs) _ Handles DataGridView1.EditingControlShowing EditBox = TryCast(e.Control, TextBox) End Sub
Private WithEvents EditBox As TextBox Private Sub EditBox_TextChanged(ByVal sender As Object, _ ByVal e As EventArgs) Handles EditBox.TextChanged Dim p As Point = DataGridView1.CurrentCellAddress If p.Y < 0 OrElse p.X < 6 OrElse p.X > 8 Then Return End If
Dim v6 As Object = DataGridView1(6, p.Y).Value Dim v7 As Object = DataGridView1(7, p.Y).Value If v6 Is Nothing Then v6 = DBNull.Value If v7 Is Nothing Then v7 = DBNull.Value
Dim d As Decimal If p.X = 6 AndAlso Decimal.TryParse(EditBox.Text, d) Then v6 = d ElseIf p.X = 7 AndAlso Decimal.TryParse(EditBox.Text, d) Then v7 = d End If
If IsDBNull(v6) OrElse IsDBNull(v7) Then DataGridView1(8, p.Y).Value = DBNull.Value Else DataGridView1(8, p.Y).Value = v7 - v6 End If End Sub
|