在相同的Graphics C#上绘制对象

时间:2014-05-30 03:05:20

标签: c# graphics draw ellipse rect

 private void main_pic_Paint(object sender, PaintEventArgs e)
    {
       g = e.Graphics;
        if (rect_bt_clicked)
        {
            if (_r >= 0)
            {
                for (int j = 0; j <= _r; j++)
                {
                    rect = new Rectangle(
                        RectArray[j].SP.X,
                        RectArray[j].SP.Y,
                        RectArray[j].EP.X - RectArray[j].SP.X,
                        RectArray[j].EP.Y - RectArray[j].SP.Y);
                    Brush b = new SolidBrush(Color.Red);
                    Pen p = new Pen(Color.Blue, 2);
                    g.FillRectangle(b, rect);
                    g.DrawRectangle(p, rect);

                }
            }
        }
        if (ellip_bt_clicked)
        {
            if (_e >= 0)
            {
                for (int j = 0; j <= _e; j++)
                {
                    rect = new Rectangle(
                        EllipArray[j].SP.X,
                        EllipArray[j].SP.Y,
                        EllipArray[j].EP.X - EllipArray[j].SP.X,
                        EllipArray[j].EP.Y - EllipArray[j].SP.Y);
                    Brush b = new SolidBrush(Color.Red);
                    Pen p = new Pen(Color.Blue, 2);
                    g.FillEllipse(b, rect);
                    g.DrawEllipse(p, rect);

                }
            }
        }

    }

我有两个按钮。一个用于绘制矩形,一个用于绘制椭圆。但是当我点击绘制rect。之后我点击绘制椭圆。它不能在一个图形中工作。我不知道如何解决。 抱歉我的英文。

1 个答案:

答案 0 :(得分:1)

您需要在Paint事件处理程序中随时绘制所有内容。您通常要做的是将表示整个绘图的所有数据存储在一个或多个成员变量中,然后在Paint事件处理程序中读取该数据并绘制绘图。

如果你想画一个矩形和一个椭圆,那么我建议你声明一个或多个变量来表示矩形,然后用一个或多个变量来表示椭圆。这将包括一个变量来指示是否要绘制该形状,两者都可以false开始。单击矩形按钮时,将设置所有矩形字段,单击椭圆按钮时,将设置所有椭圆字段。

如果你想绘制多个矩形和多个椭圆,那么我建议你定义一个类来表示它们中的每一个,可能继承了公共功能的公共基类。然后,您将声明两个变量来存储每种类型的集合。单击矩形按钮时,将一种类型的实例添加到矩形集合中,单击椭圆按钮时,将另一种类型的实例添加到椭圆集合中。

在任何一种情况下,在将适当的数据放入适当的位置后,您将调用Refresh,或者最好在要绘制的控件上调用Invalidate和Update。这将引发Paint事件并调用Paint事件处理程序。在处理程序中,您从适当的位置读取数据并执行绘图。