2017-05-07 101 views
2

我正嘗試創建一個程序,用於在單擊鼠標時創建多個圓圈。問題在於,每當我點擊另一個地方時,它們就會消失(移除)。 我創建了一個名爲Ellipse的類,我的圈子被保存。然後我把所有東西放在一個名爲Ellipses的堆棧中。 我看過不同的解決方案,但仍然刪除舊的省略號。 我想知道我在做什麼錯。在窗體上繪製多個圓形

這是我的代碼。

public partial class Form1 : Form 
{ 
    int x,y; 
    Queue<MyEllipce> ellipses = new Queue<MyEllipce>(); 
    MyEllipce ellipse; 

    public Form1() 
    { 
     InitializeComponent(); 
     this.MouseClick += new MouseEventHandler(Form1_MouseClick); 

    } 
    private void Form1_Load(object sender, EventArgs e) 
    { 
    } 
    void Form1_MouseClick(object sender, MouseEventArgs e) 
    { 
     x = e.X; 
     y = e.Y; 
     ellipse = new MyEllipce(x, y); 
     ellipses.Enqueue(ellipse); 
     Invalidate(); 
    } 

    private void btnTaBort_Click(object sender, EventArgs e) 
    { 
    } 

    protected override void OnPaint(PaintEventArgs e) 
    { 
     base.OnPaint(e); 
     foreach (MyEllipce item in ellipses) 
     { 
      Graphics g = e.Graphics; 
      MyEllipce ellipse= ellipses.Peek(); 
      ellipse.Draw(g, x, y); 
     } 
    } 
} 


class MyEllipce 
{ 
    int x = 0; 
    int y = 0; 
    int diameter = 5; 

    //Constructor 
    public MyEllipce(int x, int y) 
    { 
     this.x = x; 
     this.y = y; 
    } 

    public void Draw(Graphics g, int x, int y) 
    { 
     SolidBrush brush = new SolidBrush(Color.Red); 
     g.FillEllipse(brush,x,y,diameter,diameter); 
    } 
} 
+0

你試過我的答案了嗎? –

+0

我會去一個名單;大多數時候你會從頭到尾閱讀它們。而且你不會一般刪除它們,或者你會? (你可以用一個List做一個井)我們正在討論a)用戶輸入和b)屏幕輸出性能根本不是問題。錯誤是假設Peek前進到指針。它沒有。 – TaW

+2

可以在'Draw()'中使用'brush'變量的'Dispose()',或者使用靜態的[Brushes.Red](https://msdn.microsoft.com/library/windows/apps/system.drawing。 brushes.red)由.Net框架爲您提供。 –

回答

0

更改此

ellipse.Draw(g, x, y); 

對此

item.Draw(g, x, y); 

,並刪除 「偷看」 行。

+0

做了更改但仍然顯示前一個圓的相同內容。 –

+0

沒有Invalidate()就根本沒有繪製它。 –

+0

對不起,它的工作原理 –