Csharp/C Sharp/2D Graphics/Rectangle
Содержание
Add size and point
<source lang="csharp"> 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); }
}
</source>
Draw Rectangle
<source lang="csharp"> /* 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; } } }
}
</source>
Draw Square
<source lang="csharp"> /* 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()); } }
}
</source>
Simplest code to draw a Rectangle
<source lang="csharp">
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(); } } </source>
Work with Rectangle type
<source lang="csharp"> 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!"); }
}
</source>