一 拖放操作
拖放操作Drag and Drop是兩個(gè)窗口之間傳遞數(shù)據(jù)的一種手段。

1 拖放操作兩部分:拖Drag、放Drop
幾個(gè)術(shù)語(yǔ):
① 源窗口:發(fā)起拖拽StartDrag;
② 目標(biāo)窗口:接受拖放AcceptDraop;
③ 拖拽物:即傳輸?shù)臄?shù)據(jù)DataObject;
2 拖放的數(shù)據(jù)類(lèi)型
① 純文本;
② 富文本;
③ 圖片;
④ URL等;
二 拖放的數(shù)據(jù)類(lèi)型
拖放的數(shù)據(jù)類(lèi)型,常見(jiàn)的有:
① 純文本;
② 圖片;
③ 富文本/帶格式文本;
④ 超鏈接/文件路徑等。
觀察拖放物種的數(shù)據(jù)類(lèi)型:
string[] formats=e.Data.GetFormats();foreach(string fmt in formats){ Console.WriteLine("格式:"+fmt);}
一般來(lái)說(shuō),應(yīng)用程序只接受固定的類(lèi)型。
例如:
PhotoShop:接受圖片數(shù)據(jù)/文件路徑;
NotePad:接受純文本數(shù)據(jù);
Word:接受文本、HTML、圖片、文件路徑、超鏈接。
在DragEnter事件處理中,檢查和判斷數(shù)據(jù)類(lèi)型。
在DragEnter事件處理中,檢測(cè)和判斷數(shù)據(jù)類(lèi)型。
if(e.Data.GetDataPresent("System.String")){ e.Effect=DragDropEffects.All;}
如果未設(shè)置,則e.Effect的默認(rèn)值為None。
注意:
GetDataPresent重載2個(gè)版本:
GetDataPresent(string format);
GetDataPresent(Type type);
也可以傳typeof(string)將一個(gè)類(lèi)型名傳入。
如果不理解typeof的用法,可以用字符串形式。
三 復(fù)制與移動(dòng)
拖放的操作類(lèi)型:
① None無(wú)操作;
② Copy復(fù)制;
③ Move移動(dòng);
④ All 任意;
一般地,拖放時(shí)按住CTRL鍵,表示復(fù)制;
在復(fù)制操作是,光標(biāo)下方先生一個(gè)加號(hào);
在操作完成時(shí),通知源窗口操作的類(lèi)型:
void panel1_DragDrop(sender,e)
{
string str=(string)e.Data.GetData(typeof(striing));
e.Effect=DragDropEffects.Copy;
}
這僅僅是一個(gè)提示,具體的后續(xù)操作由源窗口的自己決定。
四 接受文件拖放
判斷拖放的數(shù)據(jù)類(lèi)型“FileDrop”:
如果不確定格式,可以先打印檢查一下:
string[] formats=e.Data.GetFormats();foreach(string fmt in formats){ Console.WriteLine("格式:"+fmt);}
取得拖拽的數(shù)據(jù):
object dragData=e.Data.GetData(“FileDrop”);
Winform 內(nèi)部已經(jīng)對(duì)數(shù)據(jù)作了轉(zhuǎn)換,轉(zhuǎn)成C#里的類(lèi)型,如果不確定,可以單步調(diào)試檢查一下:
string[] files=(string[])dragData;
該文章在 2024/10/30 15:07:26 編輯過(guò)