DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataGridでダブルクリックイベント

環境/言語:[VB.NET]
分類:[.NET]

はじめまして、VBかなりの初心者です。
今、VB.NETを使ってWindowsアプリケーションを作っています。

そのプログラムで、DataGridでデータベースの内容を表示し、
ダブルクリック時にその行のデータの詳細を別フォームに表示するようにしたいのですが、
Gridのセルを書き込み不可にしても、セルはアクティブになる為に
ダブルクリックのイベントをとる事が出来ません。

初心者なのでどのようにすれば良いのか方法が全く解らず悩んでおります。
どなたか解る方いらっしゃいましたら教えて頂ければと思います。
よろしくお願い致します。
DataGridのセルに(見えない)テキストボックスを貼り付け、
そのテキストボックスのダブルクリックイベントを取得すれば出来ると思います。

実際に僕も実装したことがあるのですが、DBと連動していないので、
その辺は不明です。。

一応ソースを載せてみますが、参考にならなかったらごめんなさい。。

※CreateDataTableのところをDBと連動すれば・・・



Public Sub SetDataList()
Dim ts As DataGridTableStyle
Me.DataGrid1.DataSource = CreateDataTable()
ts = New DataGridTableStyle()
ts.MappingName = "DataTable"

'DataGridTextBoxColumnの取得
Dim cs As DataGridTextBoxColumn

cs = New DataGridTextBoxColumn()
cs.MappingName = "Column1"
cs.HeaderText = "カラム名1 "
cs.Width = 150
cs.Alignment = HorizontalAlignment.Right
cs.ReadOnly = True
ts.GridColumnStyles.Add(cs)
cs = CType(ts.GridColumnStyles(0), DataGridTextBoxColumn)
tb = cs.TextBox

AddHandler tb.DoubleClick, New EventHandler(AddressOf tb_DoubleClick)

cs = New DataGridTextBoxColumn()
cs.MappingName = "Column2"
cs.HeaderText = "カラム名2 "
cs.Width = 150
cs.Alignment = HorizontalAlignment.Right
cs.ReadOnly = False
ts.GridColumnStyles.Add(cs)

cs = New DataGridTextBoxColumn()
cs.MappingName = "Column3"
cs.HeaderText = "カラム名3"
cs.Width = 150
cs.Alignment = HorizontalAlignment.Left
cs.ReadOnly = True
ts.GridColumnStyles.Add(cs)

Me.DataGrid1.TableStyles.Add(ts)

End Sub


'テーブル作成
Public Function CreateDataTable(Optional ByVal bl As Boolean = True) As DataTable
Dim dtTbl As New DataTable()
Dim dtCol As DataColumn

dtTbl.TableName = "DataTable"

dtCol = dtTbl.Columns.Add()
dtCol.DataType = System.Type.GetType("System.String")
dtCol.DefaultValue = ""
dtCol.ColumnName = "Column1"
dtCol.ReadOnly = False

dtCol = dtTbl.Columns.Add()
dtCol.DataType = System.Type.GetType("System.String")
dtCol.DefaultValue = ""
dtCol.ColumnName = "Column2"

dtCol = dtTbl.Columns.Add()
dtCol.DataType = System.Type.GetType("System.String")
dtCol.DefaultValue = ""
dtCol.ColumnName = "Column3"
dtCol.ReadOnly = True

Return dtTbl
End Function

''tb_DoubleClickイベント時の処理

Private Sub tb_DoubleClick(ByVal sender As Object, ByVal e As EventArgs)
  msgbox("ダブルクリック!!")

End Sub

End Class
MouseDownイベントで、ダブルクリックを取得できます。

If e.Button = MouseButtons.Left And e.Clicks >= 2 Then
 〜マウスの左ボタンが2回以上クリックされたら実行されるコードを記述
End If
■No2675に返信(Tomさんの記事)
SH様、む様、素早いご回答ありがとうございます。

私事により先ほど帰宅し、もう直ぐに出掛けなければいけない為、
組み込んでみるのは明日以降になってしまうかと思います。
素早いご回答を頂きましたのに非常に申し訳ないです。
組み込み次第直ぐに結果を報告させて頂きます。
本当にありがとうございます。

DOBON.NET | プログラミング道 | プログラミング掲示板