Csharp/C Sharp/2D Graphics/Rectangle
Содержание
Add size and point
using System;
using System.Drawing;
class Class1 {
static void Main(string[] args) {
Point topLeft = new Point(10,10);
Size rectangleSize = new Size(50,50);
Point bottomRight = topLeft + rectangleSize;
Console.WriteLine("topLeft = " + topLeft);
Console.WriteLine("bottomRight = " + bottomRight);
Console.WriteLine("Size = " + rectangleSize);
}
}
Draw Rectangle
/*
GDI+ Programming in C# and VB .NET
by Nick Symmonds
Publisher: Apress
ISBN: 159059035X
*/
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Collections;
using System.ruponentModel;
using System.Windows.Forms;
using System.Data;
namespace AllCornerRect
{
public class AllCornerRect : System.Windows.Forms.Form
{
#region Class Local Variables
RealRect MyRect;
#endregion
private System.ruponentModel.Container components = null;
public AllCornerRect() {
InitializeComponent();
this.SetStyle( ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle( ControlStyles.DoubleBuffer, true);
this.MouseDown += new MouseEventHandler(this.M_down);
this.MouseUp += new MouseEventHandler(this.M_up);
this.MouseMove += new MouseEventHandler(this.M_move);
MyRect = new RealRect();
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
//
// AllCornerRect
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(320, 301);
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "AllCornerRect";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "AllCornerRect";
this.Load += new System.EventHandler(this.AllCornerRect_Load);
}
#endregion
[STAThread]
static void Main()
{
Application.Run(new AllCornerRect());
}
private void AllCornerRect_Load(object sender, System.EventArgs e)
{
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Graphics G = e.Graphics;
G.DrawRectangle(Pens.Red, MyRect.Rect);
}
#region Squeek
private void M_up(object sender, MouseEventArgs e)
{
Invalidate();
}
private void M_down(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Left)
return;
MyRect = new RealRect(e.X, e.Y);
}
private void M_move(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Left)
return;
MyRect.EndX = e.X;
MyRect.EndY = e.Y;
Invalidate();
}
#endregion
}
public class RealRect
{
#region Class Local Variables
private Point mStart;
private Point mEnd;
private Point mRealStart;
private Point mRealEnd;
private Size mRealSize;
private Rectangle mRect;
#endregion
public RealRect(int X, int Y)
{
mStart = Point.Empty;
mEnd = Point.Empty;
mRealStart = Point.Empty;
mRealEnd = Point.Empty;
mRealSize = Size.Empty;
mStart.X = X;
mStart.Y = Y;
mRealStart.X = X;
mRealStart.Y = Y;
mRect = Rectangle.Empty;
}
public RealRect()
{
mStart = Point.Empty;
mEnd = Point.Empty;
mRealStart = Point.Empty;
mRealEnd = Point.Empty;
mRealSize = Size.Empty;
mStart.X = 0;
mStart.Y = 0;
mRealStart.X = 0;
mRealStart.Y = 0;
mRect = Rectangle.Empty;
}
/// <summary>
/// Ending X Value of rectangle
/// </summary>
public int EndX
{
set{ mEnd.X = value; }
}
/// <summary>
/// Ending Y Value of rectangle
/// </summary>
public int EndY
{
set{ mEnd.Y = value; }
}
/// <summary>
/// Get the corrected rectangle
/// </summary>
public Rectangle Rect
{
get
{
MakeReal();
mRect.Location = mRealStart;
mRect.Size = mRealSize;
return mRect;
}
}
private void MakeReal()
{
//Started top left, ended bottom right
if (mEnd.X > mStart.X && mEnd.Y > mStart.Y)
{
mRealStart = mStart;
mRealEnd = mEnd;
mRealSize = new Size(mRealEnd.X-mRealStart.X, mRealEnd.Y-mRealStart.Y);
return;
}
//Started bottom right, ended top left
if (mEnd.X < mStart.X && mEnd.Y < mStart.Y)
{
mRealEnd = mStart;
mRealStart = mEnd;
mRealSize = new Size(mRealEnd.X-mRealStart.X, mRealEnd.Y-mRealStart.Y);
return;
}
//Started top right left, ended bottom left
if (mEnd.X < mStart.X && mEnd.Y > mStart.Y)
{
mRealStart.X = mEnd.X;
mRealStart.Y = mStart.Y;
mRealEnd.X = mStart.X;
mRealEnd.Y = mEnd.Y;
mRealSize = new Size(mRealEnd.X-mRealStart.X, mRealEnd.Y-mRealStart.Y);
return;
}
//Started bottom left, ended top right
if (mEnd.X > mStart.X && mEnd.Y < mStart.Y)
{
mRealStart.X = mStart.X;
mRealStart.Y = mEnd.Y;
mRealEnd.X = mEnd.X;
mRealEnd.Y = mStart.Y;
mRealSize = new Size(mRealEnd.X-mRealStart.X, mRealEnd.Y-mRealStart.Y);
return;
}
}
}
}
Draw Square
/*
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.ruponentModel;
using System.Windows.Forms;
namespace GDI_Basics
{
/// <summary>
/// Summary description for DrawSquare.
/// </summary>
public class DrawSquare : System.Windows.Forms.Form
{
internal System.Windows.Forms.StatusBar StatusBar1;
internal System.Windows.Forms.StatusBarPanel pnlSquares;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ruponentModel.Container components = null;
public DrawSquare()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.StatusBar1 = new System.Windows.Forms.StatusBar();
this.pnlSquares = new System.Windows.Forms.StatusBarPanel();
((System.ruponentModel.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.ruponentModel.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());
}
}
}
Simplest code to draw a Rectangle
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Collections;
using System.ruponentModel;
using System.Windows.Forms;
using System.Data;
public class Form1 : System.Windows.Forms.Form
{
public Form1()
{
InitializeComponent();
}
private void InitializeComponent()
{
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Text = "";
this.Resize += new System.EventHandler(this.Form1_Resize);
this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);
}
static void Main()
{
Application.Run(new Form1());
}
private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Graphics g = e.Graphics;
g.FillRectangle(Brushes.White, this.ClientRectangle);
Pen p = new Pen(Color.Black);
g.DrawRectangle(p, 3, 3, 8, 7);
p.Dispose();
}
private void Form1_Resize(object sender, System.EventArgs e)
{
Invalidate();
}
}
Work with Rectangle type
using System;
using System.Drawing;
class Program {
static void Main(string[] args) {
Rectangle r1 = new Rectangle(0, 0, 100, 100);
Point pt3 = new Point(101, 101);
if (r1.Contains(pt3))
Console.WriteLine("Point is within the rect!");
else
Console.WriteLine("Point is not within the rect!");
// Now place point in rectangle"s area.
pt3.X = 50;
pt3.Y = 30;
if (r1.Contains(pt3))
Console.WriteLine("Point is within the rect!");
else
Console.WriteLine("Point is not within the rect!");
}
}