2010/11/16(Tue) 13:57:51 編集(投稿者)
■No55062 (チョーさん さん) に返信
> 複数セルの内容をドラッグで他のコントロールに持っていけるようにするため、
ドラッグでの範囲選択と、選択範囲のドラッグの両方を実現したいなら、
処理を単純化するために、
「セルの選択は左ボタン」
「ドラッグは右ボタン」
という仕様にしてしまうのが簡単かと。
> 現状では、複数セルが選択状態の時、任意の選択セルをマウスダウンした時点で、
> 選択状態が変わり、マウスダウンしたセルのみの選択になってしまいます。
どのようなコードになっていますか?
'手抜きコードなので、マウスドラッグでの選択はできません。
'複数選択には Ctrl や Shift キーを併用して行ってください。
Public Class Form1
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
DataGridView1.AllowUserToAddRows = False
DataGridView1.ColumnCount = 10
DataGridView1.RowCount = 20
DataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically
DataGridView1.MultiSelect = True
End Sub
Private Sub DataGridView1_MouseDown(ByVal sender As Object, _
ByVal e As MouseEventArgs) Handles DataGridView1.MouseDown
'実際に組み込む際には、SystemInformation.DragSize でのドラッグ開始判定や
'クリックされた位置(ヘッダーは除外するなど)も判定条件に加えておいた方が良いかも。
If CBool(e.Button And MouseButtons.Left) Then
'選択されたセルの一覧
Dim s As New List(Of String)()
For Each c As DataGridViewCell In Me.DataGridView1.SelectedCells
s.Insert(0, String.Format("{0}-{1}", c.RowIndex, c.ColumnIndex))
Next
'(テキストデータにしてあるので、メモ帳等にドロップしてください)
DataGridView1.DoDragDrop(Join(s.ToArray(), vbCrLf), DragDropEffects.All)
End If
End Sub
End Class