C#中如何实现拖动PictureBox控件(无晃动现象)

PictureBox控件在winfrom中进行拖动,用其他大佬的方法做出来的效果如下:

在这里插入图片描述
在鼠标停在某一位置的时候就开始晃动,幅度很大,因此我这边做个一个改进版,胆码如下

一、初始化代码:

    InitializeComponent();
    this.pictureBox1.MouseUp += new MouseEventHandler(this.pictureBox1_MouseUp);
    this.pictureBox1.MouseDown += new MouseEventHandler(this.pictureBox1_MouseDown);
    this.pictureBox1.MouseMove += new MouseEventHandler(this.pictureBox1_MouseMove);

事件添加:
在这里插入图片描述
1.点击闪电按钮添加事件
在这里插入图片描述
2.双击图中三个时间进入时间程序

二、写入时间程序:

 		int xPos;
        int yPos;
        int lastx, lasty;
        bool MoveFlag;
        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
            MoveFlag = false;
        }

        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (MoveFlag)
            {
                /**********************************************/
                int x = System.Math.Abs(lastx - e.X);     //  改
                int y = System.Math.Abs(lasty - e.Y);     //  进
                double dis = Math.Sqrt(x * x + y * y);    //  部
                if (dis > 3)                              //  分
                {
                /**********************************************/
                pictureBox1.Left += Convert.ToInt32(e.X - xPos);//设置x坐标.
                pictureBox1.Top += Convert.ToInt32(e.Y - yPos);//设置y坐标.
                lastx = e.X;
                lasty = e.Y;
                textBox1.Text = pictureBox1.Left.ToString();
                textBox2.Text = pictureBox1.Top.ToString();
                }
            }
        }

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            MoveFlag = true;//已经按下.
            xPos = e.X;//当前x坐标.
            yPos = e.Y;//当前y坐标.
        }

程序主要改进了在鼠标拖动过程中停止时,只要鼠标移动距离不超过3pix,移动程序跳过,就不会出现上述问题

参考程序https://blog.csdn.net/dreamdonghui/article/details/76686129.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未来超低端科技研究所

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值