C# 如何在paint事件中保留以前的图形?
我正在使用C# 如何在paint事件中保留以前的图形?,c#,winforms,C#,Winforms,我正在使用 e.Graphics.FillEllipse(Brushes.Red, ph1.X,ph1.Y, 20, 20); 在面板1\u Paint事件中绘制椭圆。点ph1值来自textbox\u按键 我还添加了panel1.Invalidate()按键事件,强制重新绘制面板1。它所做的是清除panel1,然后添加新图形 我真正希望它做的是添加新图形,而不清除以前的图形。 有什么方法可以做到这一点吗?最简单的方法是创建对象的有序集合(例如列表),每次调用OnPaint事件时都会重新绘制这些
e.Graphics.FillEllipse(Brushes.Red, ph1.X,ph1.Y, 20, 20);
在面板1\u Paint
事件中绘制椭圆。点ph1
值来自textbox\u按键
我还添加了panel1.Invalidate()文本框中的code>按键事件,强制重新绘制面板1
。它所做的是清除panel1,然后添加新图形
我真正希望它做的是添加新图形,而不清除以前的图形。
有什么方法可以做到这一点吗?最简单的方法是创建对象的有序集合(例如列表),每次调用OnPaint事件时都会重新绘制这些对象
比如:
// Your painting class. Only contains X and Y but could easily be expanded
// to contain color and size info as well as drawing object type.
class MyPaintingObject
{
public int X { get; set; }
public int Y { get; set; }
}
// The class-level collection of painting objects to repaint with each invalidate call
private List<MyPaintingObject> _paintingObjects = new List<MyPaintingObject>();
// The UI which adds a new drawing object and calls invalidate
private void button1_Click(object sender, EventArgs e)
{
// Hardcoded values 10 & 15 - replace with user-entered data
_paintingObjects.Add(new MyPaintingObject{X=10, Y=15});
panel1.Invalidate();
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
// loop through List<> and paint each object
foreach (var mpo in _paintingObjects)
e.Graphics.FillEllipse(Brushes.Red, mpo.X, mpo.Y, 20, 20);
}
//你的绘画课。仅包含X和Y,但可以轻松扩展
//包含颜色和大小信息以及图形对象类型。
类MyPaintingObject
{
公共整数X{get;set;}
公共整数Y{get;set;}
}
//要在每次无效调用时重新绘制的绘制对象的类级集合
私有列表_paintingObjects=新列表();
//添加新图形对象并调用invalidate的UI
私有无效按钮1\u单击(对象发送者,事件参数e)
{
//硬编码值10和15-替换为用户输入的数据
_paintingObjects.Add(新的MyPaintingObject{X=10,Y=15});
1.使无效();
}
私有void panel 1_Paint(对象发送器,PaintEventArgs e)
{
//循环浏览列表并绘制每个对象
foreach(绘画对象中的var mpo)
e、 图形。填充椭圆(画笔。红色,mpo.X,mpo.Y,20,20);
}
你能举个例子吗@易卜拉希罗:好了。当然,您必须根据自己的需要对其进行修改。