C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: DataGridViewでキーアップしたセル位置を取得


(過去ログ 61 を表示中)

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■35370 / inTopicNo.1)  DataGridViewでキーアップしたセル位置を取得
  
□投稿者/ そんな (6回)-(2009/04/27(Mon) 21:49:43)

分類:[VB.NET/VB2005 以降] 

Private Sub DataGridView1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DataGridView1.KeyUp

DataGridView1(8, DataGridView1.CurrentCell.RowIndex).Value = DataGridView1(7, DataGridView1.CurrentCell.RowIndex).Value - DataGridView1(6, DataGridView1.CurrentCell.RowIndex).Value

End Sub

恐れ入りますが、上記のソースコードは、【8列目に、7列目から6列目を引き算した
値を表示させたい】 という願いで書いたものなんですが、
どこが間違っているのか教えてください。 
実行結果は、7列目または6列目を青い色で塗りつぶされた状態になるまでクリックしないと計算が反映されません。
タイプし終えた時点ですぐに計算結果で8列目が更新するようにしたいのですが。


引用返信 編集キー/
■35382 / inTopicNo.2)  Re[1]: DataGridViewでキーアップしたセル位置を取得
□投稿者/ 魔界の仮面弁士 (1051回)-(2009/04/28(Tue) 11:41:57)
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
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -