1.textbox接受拖放的檔案 2.listbox允許使用者自定義排序 3.listbox之間的拖放 4.控制項的拖放 5.console的拖放問題
使用者在進行拖放操作時,經過的步驟大體如下: 例如將a中的資料拖放的b中 滑鼠點選a中的資料(mousedown)->滑鼠移動(mousemove)->出源資料邊界,即出a(dragle**e)->進入目標邊界,進入b(dragenter)->在b中移動,選擇放資料的位置,即拖動效果(dragover)->抬起滑鼠(mousedown)->將a資料放到b中,拖放結束。(dragdrop,所有的拖放都涉及dragdrop事件)。
下面的所有例子,都會使用到上面所列舉的幾個事件。
首先對目標元件set "allowdrop" to true
一、textbox接受拖放的檔案。為了方便使用者的使用,這個應該是最常用到的操作。加入這個功能,可以使使用者省去「開啟檔案對話方塊,然後選擇檔案」的操作。在這個例子中,我們不需要知道使用者的點選,即選擇了什麼檔案。只需要了解使用者拖動檔案進入textbox(dragenter),並鬆開滑鼠,完成拖放(dragdrop)。主要涉及到兩個事件。
dragenter:在將物件拖入控制項的邊界時發生。判斷是否是檔案拖放
dragdrop:在完成拖放操作時發生。判斷檔案型別,只新增txt檔案
首先新增乙個textbox控制項,將控制項的屬性設定為allowdrop=true,multiline=true **如下:
private void textbox1_dragenter(objectsender, drageventargs e)二、listbox允許使用者自定義排序。在乙個listbox中的拖放操作,我們要知道使用者選擇了什麼資料(mousedown),要把資料放到**,即座標(dragover),完成拖放(dragdrop)。主要涉及的事件有3個 mousedown:選擇listbox中的item dragover: 滑鼠的移動 dragdrop: 拖放完成。在滑鼠當前位置插入資料}private void textbox1_dragdrop(objectsender, drageventargs e)}}
首先在窗體上加入listbox控制項,將allowdrop屬性設定為true **如下:
private void frmlistboxdragtest_load(objectsender, eventargs e)三.listbox之間的拖放。因為是在listbox之間拖放資料,所以涉及到兩個控制項。假如本例是將listbox1中的資料拖放到listbox2中。那涉及的事件有4個 listbox1 中的mousedown:選取listbox1中的資料 listbox2 中的dragenter:拖放操作進入listbox2 listbox2 中的dragover: 在listbox2上移動 listbox2 中的dragdrop: 拖放完畢,在listbox2中顯示資料",i));
}}private void listbox1_mousedown(objectsender, mouseeventargs e)
//開始拖放操作,dragdropeffects為列舉型別。
為將源資料移動到目標資料
this.listbox1.dodragdrop(this.listbox1.selecteditem, dragdropeffects.move);
}private void listbox1_dragover(objectsender, drageventargs e)
private void listbox1_dragdrop(objectsender, drageventargs e)
//獲取拖放的資料內容
object data = e.data.getdata(typeof(string));
//刪除元資料
this.listbox1.items.remove(data);
//插入目標資料
this.listbox1.items.insert(index, data);
}
**如下:
private void frmtwolistboxdragtest_load(objectsender, eventargs e)4.控制項的拖放。以picturebox為例。涉及的事件有 mousedown 選取picturebox,可以判斷滑鼠按鍵(左鍵還是右鍵等) mousemove 移動滑鼠到指定位置 mouseup 釋放滑鼠按鍵,放下picturebox", i));
this.listbox2.items.add(string.format("listbox2中的資料", i));
}}private void listbox1_mousedown(objectsender, mouseeventargs e)
private void listbox2_dragenter(objectsender, drageventargs e)
private void listbox2_dragover(objectsender, drageventargs e)
private void listbox2_dragdrop(objectsender, drageventargs e)
object data = e.data.getdata(typeof(string));
this.listbox1.items.remove(data);
this.listbox2.items.insert(index, data);
}
在進行控制項移動的時候,需要明白picturebox的座標並不是滑鼠的座標,mousedown只是在滑鼠按下後執行一次,而mousemove隨著picturebox的移動而不停的觸發。
**如下:
private bool _clicked = false;五、console的拖放問題console 的拖放時最簡單的一種操作,因為console本身就支援拖放(如同cmd)。而我們所要做的只是新增一行**,然後等待使用者按下回車。例如:private int_clickx;
private int_clicky;
private int _mousedowncount = 1;
private void picturebox1_mousemove(objectsender, mouseeventargs e)
:", picturebox1.left, picturebox1.top);
}}private void picturebox1_mouseup(objectsender, mouseeventargs e)
:", e.x,e.y);
}private void picturebox1_mousedown(objectsender, mouseeventargs e)
::", e.x, e.y,_mousedowncount);
_clicked = true;
_mousedowncount += 1;
}
string content=console.readline();ohter:console.writeline(content);
console.readline();
dragdropeffects 列舉
成員名稱
說明all
copy 、move 和 scroll 效果的組合。
copy
將拖動源中的資料複製到放置目標。
link
將拖動源中的資料鏈接到放置目標。
move
將拖動源的資料移動到放置目標。
none
放置目標不接受該資料。
scroll
copy, move, and scroll effects.'>拖動時可以滾動目標,以定位在目標中當前不可見的某個放置位置。
C WinForm 檔案的拖放到指定控制項
一 實現方案 1.首先對拖放到的控制項的allowdrop屬性設定為ture。2.新增控制項的dragenter事件,該事件會在檔案被拖放到控制項的工作區時觸發。3.在dragenter事件方法中檢查拖放檔案的格式,並對拖放檔案放置時的效果進行設定 此處設定為dragdropeffects.link...
檔案拖放操作
我們知道,很多程式都直接檔案拖放。例如常見的excel,word等等。如果要為我們自己的應用程式新增檔案拖放到支援,那麼可以按照如下的一些步驟完成 1.設定窗體的allowdrop屬性為true 2.編寫兩個事件 dragenter和dragdrop 以下是我的乙個小軟體中的兩段 供參考 當拖放檔案...
wxWidgets實現拖放操作
剛剛從學校出來找到了乙份做c 的實習工作,安排給我的任務就是在現有系統上開發乙個演算法流程編輯模組,其中就要實現演算法模組的拖放操作。因為之前用過mfc開發過專案,所以學習其wxwidgets起來相對順手,但是其中也遇到了一些小麻煩,不過後面也都慢慢解決了。個人認為,對於新手來說,開發乙個之前沒有實...