国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

WinForm拖拽控件生成副本的解決方法

2020-01-24 02:35:48
字體:
來源:轉載
供稿:網友

本文講述了WinForm中實現拖拽效果的功能,即在WinForm中有一個Button,可以實現拖拽這個Button到目標位置后生成一個該控件的副本的功能。具體操作步驟如下:

要實現該功能主要分成如下三步:

1)確定被拖拽的對象:這里是Button(要使得Button被單擊之后可以拖拽,那么必須處理其MouseDown事件,同時調用其DoDragDrop――該函數接受兩個參數:i)要拖動的數據。ii)拖動的效果(該效果是2“目標位置”所能夠接受的效果,是一個枚舉值):

C#代碼如下:

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

VB.NET頁面代碼如下:

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

2)目標位置:這里是Form窗體自身。為了使得和Windows資源管理器中實現的文件拖拽效果一樣(即拖拽一個文件到目標位置的中途,鼠標出現“+”號的效果)。那么應當處理DragEnter事件――即拖拽控件途中進入Form體內把效果設置成Copy的效果。

C#代碼如下:

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

VB.NET頁面代碼如下:

Private Sub Form1_DragEnter(sender As System.Object, e As System.Windows.Forms.DragEventArgs) Handles MyBase.DragEnter    If (e.Data.GetDataPresent(GetType(Button))) Then  '當Button被拖拽到WinForm上時候,鼠標效果出現      e.Effect = DragDropEffects.Copy    End If  End Sub

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

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

C#代碼如下:

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;}

VB.NET頁面代碼如下:

Private Sub Form1_DragDrop(sender As System.Object, e As System.Windows.Forms.DragEventArgs) Handles MyBase.DragDrop    '拖放完畢之后,自動生成新控件    Dim btn As New Button    btn.Size = Button1.Size    btn.Location = Me.PointToClient(New Point(e.X, e.Y))  '用這個方法計算出客戶端容器界面的X,Y坐標。否則直接使用X,Y是屏幕坐標    Me.Controls.Add(btn)    btn.Text = "按鈕" + count.ToString    count = count + 1  End Sub

這里需要注意點:Location屬性(指定控件放置位置的起始點)不能直接用e.X或e.Y――因為這是屏幕坐標,要根據實際的控件界面坐標進行適度轉換,最簡單方法是――PointToClient方法。

下面給出完整代碼:

【界面如下所示】

C#代碼如下:

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;  }}

 

VB.NET頁面代碼如下:

Public Class Form1  '計數變量,說明輸出了第N個Button  Private count As Integer = 1  Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load    Me.AllowDrop = True   '窗體自身支持接受拖拽來的控件  End Sub   Private Sub Button1_MouseDown(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown    '左鍵的話,標志位為true(表示拖拽開始)    If (e.Button = Windows.Forms.MouseButtons.Left) Then      Button1.DoDragDrop(Button1, DragDropEffects.Copy Or DragDropEffects.Move)  '形成拖拽效果,移動+拷貝的組合效果    End If  End Sub  Private Sub Form1_DragEnter(sender As System.Object, e As System.Windows.Forms.DragEventArgs) Handles MyBase.DragEnter    If (e.Data.GetDataPresent(GetType(Button))) Then  '當Button被拖拽到WinForm上時候,鼠標效果出現      e.Effect = DragDropEffects.Copy    End If  End Sub  Private Sub Form1_DragDrop(sender As System.Object, e As System.Windows.Forms.DragEventArgs) Handles MyBase.DragDrop    '拖放完畢之后,自動生成新控件    Dim btn As New Button    btn.Size = Button1.Size    btn.Location = Me.PointToClient(New Point(e.X, e.Y))  '用這個方法計算出客戶端容器界面的X,Y坐標。否則直接使用X,Y是屏幕坐標    Me.Controls.Add(btn)    btn.Text = "按鈕" + count.ToString    count = count + 1  End SubEnd Class
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 突泉县| 榆社县| 习水县| 建宁县| 定兴县| 隆昌县| 扎兰屯市| 玉山县| 虎林市| 北安市| 呼和浩特市| 双牌县| 东山县| 林口县| 紫阳县| 揭西县| 新昌县| 吴堡县| 巴彦淖尔市| 大安市| 沭阳县| 合川市| 壶关县| 泰宁县| 青岛市| 罗江县| 南木林县| 依安县| 新化县| 惠州市| 邛崃市| 夏邑县| 万载县| 泰顺县| 施甸县| 津南区| 嵊泗县| 玉山县| 开原市| 鄂温| 灵丘县|