轻量级winform图形元素替代Control

时间:2014-03-12 14:11:51

标签: c# winforms graphics

我有兴趣创建一个超轻的绘图元素。这样我就可以在没有与System.Windows.Forms.Control类关联的开头的情况下创建数百万个这些对象。

有问题的类将继承自System.ComponentModel.Component类,并且(我猜)只有一个构造函数和一个paint(object sender, PaintEventArgs e)方法。但是,我不知道System.Windows.Forms.Control类如何执行或促进实际的屏幕绘制。

如何使用有效的绘图上下文复制绘图/绘图函数,类似于System.Windows.Forms.Control类?

1 个答案:

答案 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。这一切都取决于您的需求和您的申请目标。

相关问题