110,534
社区成员
发帖
与我相关
我的任务
分享
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;
using System.Threading;
namespace 拖动
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
var pict = new PictureBox(); //创建一个 PictureBox
pict.Name = "bmp1";
pict.Location = new Point(10, 10);
pict.Size = new Size(150, 150);
pict.Load("1.jpg");
Controls.Add(pict);
pict.MouseDown += new MouseEventHandler(mouseDown);
pict.MouseMove += new MouseEventHandler(mouseMove);
pict.DoubleClick += new EventHandler(doubleClick); //指定双击图片原路返回
var bup = new PictureBox(); //再创建一个 PictureBox 作为备份
bup.Image = pict.Image;
bup.Location = pict.Location;
bup.Size = pict.Size;
Controls.Add(bup);
}
int ox = 0;
int oy = 0;
List<Point> st = new List<Point>();
void mouseDown(object sender, MouseEventArgs e)
{
ox = e.X;
oy = e.Y;
var el = (PictureBox)sender;
st.Add(el.Location);
}
void mouseMove(object sender, MouseEventArgs e)
{
var el = (PictureBox)sender;
if (e.Button == MouseButtons.Left)
{
el.Top = el.Top + e.Y - oy;
el.Left = el.Left + e.X - ox;
st.Add(el.Location); //记录下位置
}
}
private void doubleClick(object sender, EventArgs e)
{
for (var i = st.Count - 1; i >= 0; i--)
{
Controls["bmp1"].Location = st[i];
Thread.Sleep(10);
}
st.Clear();
}
}
}
其他的应该不用解释了
public partial class Form2 : Form
{
public Form2() {
InitializeComponent();
pic_model.Size = new Size(100, 100);//模版pic
pic_model.BorderStyle = BorderStyle.FixedSingle;
}
private PictureBox m_picBox; //当前操作的pic
private Point m_pt_pic; //pic没有移动前的位置
private Point m_pt_mouseDown; //鼠标点下的位置
private void Form2_Load(object sender, EventArgs e) {
pic_model.Image = this.GetScreenImage(100, 100);
pic_model.MouseDown += new MouseEventHandler(pictureBox_MouseDown);
pic_model.MouseMove += new MouseEventHandler(pictureBox_MouseMove);
pic_model.MouseUp += new MouseEventHandler(pictureBox_MouseUp);
}
private Image GetScreenImage(int nWidth, int nHeight) {
Bitmap bmp = new Bitmap(nWidth, nHeight);
using (Graphics g = Graphics.FromImage(bmp)) {
g.CopyFromScreen(0, 0, 0, 0, new Size(nWidth, nHeight));
}
return bmp;//就拿桌面截图测试效果
}
void pictureBox_MouseUp(object sender, MouseEventArgs e) {
if (pic_model.RectangleToScreen(pic_model.DisplayRectangle).Contains(MousePosition)) {
m_picBox.Dispose();//当移动回去的时候删除
this.Controls.Remove(m_picBox);
}
}
void pictureBox_MouseMove(object sender, MouseEventArgs e) {
if (e.Button == MouseButtons.Left) {//改变pic位置
m_picBox.Left = m_pt_pic.X + (MousePosition.X - m_pt_mouseDown.X);
m_picBox.Top = m_pt_pic.Y + (MousePosition.Y - m_pt_mouseDown.Y);
}
}
void pictureBox_MouseDown(object sender, MouseEventArgs e) {
PictureBox picBox = sender as PictureBox;
m_pt_mouseDown = MousePosition;//记录鼠标位置
if (picBox == pic_model) {//如果点击的是模版pic 复制一个新的出来
m_picBox = new PictureBox();
m_picBox.Location = pic_model.Location;
m_picBox.Size = pic_model.Size;
m_picBox.Image = (Image)pic_model.Image.Clone();
this.Controls.Add(m_picBox);
m_picBox.BorderStyle = BorderStyle.FixedSingle;
m_picBox.MouseDown += new MouseEventHandler(pictureBox_MouseDown);
m_picBox.MouseMove += new MouseEventHandler(pictureBox_MouseMove);
m_picBox.MouseUp += new MouseEventHandler(pictureBox_MouseUp);
} else m_picBox = picBox;
m_picBox.BringToFront();//前置
m_pt_pic = m_picBox.Location;//记录初始位置
}
}