C WinForm 檔案的拖放到指定控制項

2021-08-02 17:59:22 字數 2913 閱讀 1555

一、實現方案

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 ...