c 控制項拖放

2021-07-23 14:23:19 字數 1717 閱讀 2226

1.       實現方案一:可以通過mousedown、mouseup、mouseover事件實現

如果涉及到click事件的話,且mousedown事件中有判斷是左鍵動作的話,可能會與mousedown事件衝突,即click事件可能也會觸發mousedown事件。因此可改用mouseover事件,在mouseover事件中增加對左鍵動作的判斷。 //

滑鼠按下時啟用

private

void button1_mousedown(objectsender,mouseeventargs e)}//

滑鼠移動時發生,控制項位置隨時變化

private void button1_mousemove(objectsender,

mouseeventargse)

//滑鼠鬆開時發生,控制項位置確定(

e.x , e.y

表示在螢幕上的位置)

private void button1_mouseup(objectsender,mouseeventargs e)

上述方法實現的拖動是:在拖動的過程中控制項位置隨時變化,直到鬆開滑鼠為止。

private

void button1_ mousemove (objectsender, mouseeventargs e)

}private void button1_mouseup(object sender,mouseeventargs e)

上述方法避免了

與click事件衝突,且拖放過程中,控制項保持原先位置,直到拖放完成。

2.       實現方案二:通過dodragdrop方法完成

在該方案中,涉及到源器件、目標器件。源器件即想要拖放的控制項,目標器件即想要拖到哪的控制項。主要包括:源器件的mousedown(mouseover)事件、目標器件的dragenter事件(用滑鼠將源器件拖到目標器件的工作區時發生)和目標器件的dragdrop時間(拖放操作完成時發生)。

private

void button1_mousedown(objectsender, mouseeventargs e)

}private

void panel1_dragenter(objectsender, drageventargs e)

}private

void panel1_dragdrop(objectsender, drageventargs e)

//拖拽

private

void picturebox1_mousedown(object sender,mouseeventargse)}}

private

void picturebox2_dragenter(object sender,drageventargse)

else }

private

void picturebox2_dragdrop(object sender,drageventargse)

3.  dragdropeffects.copy與dragdropeffects.move:

發現無論是dragdropeffects.copy還是dragdropeffects.move,實現的效果都是一樣的,即原先位置上的控制項移動到新的位置上,並沒有實現copy的效果,後來發現effect只是游標的效果,copy和move,在拖放時的游標不同,因此在拖放完成後,若要實現複製的效果的話,還要進行後續工作。

VB控制項間的拖放

新建工程,放置控制項picture1,text1,text2,複製下面的 執行 text1和text2可以互相拖放,也可以將picture1拖放給text1,text2.private subform load picture1.oledragmode 1 text1.oledropmode 1 t...

整體拖放多個選中的控制項

在建立多個子控制項時,如果選中了多個物件時,可以使用drawfocus 這個函式來繪製當前的位置。具體流程 一 在onlbuttondown uint nflags,cpoint point 事件中,儲存這個point原點 二 在onmousemove uint nflags,cpoint poin...

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

一 實現方案 1.首先對拖放到的控制項的allowdrop屬性設定為ture。2.新增控制項的dragenter事件,該事件會在檔案被拖放到控制項的工作區時觸發。3.在dragenter事件方法中檢查拖放檔案的格式,並對拖放檔案放置時的效果進行設定 此處設定為dragdropeffects.link...