在相同的图形c#上绘制对象

本文关键字:绘制 对象 图形 | 更新日期: 2023-09-27 18:05:55

 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);
                }
            }
        }
    }

我有两个按钮。一个用于绘制矩形,一个用于绘制椭圆。但是当我点击绘制矩形,然后我点击绘制椭圆。它不能在一个图形中工作。我不知道怎么修理。对不起,我的英语不好。

在相同的图形c#上绘制对象

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

如果你想画一个矩形和一个椭圆,那么我建议你声明一个或多个变量来表示矩形,然后声明一个或多个变量来表示椭圆。这将包括一个变量来指示是否要画这个形状,这将是false开始。当你点击矩形按钮时,你会设置所有的矩形字段,当你点击椭圆按钮时,你会设置所有的椭圆字段。

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

无论哪种情况,在将适当的数据放在适当的位置之后,您都可以对想要绘制的控件调用Refresh,或者最好是Invalidate和Update。这将引发Paint事件并调用Paint事件处理程序。在处理程序中,从适当的位置读取数据并进行绘图。