title: How to achieve ImageAlign.MiddleCenter in the overriden OnPaint method
body: <p>As the subject line explains it.</p>
  
  <p>I want to achieve the behaviour <strong>ImageAlign.MiddleCenter</strong> in the Image property of a Button 
  control in .NET</p>
  
  <p>i am overriding the Button's OnPaint event. 
  I use <strong>e.Graphics.DrawImage(Image,oDrawRectagle);</strong>
  to paint the image inside the Button control.
  However this always appears on the Lefthand side of the Button.
  Since the oDrawRectagle always returns the 0,0 co-ordinates for the ClientRectangle.</p>
  
  <p>I want the image to be always aligned <strong>ImageAlign.MiddleCenter</strong>. How do i achieve it ?</p>
  
  <p>Thanks</p>
  
  <pre><code>  protected override void  OnPaint(PaintEventArgs e)
              {
                   Graphics g = e.Graphics;
  
                   int iHeight;
                   int iWidth;
  
                   if (Image != null)
                   {
                       //newSize = MaintainAspectRatio(Image, ClientRectangle.Width, ClientRectangle.Height);
                       //iHeight = newSize.Height;
                       //iWidth = newSize.Width;
                       Rectangle ResizedRectangle = MaintainAspectRatio(Image,ClientRectangle);
                       iHeight = ResizedRectangle.Height;
                       iWidth = ResizedRectangle.Width;
  
                   }
                   else
                   {
                       iWidth = ClientRectangle.Width;
                       iHeight = ClientRectangle.Height;
                   }
  
                   g.FillRectangle(new SolidBrush(Color.FromArgb(213, 221, 224)), ClientRectangle);
  
                   // Draw border
                   Color oLeftTopColor = SystemColors.ControlLightLight;
                   Color oRightBottomColor = SystemColors.ActiveCaption;
                   Pen oLeftTopPen = new Pen(oLeftTopColor);
                   Pen oRightBottomPen = new Pen(oRightBottomColor);
                   // top line
                   g.DrawLine(oLeftTopPen, 0, 0, iWidth - 1, 0);
                   //g.DrawLine(new Pen(SystemColors.ControlLight), 1, 1, iWidth-2, 1);
                   // bottom line
                   g.DrawLine(oRightBottomPen, 0, iHeight, iWidth - 1, iHeight);
                   //g.DrawLine(new Pen(SystemColors.ControlDark), 1, iHeight-2, iWidth-2, iHeight-2);
                   // right line
                   g.DrawLine(oRightBottomPen, iWidth, 0, iWidth, iHeight - 1);
                   //g.DrawLine(new Pen(SystemColors.ControlDark), iWidth-2, 1, iWidth-2, iHeight-2);
                   // left line
                   g.DrawLine(oLeftTopPen, 0, 0, 0, iHeight - 1);
                   //g.DrawLine(new Pen(SystemColors.ControlLightLight), 1, 1, 1, iHeight-2);
  
                   // Draw image
                   if (Image != null)
                   {
                       //Rectangle oDrawRectagle = new Rectangle(
                       //   8, 5, iWidth - 20, iHeight - 10);
                       Rectangle oDrawRectagle = new Rectangle(
                          0, 0, iWidth, iHeight);
                       if (Enabled == false)
                       {
                           e.Graphics.DrawImage(Image, oDrawRectagle,
                              0, 0, Image.Width, Image.Height,
                              GraphicsUnit.Pixel);
                       }
                       else
                       {
                           e.Graphics.DrawImage(Image,oDrawRectagle);
  
                       }
                   }
  
                   // Draw text
                   if (Text != null)
                   {
                       int iTextTop = 5;
                       int iTextLeft = 5;
                       int iMaxTextWidth = iWidth - 10;
                       int iMaxTextHeight = iHeight - 10;
                   }
              }
  </code></pre>