C# 控件的轻量级winform图形元素替代

C# 控件的轻量级winform图形元素替代,c#,winforms,graphics,C#,Winforms,Graphics,我对创建超轻的绘图元素感兴趣。这样我就可以创建数百万个这样的对象,而不需要与System.Windows.Forms.Control类关联的头顶 所讨论的类将继承自System.ComponentModel.Component类,并且(我猜)只有一个构造函数和一个paint(objectsender,PaintEventArgs e)方法。但是,我不知道System.Windows.Forms.Control类如何执行或促进实际的屏幕绘图 如何使用有效的绘图上下文(类似于System.Windo

我对创建超轻的绘图元素感兴趣。这样我就可以创建数百万个这样的对象,而不需要与
System.Windows.Forms.Control
类关联的头顶

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


如何使用有效的绘图上下文(类似于
System.Windows.Forms.Control
类)复制绘制/绘图功能?

无论控件多么轻,数百万个控件都会占用内存。在这种情况下,我要做的是创建一个单独的控件来执行绘图操作(并继承自
System.Windows.Forms.control
)和一个类MyDrawingObject,它为这些数百万对象的每个实例保留必要的数据。然后,drawing类将拥有这些MyDrawingObject的集合(列表、数组等),并将动态地绘制它们

假设图形对象是具有不同半径、颜色、位置和权重的球。我的球类课程是这样的:

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()...
         }
    }
}
现在,我的控制将类似于:

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()...
         }
    }
}
class MyDrawingBoard:System.Windows.Forms.Control
{
List MyBalls=新列表();
覆盖void OnPaint(对象发送器,PaintEventArgs e)
{
foreach(MyBalls中的变量b)
{
e、 Graphics.Dropellipse()。。。
}
}
}

通过仅绘制与
ClipRectangle
相交的对象,甚至可以为不同类型的对象管理多个
列表,可以进一步提高性能。这一切都取决于您的需求和应用程序的目标。

一个名为
MyBalls
,classy:)的变量