Search code examples
c#zoomingpictureboxtrackbar

Zoom using two forms


I have a multiple forms in my project. Form1 contains a pictureBox that displays a jpeg. In Form2 I have a trackBar that I would like to control the zoom level of the image in Form1. To keep it simple I only need 2 or 3 zoom levels. I've set the pictureBox to public in the Designer view. However, when I try to reference the pictureBox in Form2 it says it doesn't exist. Below is the code I'm using to call Form2 in Form1

Form2 dataWindow = new Form2();
dataWindow.ShowDialog();

So in short the two things I need help with is:

1) Changing the properties of pictureBox1 from a separate form. 2) Creating a simple Zoom Formula.


Solution

  • 1) Pass a form1 reference into form2's constructor:

    Form2 dataWindow = new Form2(this);
    dataWindow.Show();
    

    ...

    private form1 as Form1;
    public Form2(Form1 frm1)
    {
      form1 = frm1;
    }
    

    Then in Form2s TrackBar_Scroll event reference the PictureBox via the private member variable form1: form1.PictureBox1.Property

    2) Magnify your pictures using a PictureBox so that you can zoom with the Mouse Wheel


    The better way is events:

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            var form2 = new Form2();
            form2.TrackBarMoved += new Action<int>(ZoomPictureBox);
            form2.ShowDialog();
            form2.TrackBarMoved -= new Action<int>(ZoomPictureBox);
    
        }
    
        private void ZoomPictureBox(int zoomFactor)
        {
            pictureBox1.Width = 100 * zoomFactor;
            pictureBox1.Height = 100 * zoomFactor;
        }
    }
    
    
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
    
        public event Action<int> TrackBarMoved;
    
        private void trackBar1_Scroll(object sender, EventArgs e)
        {
            TrackBarMoved(trackBar1.Value);
        }
    }