C# 为什么当我用鼠标拖动pictureBox中的图像时,它会将图像恢复到原始大小?

C# 为什么当我用鼠标拖动pictureBox中的图像时,它会将图像恢复到原始大小?,c#,winforms,C#,Winforms,在我的代码中,我使用鼠标滚轮调整pictureBox中图像的大小 void pictureBox1_MouseWheel(object sender, MouseEventArgs e) { CalculateNewSizeFactor(e.Delta); if (pictureBox1.Image != null) pictureBox1.Image.Dispose(); pictureBox1.Image

在我的代码中,我使用鼠标滚轮调整pictureBox中图像的大小

void pictureBox1_MouseWheel(object sender, MouseEventArgs e)
        {
            CalculateNewSizeFactor(e.Delta);
            if (pictureBox1.Image != null) pictureBox1.Image.Dispose();
            pictureBox1.Image = null;
            pictureBox1.Image = ResizeImage(new Size((int)(img.Width * factor), (int)(img.Height * factor)));
        }

        public Image ResizeImage(Size size)
        {
            return new Bitmap(img, size);
        }

        private void CalculateNewSizeFactor(int delta)
        {
            if (delta > 0 && factor < 2)
            {
                factor *= increment;
            }
            else if (delta < 0 && factor > 0.25)
            {
                factor /= increment;
            }
        }
存在一些问题:

  • 当我在pictureBox1区域内移动鼠标时选中复选框,它会捕获并拖动图像,我希望只有在我左键单击鼠标时,它才会这样做

  • 如果首先使用鼠标滚轮,使图像大小变小或变大,然后在单击图像拖动它(鼠标向下)或离开图像(鼠标向上)后尝试拖动它,则图像会将其大小更改回其椭圆大小。我希望它保持在我拖动它时用鼠标滚轮更改的大小

  • 如何解决这两个问题

  • 当你勾选复选框时,你就可以设置平移模式了——只需去掉那个处理程序——就可以了。因为您在mouseDown处理程序中也设置了平移模式-基于复选框状态

  • 当你们画你们的图片框时,你们正在画img,它(可能)是你们的原始图像。因此,只需将已调整大小的图像保存在某个位置并重新绘制即可

  • private void checkBox1_CheckedChanged(object sender, EventArgs e)
            {
                if (checkBox1.Checked)
                {
                    panning = true;
                }
            }
    
    private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
            {
                if (checkBox1.Checked)
                {
                    panning = true;
                }
                startingPoint = new Point(e.Location.X - movingPoint.X,
                                          e.Location.Y - movingPoint.Y);
            }
    
            private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
            {
                panning = false;
            }
    
            private void pictureBox1_Paint(object sender, PaintEventArgs e)
            {
                if (panning)
                {
                    e.Graphics.Clear(Color.White);
                    e.Graphics.DrawImage(img, movingPoint);
                }
            }