c# WinForm实现窗体上控件的自由拖动
2013-07-11 20:07
471 查看
说明:首先在窗体上放一个PictrueBox控件,命名为pb1,拖动完整代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WinFormDrag
{
public partial class Form1 : Form
{
//鼠标按下坐标(control控件的相对坐标)
Point mouseDownPoint = Point.Empty;
//显示拖动效果的矩形
Rectangle rect = Rectangle.Empty;
//是否正在拖拽
bool isDrag = false;
public Form1()
{
InitializeComponent();
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
if (rect != Rectangle.Empty)
{
if (isDrag)
{//画一个和Control一样大小的黑框
e.Graphics.DrawRectangle(Pens.Black, rect);
}
else
{
e.Graphics.DrawRectangle(new Pen(this.BackColor), rect);
}
}
}
/// <summary>
/// 按下鼠标时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pb1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
mouseDownPoint = e.Location;
//记录控件的大小
rect = pb1.Bounds;
}
}
/// <summary>
/// 移过时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pb1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
isDrag = true;
//重新设置rect的位置,跟随鼠标移动
rect.Location = getPointToForm(new Point(e.Location.X - mouseDownPoint.X, e.Location.Y - mouseDownPoint.Y));
this.Refresh();
}
}
/// <summary>
/// 释放鼠标按钮时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pb1_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (isDrag)
{
isDrag = false;
//移动control到放开鼠标的地方
pb1.Location = rect.Location;
this.Refresh();
}
reset();
}
}
//重置变量
private void reset()
{
mouseDownPoint = Point.Empty;
rect = Rectangle.Empty;
isDrag = false;
}
//把相对与control控件的坐标,转换成相对于窗体的坐标。
private Point getPointToForm(Point p)
{
return this.PointToClient(pb1.PointToScreen(p));
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WinFormDrag
{
public partial class Form1 : Form
{
//鼠标按下坐标(control控件的相对坐标)
Point mouseDownPoint = Point.Empty;
//显示拖动效果的矩形
Rectangle rect = Rectangle.Empty;
//是否正在拖拽
bool isDrag = false;
public Form1()
{
InitializeComponent();
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
if (rect != Rectangle.Empty)
{
if (isDrag)
{//画一个和Control一样大小的黑框
e.Graphics.DrawRectangle(Pens.Black, rect);
}
else
{
e.Graphics.DrawRectangle(new Pen(this.BackColor), rect);
}
}
}
/// <summary>
/// 按下鼠标时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pb1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
mouseDownPoint = e.Location;
//记录控件的大小
rect = pb1.Bounds;
}
}
/// <summary>
/// 移过时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pb1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
isDrag = true;
//重新设置rect的位置,跟随鼠标移动
rect.Location = getPointToForm(new Point(e.Location.X - mouseDownPoint.X, e.Location.Y - mouseDownPoint.Y));
this.Refresh();
}
}
/// <summary>
/// 释放鼠标按钮时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pb1_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (isDrag)
{
isDrag = false;
//移动control到放开鼠标的地方
pb1.Location = rect.Location;
this.Refresh();
}
reset();
}
}
//重置变量
private void reset()
{
mouseDownPoint = Point.Empty;
rect = Rectangle.Empty;
isDrag = false;
}
//把相对与control控件的坐标,转换成相对于窗体的坐标。
private Point getPointToForm(Point p)
{
return this.PointToClient(pb1.PointToScreen(p));
}
}
}
相关文章推荐
- C# winform 实现(不规则)窗体或者控件的拖动
- WinForm实现窗体上控件的自由拖动
- WinForm实现窗体上控件的自由拖动
- C# WinForm实现窗体上控件自由拖动功能示例
- WinForm实现窗体上控件的自由拖动
- [置顶] C#实现窗体拖动时各个控件同比自动放缩大小
- C#基础系列:开发自己的窗体设计器(实现控件的拖动)
- 巧用C#实现所有窗体控件跟随窗体尺寸自由变换
- C# winform 实现窗体或者控件的拖动
- Delphi实现窗体控件自由移动
- 『WPF』实现拖动文件到窗体(控件)
- 【转】C#实现窗体中所有控件跟随窗体尺寸的自由变换
- C#实现控件随窗体拖动而自动缩放其大小
- C# WinForm实现控件拖动实例介绍
- C# winform 实现(不规则)窗体或者控件的拖动
- C#基础系列:开发自己的窗体设计器(实现控件的拖动)
- 实现拖动文件到窗体(控件)
- C#基础系列:开发自己的窗体设计器(实现控件的拖动)
- 关于拖动(实现窗体拖动、不允许窗体拖动、任意控件运行时拖动)
- 如何用C#实现控件的自由拖动