我想实现以下目标:
用户将文本从任何与我的应用程序无关的打开窗口(例如firefox或word)拖到我应用程序中form1上的button1上。当他/她这样做时,将打开一个新表单(称为包含richtextbox的form2),并将拖动的文本直接复制(或插入)到新表单的richtextbox中。 button1将allowdrop设置为true。除此之外,我不知道如何继续。
我试过了:
e.effects = DragDropEffects.Copy
但似乎还不够。你能帮忙吗?
由于
答案 0 :(得分:0)
了解拖放是第一步。 http://www.vb-helper.com/howto_net_drag_drop.html - 或 - http://msdn.microsoft.com/en-us/library/aa289508%28VS.71%29.aspx。
基本上,您需要为目标启用拖放,处理拖放事件,然后实施所需的操作。
从MSDN关于拖动文本:
Private MouseIsDown As Boolean = False
Private Sub TextBox1_MouseDown(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseDown
' Set a flag to show that the mouse is down.
MouseIsDown = True
End Sub
Private Sub TextBox1_MouseMove(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseMove
If MouseIsDown Then
' Initiate dragging.
TextBox1.DoDragDrop(TextBox1.Text, DragDropEffects.Copy)
End If
MouseIsDown = False
End Sub
Private Sub TextBox2_DragEnter(ByVal sender As Object, ByVal e As _
System.Windows.Forms.DragEventArgs) Handles TextBox2.DragEnter
' Check the format of the data being dropped.
If (e.Data.GetDataPresent(DataFormats.Text)) Then
' Display the copy cursor.
e.Effect = DragDropEffects.Copy
Else
' Display the no-drop cursor.
e.Effect = DragDropEffects.None
End If
End Sub
Private Sub TextBox2_DragDrop(ByVal sender As Object, ByVal e As _
System.Windows.Forms.DragEventArgs) Handles TextBox2.DragDrop
' Paste the text.
TextBox2.Text = e.Data.GetData(DataFormats.Text)
End Sub
答案 1 :(得分:0)
我明白了。我正在分享,所以其他人可能会受益。
首先,我在其中一个模块中声明了一个全局变量:
Public draggedText As String = ""
其次,我按如下方式处理按钮上的dragdrop事件:
Private Sub button1_DragDrop(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles button1.DragDrop
draggedText = e.Data.GetData(DataFormats.Text)
frm_form2.Show()
End Sub
第三,在frm_form2的load事件中,我添加了以下内容:
If draggedText <> "" Then
richTextBox1.Text = draggedText
draggedText = ""
End If
就是这样。没有我想象的那么复杂。此外,您可以添加上一个答案中提到的dragEnter事件的代码,以更改光标的外观。
我希望这会有所帮助。