Vb.net Visual Basic PictureBox面板闪烁

Vb.net Visual Basic PictureBox面板闪烁,vb.net,visual-studio-2013,graphics,panel,flicker,Vb.net,Visual Studio 2013,Graphics,Panel,Flicker,我正在制作一个简单的游戏(主要部分)由一个面板组成,里面有32个图片框,每个图片框都有背景图片。你点击一个“瓷砖”,它会翻转显示一张图片。我的问题是,当窗体加载时,我可以看到它正在绘图。我看到了面板。。然后清空图片框,最后用背景图片填充图片框 我已将表单的DoubleBuffer设置为True,并添加了以下内容: Private Sub UseDoubleBuffer() Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or Control

我正在制作一个简单的游戏(主要部分)由一个面板组成,里面有32个图片框,每个图片框都有背景图片。你点击一个“瓷砖”,它会翻转显示一张图片。我的问题是,当窗体加载时,我可以看到它正在绘图。我看到了面板。。然后清空图片框,最后用背景图片填充图片框

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

Private Sub UseDoubleBuffer()

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

End Sub
当窗体加载时,我会调用它。我不知道我还能做什么?我希望它只是“弹出”到屏幕上。为什么双缓冲区不能工作?我需要手动对面板进行编码吗?我试图避免这种情况,因为拖放到表单中显然更容易,但如果需要,我会的


显然,我不能发布截图,因为我的代表还不够高,但相信我,它看起来很可怕,我确实想让它尽可能光滑。有什么想法吗?

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

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

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

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

我想这里已经回答了这个问题:[如何在Windows窗体中禁用更新窗体][1][1]:您分配给BackgroundImage属性的图像太大,调整其大小以适应小图片框需要的时间太长。所以你看到他们一个接一个地被画出来。创建一个更好的一个与绘画程序,一个适合。如果它仍然需要太长的时间(不应该),那么你可以使用。我没有让所有的Pictureboxes都不可见,而是尝试让面板不可见,并在调用DoubleBuffer()语句后的加载中将.Visible设置为True,这样就行了!