2017-05-07 11 views
2

マウスをクリックすると複数の円を作成するプログラムを作成しようとしています。問題は、別の場所をクリックするたびにそれらが消える(削除される)ことです。 私のサークルが保存されるEllipseというクラスを作成しました。それから、私はすべてを楕円形のスタックに入れました。 私はさまざまな解決策を見てきましたが、古い楕円は削除されています。 私が間違っていることを知りたい。フォームに複数の円を描く

ここは私のコードです。

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

あなたの "brush"変数の 'Dispose()'を 'Draw()'にするか、静的な[Brushes.Red](https://msdn.microsoft.com/library/windows/apps/system.drawing)を使います。 brushes.red).Net Frameworkによって提供されます。 –

答えて

0

変更この

item.Draw(g, x, y); 

そして "のぞき見" の行を削除するには、この

ellipse.Draw(g, x, y); 

+0

変更内容は変更されましたが、以前のサークルと同じものは表示されませんでした。 –

+0

Invalidate()を使わずに描画することはまったくありません。 –

+0

いいえごめんなさい申し訳ございません –