This article has been excerpted
from book "Graphics
Programming with GDI+".
Drawing lines and drawing rectangles are probably the most common operations. If
you are drawing more than one line or rectangle using the same colors, your
should use the DrawLine/DrawLines and DrawRectangle/DrawRectangles methods,
respectively. For example, Listing 13.13 draws three rectangles using the same
brush.
FIGURE 13.5: The same result from two different drawing methods
LISTING 13.13: Using DrawRectangle to draw rectangles
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
WindowsFormsApplication1
{
public partial
class Form1 :
Form
{
public Form1()
{
InitializeComponent();
}
private void
Form1_Paint(object sender,
PaintEventArgs e)
{
Graphics g = e.Graphics;
//Create a black pen
Pen blackPen =
new Pen(Color.Black,
2);
//Create a rectangle
float x = 5.0f, y = 5.0f;
float width = 100.0f;
float height = 200.0f;
Rectangle rect =
new Rectangle(20,
20, 80, 40);
//Draw rectangles
g.DrawRectangle(blackPen, x, y, width, height);
g.DrawRectangle(blackPen, 60, 80, 140, 50);
g.DrawRectangle(blackPen, rect);
//dispose of objects
blackPen.Dispose();
}
}
}
FIGURE 13.6: Using DrawRectangle to draw rectangles
Figure 13.6 shows the output from Listing 13.13. Three rectangles have been
drawn.
You can replace the code in Listing 13.13 with Listing 13.14, which uses
DrawRectangles to draw the
same number of rectangles. Now we use an array of
rectangles.
LISTING 13.14: Using DrawRectangles to draw rectangles
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
WindowsFormsApplication1
{
public partial
class Form1 :
Form
{
public Form1()
{
InitializeComponent();
}
private void
Form1_Paint(object sender,
PaintEventArgs e)
{
Graphics g = e.Graphics;
//Create a black pen
Pen backPen =
new Pen(Color.Black,
2);
RectangleF[] rectArray =
{
new
RectangleF( 5.0f, 5.0f, 100.0f, 200.0f),
new
RectangleF( 20.0f, 20.0f, 80.0f, 40.0f),
new
RectangleF( 60.0f, 80.0f, 140.0f, 50.0f),
};
g.DrawRectangle(blackPen, rectArray);
//dispose of objects
blackPen.Dispose();
}
}
}
If we run this code, the output looks exactly like Figure 13.6.
Avoid Using Frequently Called Events
It is always good practice to write minimal code on events that are called
frequently because that code will be executed whenever the event is called. The
Paint event is specifically designed for painting purposes and is called when
redrawing is necessary. It is always advisable to write your painting (or
redrawing) –related code for this event only. Writing code for other events,
such as mouse-move or keyboard events may cause serious problems or may not
invalidate areas as necessary.