画一个矩形

时间:2016-11-08 06:57:15

标签: c# .net winforms

我对windows form编码非常陌生,我试图制作一个有三个按钮(圆形,矩形和直线)的minipaint,当它得到一个按钮作为输入时,它将绘制面板形状。 我有这个形状类

class shape
{ 
   public Color color { get; set; }
   public int width { get; set; }
   public int startx { get; set; }
   public  int starty { get; set; }
}

它有颜色,宽度和起始位置属性。然后我有这个矩形类,例如:

class rectangle : shape
{
    int length { get; set; }
    int width { get; set; }  
}

从形状类继承共享属性。现在我想在面板中打印一个矩形。我熟悉DrawRectangle方法,我打印了一个矩形如下:

Pen black = new Pen(Color.Black);
Rectangle rect = new Rectangle(20,20,400,200);
private void panel1_Paint(object sender, PaintEventArgs e)
{
    Graphics g = e.Graphics;
    g.DrawRectangle(black, rect);
}

但我不知道如何从class rectangle:shape绘制一个矩形。我也有从点击按钮到矩形分配值的问题。 你能帮帮我吗?

2 个答案:

答案 0 :(得分:1)

我建议您在基类中有一个绘制函数,每个形状都会覆盖。

    class shape
    {
        public Color color { get; set; }
        public int thickness { get; set; }
        public int startx { get; set; }
        public int starty { get; set; }

        public virtual void Draw(Graphics g)
        {
        }
    }

    class rectangle : shape
    {
        public int length { get; set; }
        public int width { get; set; }

        public override void Draw(Graphics g)
        {
            using (Pen pen = new Pen(color))
            {
                g.DrawRectangle(pen, new Rectangle(startx, starty, width, length));
            }
        }
    }

然后可以通过调用.Draw(图形)绘制任何形状。 定义矩形:

        rectangle rectangle = new rectangle();
        rectangle.startx = 20;
        rectangle.starty = 20;
        rectangle.width = 400;
        rectangle.length = 200;

然后在你的OnPaint中(或者你要去的地方):

Graphics g = panel1.CreateGraphics();
rectangle.Draw(g);

这样做的好处是你可以拥有一个List,只需迭代它们,并在你有多个形状后绘制每一个:

Graphics g = panel1.CreateGraphics();
foreach (shape s in shapes)          // Assuming shapes is List<shape>
    s.Draw(g);

答案 1 :(得分:1)

以下代码允许您在PictureBox上拖动和绘制矩形。 转换在MyRectangle中实现。我也使用了稍微不同的属性。

{{1}}

也许可以考虑将PascalCase用于类名。 (形状而不是形状)