WinForm支持拖拽效果

有一個MSDN客戶提問在WinForm中如何實現拖拽效果——比如在WinForm中有一個Button,我要實現的效果是拖拽這個Button到目標位置后生成一個該控件的副本。

其實這個操作主要分成三步走:

1)確定被拖拽的對象:

這里是Button(要使得Button被單擊之后可以拖拽,那么必須處理其MouseDown事件,

同時調用其DoDragDrop——該函數接受兩個參數:

i)要拖動的數據。

ii)拖動的效果(該效果是2“目標位置”所能夠接受的效果,是一個枚舉值):

Button1.DoDragDrop(Button1, DragDropEffects.Copy || DragDropEffects.Move);
 //形成拖拽效果,移動+拷貝的組合效果

2)目標位置:這里是Form窗體自身。

為了使得和Windows資源管理器中實現的文件拖拽效果一樣(即拖拽一個文件到目標位置的中途,鼠標出現“+”號的效果)。

那么應當處理DragEnter事件——即拖拽控件途中進入Form體內把效果設置成Copy的效果。

同時,為了使得Form自身支持接受拖拽傳來的控件,必須設置其AllowDrag=True(接收的控件):

private void Form1_DragEnter(System.Object sender, System.Windows.Forms.DragEventArgs e)
{
//當Button被拖拽到WinForm上時候,鼠標效果出現
if ((e.Data.GetDataPresent(typeof(Button)))) {
e.Effect = DragDropEffects.Copy;
}
}

另外,一旦松開鼠標,那么拖拽過程結束。此時應當處理DragDrop事件,復制一個按鈕:

private void Form1_DragDrop(System.Object sender, System.Windows.Forms.DragEventArgs e)
{
//拖放完畢之后,自動生成新控件
Button btn = new Button();
?btn.Size = ((Button)e.Data.GetData(typeof(Button))).Size;
btn.Location = this.PointToClient(new Point(e.X, e.Y));
//用這個方法計算出客戶端容器界面的X,Y坐標。否則直接使用X,Y是屏幕坐標
this.Controls.Add(btn);
btn.Text = "按鈕" + count.ToString();
count = count + 1;
}

?

?

================================================================

using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
public class Form1
{

//計數變量,說明輸出了第N個Button
private int count = 1;
private void Form1_Load(System.Object sender, System.EventArgs e)
{
this.AllowDrop = true;
//窗體自身支持接受拖拽來的控件
}

private void Button1_MouseDown(System.Object sender, System.Windows.Forms.MouseEventArgs e)
{
//左鍵的話,標志位為true(表示拖拽開始)
if ((e.Button == System.Windows.Forms.MouseButtons.Left)) {
Button1.DoDragDrop(Button1, DragDropEffects.Copy | DragDropEffects.Move);
//形成拖拽效果,移動+拷貝的組合效果
}
}

private void Form1_DragEnter(System.Object sender, System.Windows.Forms.DragEventArgs e)
{
//當Button被拖拽到WinForm上時候,鼠標效果出現
if ((e.Data.GetDataPresent(typeof(Button)))) { e.Effect = DragDropEffects.Copy; } } private void Form1_DragDrop(System.Object sender, System.Windows.Forms.DragEventArgs e) { //拖放完畢之后,自動生成新控件 Button btn = new Button(); btn.Size = Button1.Size; btn.Location = this.PointToClient(new Point(e.X, e.Y)); //用這個方法計算出客戶端容器界面的X,Y坐標。否則直接使用X,Y是屏幕坐標 this.Controls.Add(btn); btn.Text = "按鈕" + count.ToString(); count = count + 1; } public Form1() { DragDrop += Form1_DragDrop; DragEnter += Form1_DragEnter; Load += Form1_Load; }}

轉載于:https://www.cnblogs.com/lsgsanxiao/p/4835609.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458838.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458838.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458838.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

win7 64位出現桌面右鍵鼠標顯示忙碌

*************************************************** 更多精彩,歡迎進入:http://shop115376623.taobao.com *************************************************** 將下面綠色內容復制到txt文本中,然后另存為1.bat 雙擊運行即可 【針對64位…

android tee,Android 9.0的新增安全特性與TEE

Android P,預計將于 2018 年第三季度發布最終版本。特別是Android8.0以來,安全性是Android版本變更的一個重要因素。從安全性增強方面來看,本次Android9.0版本主要有以下幾個方面:統一的指紋身份驗證對話框Android P 中&#xff0…

哪些要素會讓咱們呈現抑郁癥的病癥

依據最新研討標明,一自個的性情怎樣,本來是天然生成的,后天的日子,僅僅對咱們的性情進行批改,但在咱們潛意識中,違反自個性情的行動,會讓咱們感到格外累,所以,不少人即是…

如何定義一個只能在堆上(棧上)生成對象的類?

在C中,類的對象建立分為兩種,一種是靜態建立,如A a;另一種是動態建立,如A* ptrnew A;這兩種方式是有區別的。 靜態建立一個類對象,是由編譯器為對象在棧空間中分配內存,是通過直接移…

canny算子的理論分析

****************************************************************************************************************************************** 紅:數字圖像處理視頻教程(兩部) {中科院版36講視頻教程 電子科大版70講視頻教程&#x…

Android為spinner設置適配器,Android Spinner與適配器模式詳解及實例代碼

最近做項目對Android Spinner 使用,這里簡單寫個小例子,來測試如何使用。Spinner是一個下拉列表,往安卓界面中拖拽一個Spinner控件,在屬性中設置Android:entries“array/spinner_data”其中spinner_data為在string中設置的數組。數…

web框架-Struts開始

問題: 為什么有structs 作為一種框架(frameset)可以與傳統的mvc進行比較? MVC是一種模式數據處理、顯示和數據輸入分開,來規范開發,但是卻又并不規范。可以這樣想:有三家公司,他們對…

加快上架方法

估計最近蘋果app應用上架的比較多,審核比較慢,現在一個app從提交到上架短則7,8天,長則2,3個星期。我在實際上線應用時,總結了一個簡單實用的小技巧,可以加快上架時間,最近使用這種方…

接口自動化測試 返回html,接口自動化測試實戰(更新完畢)

前言自動化沒練習的項目怎么辦?自動化已經成為測試的必備技能之一了,所以,很多想跳槽的測試朋友都在自學,特別是最實用的接口自動化,但是很多人因為沒有可以練手的項目而苦惱,最終導致缺乏實戰經驗&#xf…

Opencv 圖像增強算法 圖像檢測結果及代碼

****************************************************************************************************************************************** 紅:數字圖像處理視頻教程(兩部) {中科院版36講視頻教程 電子科大版70講視頻教程&#x…

php Hash Table(四) Hash Table添加和更新元素

HashTable添加和更新的函數: 有4個主要的函數用于插入和更新HashTable的數據: int zend_hash_add(HashTable *ht, char *arKey, uint nKeyLen,void **pData, uint nDataSize, void *pDest); int zend_hash_update(HashTable *ht, char *arKey, uint nKeyLen, void …

山寨“餓了么”應用中添加菜品數量按鈕效果

山寨“餓了么”應用中添加菜品數量按鈕效果 本人視頻教程系類 iOS中CALayer的使用 最終效果: 山寨源頭: 源碼:(此源碼解決了重用問題,可以放心的放在cell中使用) AddAndDeleteButton.h 與 AddAndDeleteBu…

html間數據傳送,Express框架與html之間如何進行數據傳遞(示例代碼)

關于Node.js 的Express框架介紹,推薦看菜鳥教程的Express框架,很適合入門,這里不再贅述,這里主要講一下Express框架與html之間如何進行數據傳遞我采用的是JQuery的Ajax()向后臺傳參方式(url傳參)1、Type屬性為Get時:(1…

數字圖像去噪典型算法及matlab實現

圖像去噪是數字圖像處理中的重要環節和步驟。去噪效果的好壞直接影響到后續的圖像處理工作如圖像分割、邊緣檢測等。圖像信號在產生、傳輸過程中都可能會受到噪聲的污染,一般數字圖像系統中的常見噪聲主要有:高斯噪聲(主要由阻性元器件內部產…

pat1100. Mars Numbers (20)

1100. Mars Numbers (20) 時間限制400 ms內存限制65536 kB代碼長度限制16000 B判題程序Standard 作者CHEN, YuePeople on Mars count their numbers with base 13: Zero on Earth is called "tret" on Mars.The numbers 1 to 12 on Earch is called "jan, feb, …

【USACO1.1】Broken Necklace

題意 一個環形項鏈,有rbw三種珠子,r代表red,b代表blue,w代表white,從任意一個位置斷開,兩端分別取珠子,同一端取的珠子要相同顏色,w可以染成想要的顏色,即既可當作r也可以…

html+注釋格式化,使用xml注釋來生成格式化的html輸出

我試圖從我在xml文件中的注釋中生成一個格式良好的html文檔。目前我有一個xml文件,用于生成xml表格的html列表。為了讓我添加有關表格的評論,我手動將注釋添加到輸出html文件中。使用xml注釋來生成格式化的html輸出我想如果可能將html代碼放在xml文件中作…

圖像增強-圖像銳化

圖像銳化主要影響圖像中的低頻分量,不影響圖像中的高頻分量。 圖像銳化的主要目的有兩個: 1.增強圖像邊緣,使模糊的圖像變得更加清晰,顏色變得鮮明突出,圖像的質量有所改善,產生更適合人眼觀察和識別的圖像…

[譯]git revert

git revert git revert用來撤銷一個已經提交了的快照. 但不是從項目歷史中移除這個commit, 而是生成一個新的commit, 老的commit還是保留在歷史項目里面的. 這樣做的好處是防止了項目丟失歷史. 用法 git revert <commit>生成一個新的commit, 撤銷老的<commit>的所有…

圖像二值化算法總結

****************************************************************************************************************************************** 紅&#xff1a;數字圖像處理視頻教程&#xff08;兩部&#xff09; {中科院版36講視頻教程 電子科大版70講視頻教程&#xff…