重量轻的WinForm控件的图形元素替代(Light-weight winform graphic

2019-10-19 13:05发布

我热衷于创造一个绘图元素是重量超轻。 这样我可以不与该关联过头创造数百万这些对象的System.Windows.Forms.Control类。

有关类别将从继承System.ComponentModel.Component类,并有(我猜),只有一个构造函数和一个paint(object sender, PaintEventArgs e)的方法。 不过,我不知道,该怎么System.Windows.Forms.Control类执行或有利于实际屏幕上绘图。

我怎么能复制一个有效的绘图上下文油漆/绘图功能,类似于System.Windows.Forms.Control类?

Answer 1:

数以百万计的控制可能是一个内存猪,但重量轻的控制可能。 我想在这种情况下做的是创建执行绘图操作的单一控制(和继承System.Windows.Forms.Control )和类说MyDrawingObject,保持必要的数据,对于那些那些数百万个对象的每个实例。 然后,绘画班有那些MyDrawingObjects的集合(列表,数组或东西),并会吸引他们的飞行。

假设你的图形对象是具有不同的半径,颜色,位置和重量的球。 我的球类会是这样的:

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针对不同类型的对象秒。 这一切都取决于你的需求和应用程序的目标。



文章来源: Light-weight winform graphic element substitute of Control