У меня есть программа в winforms с меню инструментальной полосы с кнопками: +, -. каждый раз, когда я нажимаю +, он рисует растущий эллипс, и когда я рисую - он исчезает. Теперь мне удалось нарисовать растущий эллипс, но когда я нажимаю +, он рисует новый elipse. Мне нужен новый эллипс для начала внутри предыдущего эллипса, который я рисовал. поэтому, когда я нажимаю 3 раза, например, внутри будет 3 эллипса. , и когда я нажму - последний эллипс, который я нарисовал, исчезнет. У меня есть ограничение на использование draImage(). мой вопрос: как я могу создать новый эллипс внутри предыдущего, когда я снова нажму +? , когда я нажимаю кнопку +, он просто удаляет предыдущие и начинает рисовать новый эллипс. мой код выглядит следующим образом:нарисовать эллипс внутри эллипса с таймером C#
Form.cs:
public partial class TheBalls : Form
{
private Ball yourBall;
public TheBalls()
{
InitializeComponent();
DoubleBuffered = true;
yourBall = new Ball(this);
}
Graphics flagGraphics;
List<Ball> list = new List<Ball> { };
private void plusButton_MouseDown(object sender, MouseEventArgs e)
{
yourBall = new Ball(this);
list.Add(yourBall);
yourBall.Growing();
}
private void minusButton_MouseDown(object sender, MouseEventArgs e)
{
if (list.Count > 0)
{
list[list.Count - 1].clr = Color.Transparent;
list.RemoveAt(list.Count -1);
}
}
private void TheBalls_Paint(object sender, PaintEventArgs e)
{
Bitmap bitmap = new Bitmap(yourBall.Center.X * 2, yourBall.Center.Y * 2);
flagGraphics = Graphics.FromImage(bitmap);
yourBall.Update(flagGraphics);
e.Graphics.DrawImage(bitmap, 0, 0);
}
}
шар класса: (Эллипс)
class Ball
{
private Control canvas;
private Timer t = new Timer();
private int dir = 1;
public Point Center { get; set; }
public Color clr;
public int Radius { get; set; }
public Control Canvas
{
get { return canvas; }
set
{
canvas = value;
if (canvas != null)
{
//canvas.SizeChanged -= Canvas_SizeChanged;
//canvas.SizeChanged += Canvas_SizeChanged;
Center = new Point(canvas.ClientSize.Width/2, canvas.ClientSize.Height/ 2);
}
}
}
private static readonly Random rand = new Random();
public Ball(Control canvas)
{
clr = Color.FromArgb(rand.Next(255), rand.Next(255), rand.Next(255));
if (canvas != null)
{
this.canvas = canvas;
canvas.SizeChanged -= Canvas_SizeChanged;
canvas.SizeChanged += Canvas_SizeChanged;
Center = new Point(canvas.ClientSize.Width/2, canvas.ClientSize.Height/2);
}
t.Interval = 10;
t.Tick += timer_Tick;
}
private void Canvas_SizeChanged(object sender, EventArgs e)
{
Center = new Point(canvas.ClientSize.Width/2, canvas.ClientSize.Height/2);
}
public void Growing()
{
dir = 1;
t.Enabled = true;
}
public void timer_Tick(object sender, EventArgs e)
{
if (canvas == null)
{
//t.Stop();
clr = Color.Transparent;
return;
}
Radius += dir;
if (Radius > Math.Min(canvas.ClientSize.Width, canvas.ClientSize.Height)/2)
{
Radius = Math.Min(canvas.ClientSize.Width, canvas.ClientSize.Height)/2;
clr = Color.Transparent;
}
canvas.Invalidate();
}
public void Update(Graphics g)
{
g.FillEllipse(new SolidBrush(clr), new Rectangle(Center.X - Radius, Center.Y - Radius, Radius * 2, Radius * 2));
}
}
Так что ваш вопрос? –
Как я могу сделать это эллипсом внутри эллипса, когда я нажимаю +? каждый раз, когда я нажимаю «плюс», он рисует новый эллипс вместо нового внутри предыдущего. –
Очень приятно. Я также время от времени занимаюсь программами ... у вас есть вопросы? –