マウスをクリックすると複数の円を作成するプログラムを作成しようとしています。問題は、別の場所をクリックするたびにそれらが消える(削除される)ことです。 私のサークルが保存される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);
}
}
あなたは私の答えを試しましたか? –
私はリストのために行くだろう;ほとんどの場合、最初から最後までそれらを読むでしょう。そしてあなたはそれらを原則として削除しませんか? (あなたはListだけでうまくいく)そして、私たちはa)ユーザ入力とb)画面出力のパフォーマンスについて話しているので、とにかく問題にはならない。間違いは、Peekがポインタに進むと仮定することです。それはしません。 –
TaW
あなたの "brush"変数の 'Dispose()'を 'Draw()'にするか、静的な[Brushes.Red](https://msdn.microsoft.com/library/windows/apps/system.drawing)を使います。 brushes.red).Net Frameworkによって提供されます。 –