- DragDrop:常見用法是透過按下滑鼠左鍵對資料進行抓取。
- 一個字串或一個物件,:滑鼠左鍵保持按下的狀態不變(Drag),並移至有接收資料能力的控制項上,放開滑鼠(Drop)以完成資料傳送。
- 基本上是一種事件導向的作業過程。
一、實作拖放功能時涉及來源控制項事件
- MouseDown:發生於滑鼠左鍵按下,且游標位於某個控制貢上時,一般而言,都會在此對DoDragDrop方法做呼叫。
- GiveFeedBack:提供使用者一個自定游標的機會。
- QueryContinueDrag:允許拖曳來源可以決某一拖曳事件是否應該取消。
- DragEnter:發生於某個物件被施丈至某個控制項的範圍內時,此事件的處理常式將會接收到一個DragEventArg事件。
- DragOver:發生於某個物件被拖丈經過某個控制項上時。此事件的處理常式將會接收到一個DragEventArgs物件。
- DragDrop:發生於滑鼠按鍵在某個目標控制項上被釋放時。此事件的處理常式將會接收到一個DragEventArgs物件。
- DragLeave:發生於某個物件被拖曳離開某個控制項範圍時。
三、拖曳作業的一般順序
1、透過呼叫來源控制項的DoDragDrop方法來初始化。
通常是在MouseDown的事件處理常式中完成。
Private Sub TextBox1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseDown
TextBox1.DoDragDrop(TextBox1.Text, DragDropEffects.Copy)
End Sub
2、GiveFeedBack及ueryContinueDrag亦發生在這個時間點。
通常是在MouseDown的事件處理常式中完成。
Private Sub TextBox1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseDown
TextBox1.DoDragDrop(TextBox1.Text, DragDropEffects.Copy)
End Sub
2、GiveFeedBack及ueryContinueDrag亦發生在這個時間點。
- GiveFeedBack:提供使用者一個自定游標的機會。
- QueryContinueDrag:允許拖曳來源可以決某一拖曳事件是否應該取消。
3、滑鼠游標被拖曳並在目標控制項上移動。任何AllowDrop=True皆為潛的置放目標。當滑鼠游標移入某個AllowDrop=True的控制項時,將會觸發該控制項的DragEnter事件。該事件處理常式會接收到DragEventArgs物件則可用來檢驗並決定是否適合該目標控制項。若接收,則可將DragEventArgs物件的Effect屬性設成適當的內容值。
Private Sub TextBox2_DragEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox2.DragEnter
If e.Data.GetData(DataFormats.Text) Then
e.Effect = DragDropEffects.Copy
Else
e.Effect = DragDropEffects.None
End If
End Sub
4、使用者於某一個有效的目標控制項上釋放滑鼠按鍵,進而觸發DragDrop事件。
DragDrop事件處理常式中的程式碼於獲取拖曳的資料後,即可於此目標控制項中做出適當的處理動作。
Private Sub TextBox2_DragDrop(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox2.DragDrop
TextBox2.Text = e.Data.GetData(DataFormats.Text).ToString
End Sub
Private Sub TextBox2_DragEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox2.DragEnter
If e.Data.GetData(DataFormats.Text) Then
e.Effect = DragDropEffects.Copy
Else
e.Effect = DragDropEffects.None
End If
End Sub
4、使用者於某一個有效的目標控制項上釋放滑鼠按鍵,進而觸發DragDrop事件。
DragDrop事件處理常式中的程式碼於獲取拖曳的資料後,即可於此目標控制項中做出適當的處理動作。
Private Sub TextBox2_DragDrop(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox2.DragDrop
TextBox2.Text = e.Data.GetData(DataFormats.Text).ToString
End Sub
5、DragDropEffects列舉的所有成員
使用地方:
1、使用地方:
- TextBox1.DoDragDrop(TextBox1.Text, DragDropEffects.Copy)
- e.Effect = DragDropEffects.Copy
- All:資料從拖曳來源中複製、移除,並在置放目標中捲動。
- Dopy:複製資料到目標之中。
- Link:連結資料至目標之中。
- Move:將資料移至目標之中。
- None:目標不接受資料。
- Scroll:將要開始進行捲動,或是目前有捲動作業正在目標中進行。
Private Sub SourceTreeView_ItemDrag(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ItemDragEventArgs) Handles SourceTreeView.ItemDrag
SourceTreeView.DoDragDrop(e.Item, DragDropEffects.Move)
End Sub
2、
Private Sub DistTreeView_DragEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles DistTreeView.DragEnter
e.Effect = DragDropEffects.Move
End Sub
3、DistTreeView.AllowDrop=True
4
Private Sub DistTreeView_DragDrop(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles DistTreeView.DragDrop
If e.Data.GetDataPresent("System.Windows.Forms.TreeNode", False) Then
Dim SourceNode As TreeNode
Dim apoint As Point
Dim DictNode As TreeNode
apoint = CType(sender, TreeView).PointToClient(New Point(e.X, e.Y))
DictNode = CType(sender, TreeView).GetNodeAt(apoint)
SourceNode = CType(e.Data.GetData("System.Windows.Forms.TreeNode"), TreeNode)
DictNode.Nodes.Add(SourceNode.Clone)
DictNode.Expand()
SourceNode.Remove()
End If
End Sub
沒有留言:
張貼留言