1.方法
實現拖放效果時,C#中提供了一個系統方法DoDragDrop方法,用於實現開始拖放操作,該方法由Control類所定義,由於控制項均直接或是間接派生於Control類,因此開發人員可以在任何可視化組件中調用DoDragDrop方法。DoDragDrop方法使用文法如下:
public DragDropEffects DoDragDrop ( Object data,DragDropEffects allowedEffects)
data:使用者所要拖動的資料內容。必須將所要拖動的內容傳入到這個方法的第一個參數位置。
allowedEffects:DragDropEffects枚舉值之一,此類型包含了拖動操作的效果。DragDropEffects枚舉值如表32.8所示。
表32.8 DragDropEffects枚舉值
枚舉值 說明
All 從拖動源複製、移除資料,並將其滾動到放置目標中
Copy 將資料複製到放置目標
Link 將拖動源中的資料連結到放置目標
Move 將拖動源的資料移動到放置目標
None 放置目標不接受該資料
Scroll 即將在放置目標中開始滾動,或當前正在滾動
開發人員在使用DoDragDrop方法時,必須指定參數allowedEffects為表**中的任何一個成員,另外,還可以使用位元運算符,把其中的任何一個成員作為一個完整參數傳入,以得到所需的拖動效果,實現關鍵代碼如下:
DragDropEffects.Copy| DragDropEffects.None
2.事件
C#中提供了一個系統拖放事件,與拖放方法一起使用來達到更好的效果。常用的拖放事件如表所示。
表 拖放事件
名稱 說明
DragEnter 當使用者在拖放操作過程中首次將滑鼠游標拖到控制項上時,會引發該事件
DragDrop 在完成拖放操作時發生
GiveFeedback 在執行拖動操作期間發生
DragLeave 如果使用者移出一個視窗,則引發DragLeave事件
DragOver 如果滑鼠移動但停留在同一個控制項中,則引發DragOver事件
QueryContinueDrag 在拖放操作過程中,當鍵盤或滑鼠按鍵狀態發生變化時,會引發QueryContinueDrag 事件。QueryContinueDrag事件允許拖動源確定是否應取消拖放操作
下面對拖放事件中比較重要的事件進行詳細介紹。
(1)DragEnter事件
當使用者在拖放操作過程中首次將滑鼠游標拖到控制項上時,觸發該事件。
文法:
public event DragEventHandler DragEnter
該事件為DragEventHandler委託類型,該委託是專門設計用以處理控制項的DragEnter、DragDrop、GiveFeedback、DragLeave和DragOver等相關事件的方法。DragEventHandler委託類型的定義文法如下:
public delegate void DragEventHandler(object sender,DragEventArgs e)
該委託封裝的方法必須接受兩個參數,第一個是object類型對象,該對象用來指定拖放目標對象;第二個為DragEventArgs 型別參數e,它主要包含拖動操作的相關資料。DragEventArgs 型別參數e的相關屬性值及說明如表所示。
表 DragEventArgs型別參數e的屬性值及說明
名稱 說明
AllowedEffect 擷取拖動事件的發起方(或源)所允許的拖放操作
Data 擷取IDataObject,它包含與此事件關聯的資料
Effect 擷取或設定拖放操作中目標放置效果
KeyState 擷取Shift、Ctrl 和 Alt鍵的目前狀態以及滑鼠按鍵的狀態
X 擷取滑鼠指標在螢幕座標系中的x座標
Y 擷取滑鼠指標在螢幕座標系中的y座標
(2)QueryContinueDrag事件
在拖放操作過程中,當鍵盤或滑鼠按鍵狀態發生變化時,觸發該事件。
文法:
public event QueryContinueDragEventHandler QueryContinueDrag
委託定義文法如下:
public delegate void DragEventHandler(object sender, QueryContinueDragEventArgs e)
該委託封裝的方法必須接受兩個參數,第一個是object類型對象,該對象用來指定為拖放目標對象;第二個為QueryContinueDragEventArgs 型別參數e,它主要包含拖動操作的相關資料。QueryContinueDragEventArgs 型別參數e有一個Action屬性,該屬性的屬性值用來確定是否繼續拖動、放置資料或取消操作。Action屬性值及說明如表32.11所示。
表 QueryContinueDragEventArgs.Action屬性值及說明
名稱 說明
Continue 該操作將繼續
Drop 該操作以放置而告終
Cancel 操作被取消,沒有放置訊息