C# – DragDrop

在開始之前,你得要先想想你為何想要使用這個功能,沒有目的而學之,無味!

對我而言呢~

只因為用起來夠帥氣!我已經厭倦「開啟舊檔」甚麼鬼的了!!!

好了。開始吧!

首先,你得讓該物件允許拖放功能。
你有兩種常見的選擇:

a. 在該物件的「屬性」裡面找到「AllowDrop」項目,將之改成「True」。
b. 物件.AllowDrop = true;

 

接著,觀察DragDrop相關的Event:

Control.DragDrop 當拖放操作完成時觸發。
Control.DragEnter 當一個物件拖到物件的範圍內時觸發。
Control.DragLeave 當一個物件拖離物件的範圍外時觸發。
Control.DragOver 當一個物件拖著待在物件上時觸發。

挑選你想要使用的下手。

 

點兩下就會帥氣的產生對應的事件接收 function ,他看起來應該會像是…

private void txtBox_DragEnter(object sender, DragEventArgs e) { }

參數裡面的「DragEventArgs」是最需要關注,也是整個拖放流程中的重要角色。
而在它裡面,最為主要的就是「DragEventArgs.Data」。
使用 e.Data 實際會取得「IDataObject Interface」。
根據它的功能,大致可以把它想像成一個 key-value 的容器。(像是 Dictionary)
它使用「DataFormats」做 key 值,也可直接使用字串。(前者實際上就是個字串)

 

判斷拖曳物的類型

這個應該算是托放功能最首要的工作,要先確定拖進來的是個什麼玩意吧?

只需要確認 Data 裡面是否包含 FileDrop 這個值即可(理論上 FileName 和 FileNameW 也行)。

if (e.Data.GetDataPresent(DataFormats.FileDrop, false) == true) { }

接著取得 FileDrop 裡的資訊,也就是所有拖曳進來的檔案名冊。

string[] fs= e.Data.GetData(DataFormats.FileDrop, false) as string[];

最後,可依序使用「Path.GetExtension」取得副檔名,逐一比對是否是你所需要的。
※回傳為null代表路徑為null,Empty代表沒有副檔名(資料夾之類的)ㄝ

剩下的就是無線廣泛的運用了~!!

–End

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s