我有兴趣创建一个超轻的绘图元素。这样我就可以在没有与System.Windows.Forms.Control
类关联的开头的情况下创建数百万个这些对象。
有问题的类将继承自System.ComponentModel.Component
类,并且(我猜)只有一个构造函数和一个paint(object sender, PaintEventArgs e)
方法。但是,我不知道System.Windows.Forms.Control
类如何执行或促进实际的屏幕绘制。
如何使用有效的绘图上下文复制绘图/绘图函数,类似于System.Windows.Forms.Control
类?
答案 0 :(得分:2)
数以百万计的控制器将是一种记忆力,但你的控制可能是轻量级的。在这种情况下我要做的是创建一个执行绘图操作的单个控件(并继承自System.Windows.Forms.Control
),并且一个类说MyDrawingObject为那些数百万个对象的每个实例保存必要的数据。然后,绘图类将具有这些MyDrawingObjects的集合(List,Array或其他),并将动态绘制它们。
假设您的绘图对象是具有不同半径,颜色,位置和重量的球。我的Ball课程类似于:
class Ball
{
public float Radius {get; set;}
public int Color {get; set;}
public float Weight {get; set;}
public Point Position {get; set;}
...
}
现在我的控制将是这样的:
class MyDrawingBoard : System.Windows.Forms.Control
{
List<Ball> MyBalls = new List<Ball>();
override void OnPaint(object sender, PaintEventArgs e)
{
foreach(var b in MyBalls)
{
e.Graphics.DrawEllipse()...
}
}
}
您可以通过仅绘制与ClipRectangle
相交的对象来进一步提高性能,甚至可以为不同类型的对象管理多个List
。这一切都取决于您的需求和您的申请目标。