C Winform 拖放操作

2022-09-15 12:45:10 字數 3960 閱讀 5755

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)

}private void textbox1_dragdrop(objectsender, drageventargs e)}}

二、listbox允許使用者自定義排序。在乙個listbox中的拖放操作,我們要知道使用者選擇了什麼資料(mousedown),要把資料放到**,即座標(dragover),完成拖放(dragdrop)。主要涉及的事件有3個 mousedown:選擇listbox中的item dragover: 滑鼠的移動 dragdrop: 拖放完成。在滑鼠當前位置插入資料

首先在窗體上加入listbox控制項,將allowdrop屬性設定為true **如下:

private void frmlistboxdragtest_load(objectsender, eventargs e)

",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);

}

三.listbox之間的拖放。因為是在listbox之間拖放資料,所以涉及到兩個控制項。假如本例是將listbox1中的資料拖放到listbox2中。那涉及的事件有4個 listbox1 中的mousedown:選取listbox1中的資料 listbox2 中的dragenter:拖放操作進入listbox2 listbox2 中的dragover: 在listbox2上移動 listbox2 中的dragdrop: 拖放完畢,在listbox2中顯示資料

**如下:

private void frmtwolistboxdragtest_load(objectsender, eventargs e)

", 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);

}

4.控制項的拖放。以picturebox為例。涉及的事件有 mousedown 選取picturebox,可以判斷滑鼠按鍵(左鍵還是右鍵等) mousemove 移動滑鼠到指定位置 mouseup 釋放滑鼠按鍵,放下picturebox

在進行控制項移動的時候,需要明白picturebox的座標並不是滑鼠的座標,mousedown只是在滑鼠按下後執行一次,而mousemove隨著picturebox的移動而不停的觸發。

**如下:

private bool _clicked = false;

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;

}

五、console的拖放問題console 的拖放時最簡單的一種操作,因為console本身就支援拖放(如同cmd)。而我們所要做的只是新增一行**,然後等待使用者按下回車。例如:

string content=console.readline();

console.writeline(content);

console.readline();

ohter:

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起來相對順手,但是其中也遇到了一些小麻煩,不過後面也都慢慢解決了。個人認為,對於新手來說,開發乙個之前沒有實...