Я создал приложение на C #, в котором есть пользовательские кнопки. Все они имеют прозрачный фон, поэтому я унаследовал от Control и переопределил CreateParams / OnPaintBackground и добавил функцию InvalidateEx.
Теперь мне нужна сетка, подобная макету (TableLayoutPanel), который также прозрачен. Я снова создал свой собственный элемент управления, переопределил CreateParams / OnPaintBackground и добавил функцию InvalidateEx. На свитке я вижу, что фоны "помнят", что он нарисовал, и поэтому я вижу призраки (если это правильное слово).
Подключение функции InvalidateEx к событию Scroll заставит панель мерцать только при прокрутке.
Есть ли способ убрать это мерцание?
public class GridLayout : TableLayoutPanel
{
public GridLayout()
{
this.Scroll += delegate { this.InvalidateEx(); };
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x20; //Transparent
return cp;
}
}
protected override void OnPaintBackground(PaintEventArgs e)
{
// do nothing
}
protected void InvalidateEx()
{
if (Parent == null)
return;
Rectangle rc = new Rectangle(this.Location, this.Size);
Parent.Invalidate(rc, true);
}
}
Я думал об использовании WPF, но у меня нет опыта в этом, и мне нужно создать его за пару дней -> Winforms.