Как удвоить буфер панели в С#?
У меня есть панель, на которой есть рулетка, и мне нужно удвоить буфер панели, чтобы она перестала мерцать. Может ли кто-нибудь помочь мне?
~ Т-Фокс
EDIT:
Да, я пробовал это.
panel1.doublebuffered не существует, только this.doublebuffered. И мне не нужно буферизировать форму, просто панель.
Ответы
Ответ 1
Вам нужно извлечь из панели или PictureBox.
В зависимости от того, как вы выбираете включить буферизацию, есть последствия.
Если вы установите флаг this.DoubleBuffer, тогда вы должны быть в порядке.
Если вы вручную обновите стили, вам необходимо нарисовать форму самостоятельно в WM_PAINT.
Если вы действительно чувствуете амбициозность, вы можете поддерживать и рисовать свой собственный задний буфер в виде растрового изображения.
using System.Windows.Forms;
public class MyDisplay : Panel
{
public MyDisplay()
{
this.DoubleBuffered = true;
// or
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
UpdateStyles();
}
}
Ответ 2
Другой способ сделать это - вызывать элемент doublebuffered, используя метод InvokeMember:
typeof(Panel).InvokeMember("DoubleBuffered", BindingFlags.SetProperty
| BindingFlags.Instance | BindingFlags.NonPublic, null,
panel2, new object[] { true });
Таким образом, вам не нужно создавать подкласс
Ответ 3
У панелей Winform есть свойство DoubleBuffered.
Изменить: я должен был заметить, что он защищен. Другие описали, как подклассифицировать его.:)
Ответ 4
Вы можете сделать публикацию DoubleBuffered
-Property в разделенном классе Panel
:
public class DoubleBufferedPanel : Panel
{
[DefaultValue(true)]
public new bool DoubleBuffered
{
get
{
return base.DoubleBuffered;
}
set
{
base.DoubleBuffered = value;
}
}
}