winform pictureBox 鼠标滚轮缩放以及拖动

这篇博客介绍了如何在Windows Forms应用程序中为pictureBox控件添加滚轮缩放和拖动功能。首先,调整pictureBox大小并设置SizeMode为Zoom。接着,通过添加MouseWheel事件和设置焦点,实现滚轮缩放图片。当滚轮向上滚动时,图片放大;向下滚动时,图片缩小。同时,设置了缩放比例的上下限。然后,实现了pictureBox的MouseMove事件,允许用户通过鼠标拖动来移动图片。最后,添加了MouseDown事件来记录鼠标按下时的位置,以便进行拖动操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 界面设计

pictureBox 调整好大小(不要用dock 属性),sizemode 用 zoom

2. 添加滚轮事件以及焦点

     pictureBox1.MouseWheel += new MouseEventHandler(pictureBox1_MouseWheel);
    this.ActiveControl = this.pictureBox1; // 设置焦点

注意: 不设置焦点,滚轮不起作用

3. 添加滚轮滚动事件

        private double ratio = 1;        // 图片的起始显示比例
        private double ratioStep = 0.1;
        private Size pic_size;
        private int xPos;
        private int yPos;

pic_size =  this.pictureBox1.Size;

 private void pictureBox1_MouseWheel(object sender, MouseEventArgs e)
        {
            if (e.Delta > 0)
            {
                ratio += ratioStep;
                if (ratio > 3) // 放大上限
                    ratio = 3;
                else
                {
                    this.changePictureBoxSize(ratio);
                }
            }
            else
            {
                ratio -= ratioStep;
                if (ratio < 0.5)  // 放大下限
                    ratio = 0.5;
                else
                {
                    this.changePictureBoxSize(ratio);
                }
            }
        }

     private  void changePictureBoxSize(double ratio)
        {
            var t = pictureBox1.Size;
            t.Width = Convert.ToInt32(pic_size.Width * ratio);
            t.Height = Convert.ToInt32(pic_size.Height * ratio);
            pictureBox1.Size = t;

            Point location = new Point();
            location.Y = (this.Height - this.pictureBox1.Height) / 2;
            location.X = (this.Width - this.pictureBox1.Width) / 2;
            this.pictureBox1.Location = location;
        }

4. 拖动事件

      private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            try
            {
                // 鼠标按下拖拽图片
                if (e.Button == MouseButtons.Left || e.Button == MouseButtons.Right)
                {
                    // 限制拖拽出框
                    if ((pictureBox1.Width - this.Width) >= 0 || (pictureBox1.Height - this.Height) >= 0)
                    {
                        if ((pictureBox1.Top + Convert.ToInt16(e.Y - yPos)) <= 0
                            || (pictureBox1.Left + Convert.ToInt16(e.X - xPos)) <= 0
                            || (pictureBox1.Right + Convert.ToInt16(e.X - xPos)) >= this.Width
                            || (pictureBox1.Bottom + Convert.ToInt16(e.Y - yPos)) >= this.Height)
                        {
                            pictureBox1.Left += Convert.ToInt16(e.X - xPos);//设置x坐标.
                            pictureBox1.Top += Convert.ToInt16(e.Y - yPos);//设置y坐标.
                        }
                    }
                }
            }
            catch (Exception dd)
            {
                MessageBox.Show(dd.Message);
            }
        }

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值