Visual Basic PictureBox 面板闪烁

Visual Basic PictureBox Panel Flicker

我正在制作一个简单的游戏(主要部分)由一个面板组成,面板内部有 32 个图片框,每个图片框都有一个背景图像。您单击 "tile",它会翻转显示一张图片。我的问题是当表单加载时,我可以看到它正在绘制。我看到面板 .. 然后清空 PictureBoxes,最后用 BackgroundImages 填充 PictureBoxes。

我已经将表单的 DoubleBuffer 设置为 True,并且还添加了以下内容:

Private Sub UseDoubleBuffer()

    Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or ControlStyles.DoubleBuffer, True)
    Me.UpdateStyles()

End Sub

我在加载表单时调用它。我不确定我还能做什么?我希望它只是 'pop' 到屏幕上。为什么 DoubleBuffer 不工作?我需要手动对面板进行编码吗?我试图避免这种情况,因为拖放到表单中显然更容易,但如果我需要,我会的。

显然我无法 post 截屏,因为我的代表还不够高,但请相信我,它看起来很丑陋,我确实想让它尽可能地圆滑。有什么想法吗?

尝试使图片框不可见 (.visible = false),直到它们全部加载完毕,然后将所有图片框的可见设置为 true。

尝试创建无闪烁的自定义面板控件:

以下是使用此控件的步骤: 1. 将新的 class "NonFlickerPanel" 添加到您的 C# 应用程序。 2. 将自动生成的 class 代码替换为如下所示的 C# 代码。 3. 在您的应用程序中使用 NonFlickerPanel 对象而不是 Panel 对象。

public partial class NonFlickerPanel : Panel
{
   public NonFlickerPanel() : base()
   {
          this.SetStyle(ControlStyles.AllPaintingInWmPaint,
                              ControlStyles.UserPaint 
                              ControlStyles.OptimizedDoubleBuffer, 
                              true);
   }
}