我可以使用下面的方法在窗框上绘制多个形状(窗体)

时间:2014-06-10 04:55:24

标签: .net windows

我正在研究我的MDI类似油漆的项目。 如果我使用

绘制形状
    elementKojiCrtamo.DrawRectangle(new Pen(new SolidBrush(odabranaBoja), Convert.ToInt32(toolStripTextBox2.Text)), rect);

我可以画出我想要的尽可能多的,但是当我最小化儿童形式,或者如果我把另一个儿童形式放在它上面时,它们会被删除。

如果我使用

绘制它们
    Bitmap buffer = new Bitmap(pictureBox1.Width, pictureBox1.Height);
    using (Graphics g = Graphics.FromImage(buffer))
    {
        g.DrawRectangle(Pens.Red, x, y, e.X - x, e.Y - y);
    }
    pictureBox1.BackgroundImage = buffer;

如果孩子被最小化,我可以画出一个没有被删除的。那么是否有一种方法可以使用这样的代码绘制多个代码,或者在子代码最小化后保留图形的其他方法。

这是我的第一个Windows窗体项目之一,所以如果答案很明显是温和的。

2 个答案:

答案 0 :(得分:0)

你遇到的问题是正常的。因为当您在绘图表面上移动某些内容或隐藏表单时,您可以有效地重新绘制它。如果您的绘制事件不知道表面上有某些东西,它将重新绘制默认图像,该图像是控件属性中的平面颜色集或从表单继承。

所以,如果你希望你的绘图留下来,你必须在Paint事件上重新绘制它。为此,您可能需要跟踪表面上已绘制的内容,然后再按顺序执行。

我确信,还有一种方法可以保存表面矩形的内容,然后将其放回去。

此外,在控件方面还有自定义绘图模式。我想,如果你选择那个,你的控件会自动重绘你告诉它画的东西

你应该找到这个有用的http://www.yevol.com/en/vcsharp/applicationdesign/lesson13.htm

答案 1 :(得分:0)

这是正常的,因为你只持有最后一个形状。 将形状保持在数组中(即List<Shapes>),每次添加新形状时都将其添加到列表中 然后在此列表上的OnPaint事件循环中绘制每个形状。