比如winform 窗口上有個(gè)ListBox組件,我想拖動(dòng)系統(tǒng)中的文件夾到ListBox組件上,松開鼠標(biāo),ListBox能夠記錄顯示選中的文件夾的路徑,有了路徑,就可以處理路徑文件夾下的圖片、文本、視頻等內(nèi)容了。具體做法:
在WinForms窗口上添加一個(gè)ListBox組件。你可以在設(shè)計(jì)視圖中拖拽一個(gè)ListBox控件到窗口上,或者通過(guò)代碼創(chuàng)建一個(gè)ListBox實(shí)例并將其添加到窗口的Controls集合中。
啟用ListBox的拖放功能。將ListBox的AllowDrop屬性設(shè)置為true,這樣它就可以接收拖放操作。
添加事件處理程序。為L(zhǎng)istBox控件的以下三個(gè)事件添加事件處理程序:
DragEnter:當(dāng)拖動(dòng)操作進(jìn)入ListBox控件的邊界時(shí)觸發(fā)。
DragDrop:當(dāng)拖動(dòng)操作完成并釋放鼠標(biāo)按鈕時(shí)觸發(fā)。
DragOver:當(dāng)拖動(dòng)操作在ListBox控件上進(jìn)行時(shí)觸發(fā)(可選,用于提供視覺(jué)反饋)。
可以通過(guò)在設(shè)計(jì)器中雙擊ListBox控件,自動(dòng)創(chuàng)建這些事件處理程序的骨架代碼。
在DragEnter事件處理程序中,將拖動(dòng)操作的效果設(shè)置為拷貝(Copy)。這樣當(dāng)拖動(dòng)文件夾時(shí),鼠標(biāo)指針將顯示一個(gè)"+"符號(hào),表示可以拷貝。
private void listBox_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) { e.Effect = DragDropEffects.Copy; } }
5.在DragDrop事件處理程序中,獲取拖放的文件夾路徑,并將其添加到ListBox中。
private void listBox_DragDrop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) { string[] folders = (string[])e.Data.GetData(DataFormats.FileDrop); foreach (string folderPath in folders) { if (System.IO.Directory.Exists(folderPath)) { listBox.Items.Add(folderPath); } } } }
這段代碼將遍歷拖放的文件夾路徑數(shù)組,并將每個(gè)存在的文件夾路徑添加到ListBox中。
6.可選:在DragOver事件處理程序中提供視覺(jué)反饋,比如更改鼠標(biāo)指針的外觀。
private void listBox_DragOver(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) { e.Effect = DragDropEffects.Copy; } }
這段代碼將在拖動(dòng)操作在ListBox上進(jìn)行時(shí),將鼠標(biāo)指針的效果設(shè)置為拷貝。
現(xiàn)在我們的的WinForms窗口上的ListBox組件應(yīng)該可以接收系統(tǒng)中的文件夾的拖放操作,并將選中文件夾的路徑記錄并顯示在ListBox中。
聯(lián)系客服