一、實現方案
1.首先對拖放到的控制項的allowdrop屬性設定為ture。
2.新增控制項的dragenter事件,該事件會在檔案被拖放到控制項的工作區時觸發。
3.在dragenter事件方法中檢查拖放檔案的格式,並對拖放檔案放置時的效果進行設定(此處設定為dragdropeffects.link表示將檔案鏈結到控制項)。
4.新增控制項的dragdrop事件,該事件會在檔案放置完成後觸發。
5.在dragdrop事件方法中,對檔案的路徑進行獲取。獲取時使用getdata方法,指定獲取的格式為dataformats.filedrop,將返回的object型別的值轉換為system.array。該值的第乙個元素即為檔案的路徑,獲取檔案路徑後就可以完成後續操作了。
二、使用的相關函式
(用於判斷獲取的檔案是否為指定型別或可以轉換到指定型別)
過載1:bool getdatapresent(string format, bool autoconvert);
功能說明:確定該檔案是否與指定的格式相同,同時指定是否檢查該檔案能否轉換到指定格式。
引數說明:
format:指定的檔案格式。
autoconvert:true檢查該檔案能否轉換到指定格式,false僅檢查該檔案是否為指定格式。
返回值:如果與指定格式相同或者可以轉換到指定格式為true,否則為false。
過載2:bool getdatapresent(string format);
功能說明:確定該檔案是否與指定的格式相同或者該檔案能否轉換到指定格式。
引數說明:format:指定的檔案格式。
返回值:如果與指定格式相同或者可以轉換到指定格式為true,否則為false。
過載3:bool getdatapresent(type
format);
功能說明:確定該檔案是否與指定的格式相同或者該檔案能否轉換到指定格式。
引數說明:format:指定的檔案格式。
返回值:如果與指定格式相同或者可以轉換到指定格式為true,否則為false。
format所指定的格式參見system.windows.forms.dataformats 以獲取預定義的格式。
(檢索與指定格式相關聯的資料)
過載1:object getdata(string format, bool autoconvert);
引數說明:
format:指定的檔案格式。
autoconvert:true將資料轉換至該格式,反之為false。
返回值:與指定格式關聯的資料,或為 null。
過載2:object getdata(string format);
引數說明:format:指定的檔案格式。
返回值:與指定格式關聯的資料,或為 null。
過載3:object getdata(type format);
引數說明:format:指定的檔案格式。
返回值:與指定格式關聯的資料,或為 null。
format所指定的格式參見system.windows.forms.dataformats 以獲取預定義的格式。
三、實現**
//當某個檔案拖入工作區時觸發事件
private
void panel1_dragenter(object sender, drageventargs e)
if (e.data.getdatapresent(dataformats.filedrop)) //判斷該檔案是否可以轉換到檔案放置格式
e.effect = dragdropeffects.link; //放置效果為鏈結放置
else
e.effect = dragdropeffects.none; //不接受該資料,無法放置,後續事件也無法觸發
//完成放置後觸發
private
void panel1_dragdrop(object sender, drageventargs e)
string path = ((system.array)e.data.getdata(dataformats.filedrop)).getvalue(0).tostring(); //獲取檔案路徑
四、其他說明
在這個實現方案中,dragenter事件必須要有,否則控制項無法接收檔案。這裡判斷檔案放置格式的getdatapresent方法僅是判斷了該檔案能否作為乙個windows 檔案放置格式,windows 窗體不直接使用此格式。(ps:這個放置方式好像能拖進來所有檔案,獲得檔案路徑。。我也沒試過。)如果需要指定的檔案能夠拖放進來,例如等,可能需要其他方法,在 system.windows.forms.dataformats 中指定的格式並不多。通過effect屬性可以設定檔案放置方式,使用link方式可以用於獲得檔案路徑,none方式無法放置檔案。dragdrop這個事件可以不使用,全部寫到dragenter事件方法裡也是可以的。
檔案拖放到CEdit
step1,從cedit繼承,自定義乙個edit控制項。在標頭檔案新增如下的訊息響應函式 afx msg void ondropfiles hdrop hdropinfo step2,在cpp檔案中的訊息對映中新增 on wm dropfiles step3,在cpp檔案中新增ondropfiles...
C 檔案拖放到此程式的操作
問題描述 怎麼寫 可以實現指定型別的檔案通過滑鼠拖放顯示在程式的文字框中,如 選中3個檔案 3個檔案的格式有 和wma 拖到程式,程式的文字框顯示這三個檔案的路徑.解決 this.textbox1.allowdrop true this.textbox1.multiline true private...
用MFC實現檔案拖放到編輯框
黃向明同學分別講解了基於cformview和dialog的實現,下面我簡單介紹一下基於cview的實現,以及基於dialog的另一種實現,為了便於演示程式執行結果,程式中沒使用編輯框,而是listbox來接受被拖動的檔名,這樣也便於演示多個檔案的拖動。一 檔案拖放到cview中的listbox 2 ...