2014-03-12 23 views
1

我有興趣創建超輕量級的繪圖元素。這樣我就可以創建數百萬個這樣的對象,而不需要與System.Windows.Forms.Control類關聯。Control的輕量級winform圖形元素替代品

有問題的類將繼承System.ComponentModel.Component類,並有(我猜測)只有構造函數和paint(object sender, PaintEventArgs e)方法。但是,我不知道,System.Windows.Forms.Control類如何執行或簡化實際的屏幕繪圖。

我該如何使用有效的繪圖上下文來複制繪圖/繪圖功能,類似於System.Windows.Forms.Control類?

回答

2

數百萬的控件可能會成爲一個記憶豬,但是您的控件的重量可能很輕。在這種情況下我會做的是創建一個執行繪圖操作(並從System.Windows.Forms.Control繼承)和一個類MyDrawingObject,爲那些數百萬對象的每個實例保留必要的數據的控件。然後,繪圖類將擁有這些MyDrawingObjects的集合(List,Array或其他東西),並且可以隨時繪製它們。

假設您的繪圖對象是具有不同半徑,顏色,位置和重量的球。我的球類會是這樣的:

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的程度。這一切都取決於您的需求和您的應用程序的目標。

+3

一個名爲MyBalls的變量,優雅:) – Max