「お昼の放送」の思い出

DataGridViewの件で質問したいのですが。
よろしくお願いします。


VB2005で、DataGridViewの特定のセルが選択されて値が青色反転した
Selectイベントのような状態にしたいのですが。

例えば、下のようなDataGtridViewがあったとして,


------------------
|ID | X | Y |
------------------
|001| 100 | |
------------------
|002| 150 | |
------------------
|003| 105 | |
------------------

ID が002の行で、Y列のセルにカーソルが入りXと違う数を入力したら、メッセージを
表示させて、そのセルを青色反転させる処理を作りたいのですが。下の行のセルに
移動してしまいます。


そこで下記のようなコードを書きました。

Private Sub DataTable1DataGridView_CellValidating(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles DataTable1DataGridView.CellValidating
If e.ColumnIndex <> Me.DataTable1DataGridView.Columns("Y").Index Then Exit Sub
If Me.DataTable1DataGridView("X", e.RowIndex).Value IsNot Nothing AndAlso _
Me.DataTable1DataGridView.EditingControl IsNot Nothing Then
If Not Me.DataTable1DataGridView("X", e.RowIndex).Value.ToString.Equals(Me.DataTable1DataGridView.EditingControl.Text) Then
MsgBox("X <> Y", MsgBoxStyle.OkOnly)
Me.DataTable1DataGridView.BeginEdit(True)
'e.Cancel = True
End If
End If
End Sub


e.cancel = True だとセルにはとどまりますが。セルが選択状態にはなりません。
BeginEdit(True)を使うと下のセルが選択状態になります。


アドバイスいただけたら幸いです。よろしくお願い致します。

開発環境
VB2005
Visual Studio 2005 Standard Edition(SP1)
Windows XP Pro SP2

A 回答 (1件)

文字列判定のIf文の中身を以下のように書き換えてください。



If Not Me.DataTable1DataGridView("X", e.RowIndex).Value.ToString.Equals(Me.DataTable1DataGridView.EditingControl.Text) Then
MsgBox("X <> Y", MsgBoxStyle.OkOnly)
e.Cancel = True
'セルを反転表示↓↓
Me.DataTable1DataGridView.EndEdit()
'文字列のみを反転
'CType(Me.DataTable1DataGridView.EditingControl, TextBox).SelectAll()
End If

不要かと思いますが、編集状態で文字列のみを全選択状態にする場合もコメントで足しておきました。

この回答への補足

返信遅くなってすいません。
ありがとうございます。上記のサンプルで解決しました。

ありがとうございました。

補足日時:2009/02/12 12:47
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています