日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WinForm支持拖拽效果

發布時間:2023/12/18 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

總結

以上是生活随笔為你收集整理的WinForm支持拖拽效果的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。