在我的Paint程序中绘制矩形时出错 [英] Bug when drawing rectangles in my Paint Program
问题描述
public partial class Form1 : Form
{
Point downPoint , upPoint;
List<Shapes> shapes = new List<Shapes>();
public ShapesEnum shapeType;
public Form1()
{
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
foreach (var s in shapes)
s.Draw(e.Graphics);
}
protected override void OnMouseDown(MouseEventArgs e)
{
downPoint = e.Location;
}
protected override void OnMouseUp(MouseEventArgs e)
{
base.OnMouseUp(e);
upPoint = e.Location;
CreateShape();
this.Invalidate();
}
private void CreateShape()
{
if (shapeType == ShapesEnum.Circle)
{
Rectangle rect = new Rectangle(downPoint.X, downPoint.Y, upPoint.X - downPoint.X, upPoint.Y - downPoint.Y);
Ellipse ellipse = new Ellipse() { rect = rect };
shapes.Add(ellipse);
}
else if (shapeType == ShapesEnum.Rectangle)
{
Rectangle rect = new Rectangle(downPoint.X, downPoint.Y, upPoint.X - downPoint.X, upPoint.Y - downPoint.Y);
Rect rectangle = new Rect() { rect = rect };
shapes.Add(rectangle);
}
else if (shapeType == ShapesEnum.Line)
{
Point pt1 = new Point (upPoint.X, upPoint.Y);
Point pt2 = new Point (downPoint.X, downPoint.Y);
Ln rectangle = new Ln() { PointUp = pt1, PointDown = pt2 };
shapes.Add(rectangle);
}
lblStatus.Text = string.Format("dn:{0} up:{1} ct:{2}", downPoint, upPoint, shapes.Count());
}
private void btnCircle_Click(object sender, EventArgs e)
{
shapeType = ShapesEnum.Circle;
}
private void btnRectangle_Click(object sender, EventArgs e)
{
shapeType = ShapesEnum.Rectangle;
}
private void btnLine_Click(object sender, EventArgs e)
{
shapeType = ShapesEnum.Line;
}
}
这是目前的主要部分我的绘画程序。
This is currently the main part of my paint program.
public enum ShapesEnum { Circle, Rectangle, Line }
abstract class Shapes
{
public Rectangle rect { get; set; }
public Color color { get; set; }
public bool isFilled { get; set; }
public abstract void Draw(Graphics g);
}
class Ellipse : Shapes
{
public override void Draw(Graphics g)
{
g.DrawEllipse(Pens.Black, rect);
}
}
class Rect : Shapes
{
public override void Draw(Graphics g)
{
g.DrawRectangle(Pens.Black, rect);
}
}
class Ln : Shapes
{
public Point PointUp { get; set; }
public Point PointDown { get; set; }
public override void Draw(Graphics g)
{
g.DrawLine(Pens.Black, PointUp, PointDown);
}
}
这是我的类,用于继承形状。根据形状,将调用其中一个类。
This is my class that is used for inheritance on the shapes. Depending on the shape, one of the classes will be called.
绘图椭圆工作正常。绘制线也一样。但是,在绘制矩形方面存在一个错误。如果我把鼠标拖动并从左到右放开,这将有效。但是,如果我转向另一个方向,它在表单上是不可见的,但 shapes.Count()
仍然会添加到形状列表
。
Drawing ovals works fine. Same goes for drawing lines. However, there is a bug when it comes to drawing rectangles. If I put my mouse and drag and let go from left up to bottom right, this will work. However, if I go another direction it is invisible on the form but the shapes.Count()
still adds towards the list of shapes
.
导致此错误的原因是什么?
What caused this bug?
推荐答案
尝试这样的事情是为了让起点和终点正确:
Try something like this in order to have the start and end points the right way:
int x0 = Math.Min(upPoint.X, downPoint.X);
int y0 = Math.Min(upPoint.Y, downPoint.Y);
Point upperLeft = new Point(x0, y0);
int x1 = Math.Max(upPoint.X, downPoint.X);
int y1 = Math.Max(upPoint.Y, downPoint.Y);
Point lowerRight = new Point(x1, y1);
和
Rectangle rect = new Rectangle(x0, y0, x1 - x0, y1 - y0);
这篇关于在我的Paint程序中绘制矩形时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!