码:

private void panel1_Paint(object sender, PaintEventArgs e)
{
    e.Graphics.DrawRectangle(Pens.White,
    e.ClipRectangle.Left,
    e.ClipRectangle.Top,
    e.ClipRectangle.Width - 1,
    e.ClipRectangle.Height - 1);
    base.OnPaint(e);
}


如何避免闪烁。上面是Panel中panel1_Paint事件的Paint方法。谢谢。

最佳答案

默认情况下,某些Windows窗体控件未启用双缓冲。我不确定该面板是否是其中之一,但是尝试启用它也不会有什么坏处。

不幸的是,Control.DoubleBuffered是受保护的,因此除非您从控件继承,否则必须依靠反射将其启用。

Control ctrl;
ctrl.GetType()
    .GetProperty("DoubleBuffered",
                 BindingFlags.Instance | BindingFlags.NonPublic)
    .SetValue(control, true, null);

10-08 06:22