RichTextBoxからのドラッグ&ドロップでドラッグ元を判別
投稿者 shu  (社会人)
投稿日時
2013/3/1 09:36:33
文字が選択状態であったらDoDragDropをすればよいのではないでしょうか?
DoDragDropを行うまえに必要な情報を取得しそれを適当に作成したクラスの
インスタンスに設定してDoDragDropに渡すというのはどうでしょう?
DoDragDropを行うまえに必要な情報を取得しそれを適当に作成したクラスの
インスタンスに設定してDoDragDropに渡すというのはどうでしょう?
投稿者 るきお  (社会人)
投稿日時
2013/3/16 10:25:58
DoDragDropを使用するタイミングの問題でしょうか。
とりあえずMouseLeaveを使ってみたところうまくうごくようです。
私が試したプログラムは以下の通りです。
とりあえずMouseLeaveを使ってみたところうまくうごくようです。
私が試したプログラムは以下の通りです。
Public Class Form1
Private Sub TextBox1_DragEnter(sender As Object, e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragEnter
e.Effect = DragDropEffects.Copy
End Sub
Private Sub TextBox1_DragDrop(sender As System.Object, e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragDrop
Dim info As DragDropInformation = e.Data.GetData(GetType(DragDropInformation))
If info IsNot Nothing Then
TextBox1.Text = info.Text
Label1.Text = info.Source.Name
Else
TextBox1.Text = ""
Label1.Text = ""
End If
End Sub
Private Sub RichTextBox1_MouseLeave(sender As Object, e As System.EventArgs) Handles RichTextBox1.MouseLeave
If Control.MouseButtons <> Windows.Forms.MouseButtons.Left Then
Return
End If
If Len(RichTextBox1.SelectedText) > 0 Then
Dim info As New DragDropInformation
info.Text = RichTextBox1.SelectedText
info.Source = sender
RichTextBox1.DoDragDrop(info, DragDropEffects.Copy)
End If
End Sub
End Class
Public Class DragDropInformation
Public Property Text As String
Public Property Source As Control
End Class
ドラッグ元のRichTextBoxのMouseDownやMouseMoveイベントでDoDragDropメソッドを呼び出し、引数にドラッグ元のRichTextBoxを割り当てれば識別用に使えるかなと思ったのですが、これらのマウスイベントでDoDragDropを行うとRichTextBox内のテキストをマウスで選択できなくなってしまいます。
(これは、以下のドラッグ&ドロップについての講座「5.ドラッグ」にも記載されています。)
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard22.htm
ドラッグ元の識別は、対象のRichTextBoxか、それ以外(外部ソフトからのドラッグも含む)を判別できればいいです。
環境はVB2008です。
よろしくお願いします。