Переопределить OnPaint для Windows.Forms.Control Мерцание?
Я создаю новый элемент управления и перезаписываю событие OnPaint:
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
_ammo = PitControl.Ammo;
var AmmoSize = g.MeasureString(_ammo.ToString(), Properties.Settings.Default.AmmoFont).ToSize();
g.DrawString(_ammo.ToString(), Properties.Settings.Default.AmmoFont, Brushes.WhiteSmoke, Ammo.Location.X - 1, Ammo.Location.Y + Ammo.Height / 2 - AmmoSize.Height / 2 + 1);
Rectangle DrawAmmo = new Rectangle(this.Width - Ammo.Height - _margin, Ammo.Location.Y, Ammo.Height, Ammo.Height);
for (int i = _ammo; i > 0; i--)
if (i % 2 == 0)
g.DrawLine(_ammoPen, Ammo.Location.X + Ammo.Width - i - 1, Ammo.Location.Y + 3, Ammo.Location.X + Ammo.Width - i - 1, Ammo.Location.Y + Ammo.Height - 3);
g.DrawRectangle(Pens.Orange, Ammo);
g.DrawImage(Properties.Resources.ammunition, DrawAmmo.Location.X, DrawAmmo.Location.Y, DrawAmmo.Height, DrawAmmo.Height);
}
Проблема в том, что когда я меняю боеприпасы, все контрольные щелчки.
Это не выглядит хорошо.
Во всяком случае, чтобы сделать линии, которые я рисую на этой линии:
g.DrawLine(_ammoPen, Ammo.Location.X + Ammo.Width - i - 1, Ammo.Location.Y + 3, Ammo.Location.X + Ammo.Width - i - 1, Ammo.Location.Y + Ammo.Height - 3);
Просто исчезают, когда боеприпасы меняются?
1 ответ
Решение
Одна быстрая вещь, которую вы можете проверить.
Для формы, а не для элемента управления, установите DoubleBuffered
собственность на true
,
Это должно устранить мерцание, но Windows.Forms не очень хорошо использовать для игр в целом, так что не ожидайте и отличную частоту кадров.