title: How to draw rectangle on picture box at mouse click coordinates
body: <p>I'm trying to create a windows forms application in which, when the user clicks anywhere on a picture box, a rectangle appears at the position where the image was clicked. </p>
  
  <p>However, if I click anywhere on the image, the rectangle will appear at some random position regardless of where I clicked. It can appear either near or far away from the mouse click, and in some cases it never goes beyond the left half of the picture box.</p>
  
  <p>May I have some guidance on how to resolve this issue? Specifically, I want the position where I clicked to be the center of the rectangle.</p>
  
  <p>Thank you!</p>
  
  <p>This is my code for reference:</p>
  
  <pre><code>private void pbImage_Click(object sender, EventArgs e)
      {
          //Note: pbImage is the name of the picture box used here.
          var mouseEventArgs = e as MouseEventArgs;
          int x = mouseEventArgs.Location.X;
          int y = mouseEventArgs.Location.Y;
  
          // We first cast the "Image" property of the pbImage picture box control
          // into a Bitmap object.
          Bitmap pbImageBitmap = (Bitmap)(pbImage.Image);
          // Obtain a Graphics object from the Bitmap object.
          Graphics graphics = Graphics.FromImage((Image)pbImageBitmap);
  
          Pen whitePen = new Pen(Color.White, 1);
          // Show the coordinates of the mouse click on the label, label1.
          label1.Text = "X: " + x + " Y: " + y;
          Rectangle rect = new Rectangle(x, y, 200, 200);
  
          // Draw the rectangle, starting with the given coordinates, on the picture box.
          graphics.DrawRectangle(whitePen, rect);
  
          // Refresh the picture box control in order that
          // our graphics operation can be rendered.
          pbImage.Refresh();
  
          // Calling Dispose() is like calling the destructor of the respective object.
          // Dispose() clears all resources associated with the object, but the object still remains in memory
          // until the system garbage-collects it.
          graphics.Dispose();
      }
  </code></pre>
  
  <p>UPDATE 12.55am, 16/8/2015 - I know why! The SizeMode property of the pictureBox was set to StretchImage. Changed it back to Normal mode and it worked fine. Not exactly sure why this is so, I'll definitely look into it.</p>
  
  <p>To those who have replied, thank you so much for your help! :)</p>