拖放实际上就如同用鼠标复制粘帖,因此你必须有一个可以复制或移动的源,也要有一个可以粘贴的目的地。在这两个操作过程中,数据是保存在内存中的。复制粘贴用的是剪切版,而拖放用的却是一种本质上是私有剪切板的Dataobject的对象。
下面是典型的托放操作的时间序列:
1、拖放(dragging)是通过调用源控件的DoDragDrop方法来初始化的,DoDragDrop有两个参数
◆data,指定将要传送的数据
◆allowedEffects,指定允许进行的操作(复制或移动)
这样自动创建了一个新的Dataobject对象
2、接下来就依次激发了GiveFeedBack事件。在大多数情况下,你并不需要担心GiveFeedBack事件,然而你如果想自定义拖放过程中的鼠标指针的话,你可以在这些地方加上你的代码。
3、任何有AllowDrop属性而且被设置成True的控件都是隐含的Drop对象。AllowDrop属性可以在设计时的属性窗口中进行设置,也可以在Form_load事件自动加载。
4、当鼠标移到某个控件时,就同时激发了这个控件的DragEnter事件。GetDataPresent方法是用来确认拖过来的数据是否适合目标控件,Effect属性是用来显示适当的鼠标指针。
5、如果用户在有效的目标控件上释放鼠标,就同时激发了DragDrop事件。DragDrop事件句柄中的代码从DataObject对象中释放数据并把它显示在目标控件中。
实际代码:
TextBox1的dragenter事件:
Private Sub TextBox1_DragEnter(ByVal sender As System.Object,ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragEnter If e.Data.GetDataPresent(DataFormats.FileDrop) Then e.Effect = DragDropEffects.Link TextBox1.Text = "" ' 清空输入框内容 Else e.Effect = DragDropEffects.None End If End Sub
TextBox1的dragdrop事件:
Private Sub TextBox1_DragDrop(ByVal sender As System.Object,ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragDrop ' 强制进行回收 GC.Collect() On Error Resume Next s1 = "" ' 初始化文件内容字符串 nbpName = "" ' 初始化nbp文件名 Dim files As Array = e.Data.GetData(DataFormats.FileDrop) For Each file As String In files TextBox1.AppendText(file) Next End Sub原文链接:https://www.f2er.com/vb/258727.html