0


C#在winForm窗体中添加一个可以自由拖动的控件

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


一、实现步骤

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控件随鼠标移动的功能;

标签: 开发语言 c# windows

本文转载自: https://blog.csdn.net/dongyanxiang01/article/details/130264143
版权归原作者 Shui Hu 所有, 如有侵权,请联系我们删除。

“C#在winForm窗体中添加一个可以自由拖动的控件”的评论:

还没有评论