提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
一、实现步骤
1.创建一个新的Windows窗体项目
2.添加控件
textBox1=鼠标在需要拖动的控件中的坐标 X 值
textBox2=鼠标在需要拖动的控件中的坐标 Y 值
textBox3=需要拖动的控件在窗体的坐标 X 值
textBox3=需要拖动的控件在窗体的坐标Y 值
PictureBox1=需要拖动的控件
3.代码部分
1.在pictureBox1中添加事件pictureBox1_MouseDown,双击转到代码编辑
2.声明2个全局变量:
int 鼠标在拖动的控件中坐标X;
int 鼠标在拖动的控件中坐标Y;
输入代码
先获取到鼠标按下时,在被选中的控件中的坐标;
并显示到textbox中;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 可以自由拖动控件的窗体
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int 鼠标在拖动的控件中坐标X;
int 鼠标在拖动的控件中坐标Y;
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
//鼠标相对于控件左上角的坐标
鼠标在拖动的控件中坐标X = e.X;
鼠标在拖动的控件中坐标Y = e.Y;
textBox1.Text = Convert.ToString(鼠标在拖动的控件中坐标X);
textBox2.Text = Convert.ToString(鼠标在拖动的控件中坐标Y);
}
}
}
运行看一下效果
3.在pictureBox1中添加事件pictureBox1_MouseMove,双击转到代码编辑
输入代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 可以自由拖动控件的窗体
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int 鼠标在拖动的控件中坐标X;
int 鼠标在拖动的控件中坐标Y;
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
//鼠标相对于控件左上角的坐标
鼠标在拖动的控件中坐标X = e.X;
鼠标在拖动的控件中坐标Y = e.Y;
textBox1.Text = Convert.ToString(鼠标在拖动的控件中坐标X);
textBox2.Text = Convert.ToString(鼠标在拖动的控件中坐标Y);
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)//判断是否按下了鼠标左键
{
Point 鼠标相对于窗体左上角的坐标 = this.PointToClient(Control.MousePosition);//鼠标相对于窗体左上角的坐标
int 鼠标相对于窗体左上角的坐标X = 鼠标相对于窗体左上角的坐标.X;//鼠标相对于窗体左上角的坐标X
int 鼠标相对于窗体左上角的坐标Y = 鼠标相对于窗体左上角的坐标.Y;//鼠标相对于窗体左上角的坐标Y
pictureBox1.Location = new Point(鼠标相对于窗体左上角的坐标X - 鼠标在拖动的控件中坐标X, 鼠标相对于窗体左上角的坐标Y - 鼠标在拖动的控件中坐标Y);//将新的坐标传递给picturebox
textBox4.Text = Convert.ToString(pictureBox1.Location.X);
textBox3.Text = Convert.ToString(pictureBox1.Location.Y);
}
}
}
}
运行效果:
其它类型的控件实现思路相通;
总结
第一步:在pictureBox1的pictureBox1_MouseDown 鼠标按下 事件中获取到鼠标在pictureBox1控件中的当前位置;
第二步:在pictureBox1的pictureBox1_MouseMove 鼠标移动 事件中,获取鼠标在窗体中的坐标;
第三步:在pictureBox1的pictureBox1_MouseMove鼠标移动 事件中, 用鼠标在窗体中移动后的新坐标,减掉鼠标在pictureBox1控件中的初始坐标,就得到了鼠标移动后的pictureBox1控件新的坐标位置;
第四部:在pictureBox1的pictureBox1_MouseMove鼠标移动 事件中,将新的鼠标坐标赋给pictureBox1控件,就实现了pictureBox1控件随鼠标移动的功能;
版权归原作者 Shui Hu 所有, 如有侵权,请联系我们删除。