現在支持鼠標拖放的Windows應用程序隨處可見(jiàn),鼠標拖放功能也極大地方便了用戶(hù)的操作,那么在我們的程序中添加上這么一個(gè)使用的功能是不是很難呢,其實(shí)很簡(jiǎn)單。下面我們就來(lái)看看如何實(shí)現鼠標拖放。
一個(gè)拖放的過(guò)程實(shí)際上是要經(jīng)過(guò)如下步驟的:
1、拖(dragging)是通過(guò)調用源控件的DoDragDrop方法來(lái)初始化的,DoDragDrop有兩個(gè)參數 data,指定將要傳送的數據 allowedEffects,指定允許進(jìn)行的操作(復制或移動(dòng))這樣自動(dòng)創(chuàng )建了一個(gè)新的Dataobject對象
2、接下來(lái)就依次激發(fā)了GiveFeedBack事件。在大多數情況下,我們并不需要關(guān)心GiveFeedBack事件。然而你如果想自定義拖放過(guò)程中的鼠標指針的話(huà),你可以在這些地方加上你的代碼。
3、任何有AllowDrop屬性而且被設置成True的控件都是隱含的Drop對象。AllowDrop屬性可以在設計時(shí)的屬性窗口中進(jìn)行設置,也可以在Form_load事件自動(dòng)加載。
4、當鼠標移到某個(gè)控件時(shí),就同時(shí)激發(fā)了這個(gè)控件的DragEnter事件。GetDataPresent方法是用來(lái)確認拖過(guò)來(lái)的數據是否適合目標控件,Effect屬性是用來(lái)顯示適當的鼠標指針。
5、如果用戶(hù)在有效的目標控件上釋放鼠標,就同時(shí)激發(fā)了DragDrop事件。DragDrop事件句柄中的代碼從DataObject對象中釋放數據并把它顯示在目標控件中。
下面我們就一個(gè)從系統中拖放獲得文件路徑的例子來(lái)演示下如何完成拖放的設計。
1、首先把窗體的TopMost屬性設置為T(mén)rue,然后在窗體中放置一個(gè)ListBox控件,并且把它的AllowDrop屬性設置為T(mén)rue。
2、為L(cháng)istBox1的DragEnter事件中添加代價(jià)代碼以確認數據是所需要的:
Private Sub ListBox1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox1.DragEnter
'檢查是否是Windows文件的放置格式。
If e.Data.GetDataPresent(DataFormats.FileDrop) Then
e.Effect = DragDropEffects.All
'這里Effect屬性被設置成DragDropEffects.All,并不會(huì )影響到源數據
End If
End Sub
3、釋放鼠標,激發(fā)了DragDrop事件,然后從DataObject對象中獲取我們需要的數據
Private Sub ListBox1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox1.DragDrop
If e.Data.GetDataPresent(DataFormats.FileDrop) Then
Dim MyFiles() As String
Dim i As Integer
MyFiles = e.Data.GetData(DataFormats.FileDrop)
'從私有剪貼板中獲取文件的路徑
For i = 0 To MyFiles.Length - 1
ListBox1.Items.Add(MyFiles(i))
Next
End If
End Sub
4、代碼寫(xiě)完了,現在按F5運行,從硬盤(pán)上隨便拖放一個(gè)或者多個(gè)選定的文件,效果如下:

聯(lián)系客服