/*
User Interfaces in C#: Windows Forms and Custom Controls
by Matthew MacDonald
Publisher: Apress
ISBN: 1590590457
*/
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
namespace GDI_Basics
{
///
/// Summary description for DrawSquare.
///
public class DrawSquare : System.Windows.Forms.Form
{
internal System.Windows.Forms.StatusBar StatusBar1;
internal System.Windows.Forms.StatusBarPanel pnlSquares;
///
/// Required designer variable.
///
private System.ComponentModel.Container components = null;
public DrawSquare()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
}
///
/// Clean up any resources being used.
///
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
this.StatusBar1 = new System.Windows.Forms.StatusBar();
this.pnlSquares = new System.Windows.Forms.StatusBarPanel();
((System.ComponentModel.ISupportInitialize)(this.pnlSquares)).BeginInit();
this.SuspendLayout();
//
// StatusBar1
//
this.StatusBar1.Location = new System.Drawing.Point(0, 244);
this.StatusBar1.Name = "StatusBar1";
this.StatusBar1.Panels.AddRange(new System.Windows.Forms.StatusBarPanel[] {
this.pnlSquares});
this.StatusBar1.ShowPanels = true;
this.StatusBar1.Size = new System.Drawing.Size(292, 22);
this.StatusBar1.SizingGrip = false;
this.StatusBar1.TabIndex = 1;
this.StatusBar1.Text = "statusBar1";
//
// pnlSquares
//
this.pnlSquares.AutoSize = System.Windows.Forms.StatusBarPanelAutoSize.Spring;
this.pnlSquares.Width = 292;
//
// DrawSquare
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 266);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.StatusBar1});
this.Name = "DrawSquare";
this.Text = "DrawSquare";
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.DrawSquare_MouseDown);
this.Paint += new System.Windows.Forms.PaintEventHandler(this.DrawSquare_Paint);
((System.ComponentModel.ISupportInitialize)(this.pnlSquares)).EndInit();
this.ResumeLayout(false);
}
#endregion
// Store the squares that are painted on the form.
ArrayList squares = new ArrayList();
private void DrawSquare_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
// Add a square and update the screen.
Rectangle square = new Rectangle(e.X, e.Y, 20, 20);
squares.Add(square);
this.Invalidate(square);
}
else if (e.Button == MouseButtons.Right)
{
// Search for the clicked square.
int squareNumber = 0;
foreach (Rectangle square in squares)
{
squareNumber++;
if (square.Contains(e.X, e.Y))
{
MessageBox.Show("Point inside square #" +
squareNumber.ToString());
}
}
}
}
private void DrawSquare_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Pen drawingPen = new Pen(Color.Red, 10);
foreach (Rectangle square in squares)
{
e.Graphics.DrawRectangle(drawingPen, square);
}
pnlSquares.Text = " " + squares.Count.ToString() + " squares";
}
[STAThread]
static void Main()
{
Application.Run(new DrawSquare());
}
}
}