Здравствуйте! Я только начал разбираться с C#, хочу нарисовать движущийся круг. Написал такие методы:
private void draw()
{
Pen myPen = new Pen(Color.Black);
g.DrawRectangle(myPen, 10, 10, 50, 50);
g.DrawEllipse(myPen, (float)xStart, (float)yStart, 5, 5);
}
private void updateCoords(object obj)
{
if (xStart < 10)
dx = -dx;
if (xStart > 60)
dx = -dx;
if (yStart < 10)
dy = -dy;
if (yStart > 60)
dy = -dy;
xStart = xStart + dx;
yStart = yStart + dy;
draw();
}
private void button1_Click(object sender, EventArgs e)
{
int time = 0;
TimerCallback tc = new TimerCallback(updateCoords);
System.Threading.Timer timer = new System.Threading.Timer(tc, ++time, 0, 100);
}
Когда нажимаю на кнопку, круг начинает перемещаться, но каждый раз, когда он рисуется заново, старые круги не пропадают, т.е. отображается много кругов сразу. Подскажите, пожалуйста, как сделать, чтоб в каждый момент отображался только один круг в текущем положении. Использую Visual Studio 2015.
Добавлено
Graphics g; // определяется в классе, но снаружи методов
public Form1() // есть у меня такой метод ещё
{
InitializeComponent();
g = panel1.CreateGraphics();
}
Как пример вот вам класс, но естественно его необходимо переделать под себя.
using System.Drawing;
using System.Windows.Forms;
public class MyPainter : Control
{
private int _xStart, _yStart, _dx, _dy;
private readonly System.Threading.Timer _timer;
public MyPainter()
{
int time = 0;
_timer = new System.Threading.Timer(UpdateCoords, ++time, 0, 100);
}
~MyPainter()
{
_timer?.Dispose();
}
public void UpdateCoords(object obj)
{
_dx--;
_dy--;
if (_xStart < 10)
_dx = -_dx;
if (_xStart > 60)
_dx = -_dx;
if (_yStart < 10)
_dy = -_dy;
if (_yStart > 60)
_dy = -_dy;
_xStart = _xStart + _dx;
_yStart = _yStart + _dy;
Invalidate();
}
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.DrawRectangle(Pens.White, new Rectangle(0, 0, Size.Width, Size.Height));
e.Graphics.DrawRectangle(Pens.Black, 10, 10, 50, 50);
e.Graphics.DrawEllipse(Pens.Black, new Rectangle(_xStart, _yStart, 40, 40));
}
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости