title: Plotting a point
body: <p>I have code which will draw a graph that scales if the user attempts to resize the form(by dragging the form's corners). The form will get an x and y co-ordinate in a textbox. When a button is pushed, i want to plot the point which they have indicated. However, the Click event contains the parameters Object Sender and EventArgs e. The OnPaint method (which i am overriding in order to draw the graph) has the parameter PaintEventArgs.</p>
  
  <p>Due to this, when the button is clicked i cannot do the following code: </p>
  
  <pre><code>g.DrawString("♫", new Font("Calibri", 12), new SolidBrush(Color.HotPink), (PlotArea.X + (7 - xMin)* PlotArea.Width/(xMax - xMin)), (PlotArea.Bottom - (6 - yMin) * PlotArea.Height / (yMax - yMin)));
  </code></pre>
  
  <p>This is because "g" is of type PaintEventArgs. How do i get around this so that in the onClick method i can plot the co-ordinate? </p>
  
  <p>My code is as follows:</p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.ComponentModel;
  using System.Data;
  using System.Drawing;
  using System.Linq;
  using System.Text;
  using System.Windows.Forms;
  
  namespace PlotIt
  {
      public partial class Form1 : Form
      {
          public static List&lt;TheList&gt; GraphPoints = new List&lt;TheList&gt;();
  
          //Define the drawing area
          private Rectangle PlotArea;
          //Unit defined in world coordinate system:
          private float xMin = 0f;
          private float xMax = 10f;
          private float yMin = 0f;
          private float yMax = 10f;
          //Define the offset in pixel:
          private int offset = 150;
          Graphics g;
  
          Boolean buttonPressed = false; 
          public Form1()
          {
              InitializeComponent();
              this.SetStyle(ControlStyles.ResizeRedraw, true);
              this.BackColor = Color.White;
  
          }
  
          protected override void OnPaint(PaintEventArgs e)
          {
              g = e.Graphics;
  
              //Calculate the location and size of the drawing area
              //within which we want to draw the graphics:
              Rectangle rect = ClientRectangle;
  
              PlotArea = new Rectangle(rect.Location, rect.Size);
              PlotArea.Inflate(-offset, -offset);
  
              g.DrawRectangle(Pens.Black, PlotArea);
  
              Pen aPen = new Pen(Color.Green, 3);
              g.DrawLine(aPen, Point2D(new PointF(5, 0)), Point2D(new PointF(5, 10)));
              g.DrawLine(aPen, Point2D(new PointF(0, 5)), Point2D(new PointF(10, 5)));
  
              aPen.Dispose();
              g.Dispose();
  
  
          }
  
  
  
          private PointF Point2D(PointF ptf)
          {
              PointF aPoint = new PointF();
  
              aPoint.X = PlotArea.X + (ptf.X - xMin) * PlotArea.Width / (xMax - xMin);
  
              aPoint.Y = PlotArea.Bottom - (ptf.Y - yMin) * PlotArea.Height / (yMax - yMin);
  
              return aPoint;
          }
  
  
  
          private void btnPlotGraph_Click(object sender, EventArgs e)
          {
  
  
  
              g.DrawString("♫", new Font("Calibri", 12), new SolidBrush(Color.HotPink),    (PlotArea.X + (7 - xMin)* PlotArea.Width/(xMax - xMin)), (PlotArea.Bottom - (6 - yMin) * PlotArea.Height / (yMax - yMin)));
          }
  
  
  
      }
  
  }
  </code></pre>