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 操作被取消,沒有放置消息