I am a novice in programming and i need Your advice, please. I was tasked with writing a programm that will be counting number of items needed according to length of a track. This track we need to draw by ourselves, but I don't want to make this application full screen, so I need a Zooming function and for a life of me I can't get how should i do it. Please help!
And here's the code.
namespace RFIDGovno
{
    public partial class Form1 : Form
    {
        List<Line> lines = new List<Line>();
        List<Dot> dots = new List<Dot>();
        bool isVert;
        Point sPlace;
        Point ePlace;
        bool downed=false;
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
        }
        private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
        {
            Point temp = e.Location;
            if (downed)
            {
                if (!(Math.Abs(e.X - sPlace.X) > Math.Abs(e.Y - sPlace.Y)))
                {
                    temp.X = sPlace.X;
                }
                else
                {
                    temp.Y = sPlace.Y;
                }
                downed = false;
                ePlace = temp;
                dots.Add(new Dot(ePlace));
                lines.Add(new Line(sPlace,ePlace,isVert, isVert ? Math.Abs(sPlace.Y-ePlace.Y) : Math.Abs(sPlace.X - ePlace.X)));
            }else
            {
                if (!dots.Any<Dot>())
                {
                    downed = true;
                    sPlace = e.Location;
                    dots.Add(new Dot(sPlace));
                }
                else if(dots.Where(t => t.fuse).Any<Dot>())
                {
                    downed = true;
                    sPlace = dots.Where(t => t.fuse).First().place;
                }
            }
            drawing(null);
        }
        private void Zooming()
        {
            
        }
        private void drawing(Point? mouse)
        {
            Graphics g = pictureBox1.CreateGraphics();
            Bitmap im = new Bitmap(pictureBox1.Width-1, pictureBox1.Height-1);
            Graphics q = Graphics.FromImage(im);
            q.Clear(Color.White);
            lines.ForEach(line =>
            {
                q.DrawLine(new Pen(Brushes.Black, 2), line.pStart, line.pEnd);
                q.DrawString(line.length.ToString(), new Font("Times New Roman", 12, FontStyle.Bold), Brushes.Black, line.isVert ? line.pStart.X : line.pStart.X + ((line.pEnd.X - line.pStart.X) / 2) - 5, line.isVert ? line.pStart.Y + ((line.pEnd.Y - line.pStart.Y) / 2) - 5 : line.pStart.Y);
            });
            if (downed)
            {
                q.DrawLine(new Pen(Brushes.Black, 2), sPlace, mouse ?? sPlace);
                if ((isVert)&&(mouse.HasValue))
                {
                    q.DrawString(Math.Abs(sPlace.Y-mouse.Value.Y).ToString(), new Font("Times New Roman", 12, FontStyle.Bold), Brushes.Black, sPlace);
                }
                else if ((isVert==false) && (mouse.HasValue))
                {
                    q.DrawString(Math.Abs(sPlace.X - mouse.Value.X).ToString(), new Font("Times New Roman", 12, FontStyle.Bold), Brushes.Black, sPlace);
                }
            }
            dots.ForEach(dot =>
            {   
                q.DrawEllipse(new Pen(Brushes.Black, 2),dot.place.X-1, dot.place.Y - 1, 2, 2);
                if (dot.fuse)
                {
                    q.DrawEllipse(new Pen(Brushes.Red, 2), dot.place.X - 2, dot.place.Y - 2, 4, 4);
                }
            });
            g.DrawImage(im, 1, 1);
            q.Dispose();
            im.Dispose();
        }
        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            Point temp = e.Location;
            if (downed)
            {
                if (!(Math.Abs(e.X - sPlace.X) > Math.Abs(e.Y - sPlace.Y)))
                {
                    temp.X = sPlace.X;
                    isVert = true;
                }
                else
                {
                    temp.Y = sPlace.Y;
                    isVert = false;
                }
            }
            else
            {
                dots.ForEach(t => t.fuse = false);
                List<Dot> tDots = dots.Where(dt => Math.Abs(e.Location.X - dt.place.X) < 20 && Math.Abs(e.Location.Y - dt.place.Y) < 20).ToList();
                if (tDots.Any<Dot>())
                {
                    double min = 0;
                    min = tDots.Min(t => distance(t.place, e.Location));
                    tDots.Where(t => distance(t.place, e.Location) == min).First().fuse = true;
                }
            }
            drawing(temp);
        }
        private double distance(Point p1, Point p2)
        {
            double dist=0;
            dist = (Math.Sqrt(Math.Abs(p1.X-p2.X)+Math.Abs(p1.Y-p2.Y)));
            return dist;
        }
        private void pictureBox1_Click(object sender, EventArgs e)
        {
        }
        private void trackBar1_Scroll(object sender, EventArgs e)
        {
        }
        private void label1_Click(object sender, EventArgs e)
        {
        }
        private void tabPage1_Click(object sender, EventArgs e)
        {
        }
        
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            
            
        }
        private void tabPage2_Click(object sender, EventArgs e)
        {
        }
        private void button1_Click_1(object sender, EventArgs e)
        {
            int between = 0;
            string curr = comboBox1.SelectedItem.ToString();
            if (curr == "Short")
            {
                between = 1250;
            }
            else if (curr == "Medium")
            {
                between = 1875;
            }
            else
            {
                between = 3750;
            }
            double wut = (double.Parse(textBox1.Text) / between * 300 + double.Parse(textBox3.Text) + double.Parse(textBox2.Text) * 2);
            string answer = Convert.ToString(Math.Ceiling(wut));
            label4.Text = answer;
        }
    }
    public class Line
    {
        public Point pEnd;
        public Point pStart;
        public bool isVert;
        public int length;
        public Line(Point pStart, Point pEnd, bool isVert,int length)
        {
            this.pStart = pStart;
            this.pEnd = pEnd;
            this.isVert = isVert;
            this.length = length;
        }
    }
    public class Dot
    {
        public bool fuse;
        public Point place;
        public Dot(Point place)
        {
            this.place = place;
        }
    }
}