【问题标题】:Visual Basic PictureBox Panel FlickerVisual Basic PictureBox 面板闪烁
【发布时间】:2015-06-27 20:52:12
【问题描述】:

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

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

Private Sub UseDoubleBuffer()

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

End Sub

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

我显然不能发布屏幕截图,因为我的声望还不够高,但相信我,它看起来很丑陋,我确实想尽可能地让它变得时尚。有什么想法吗?

【问题讨论】:

  • 我认为这里已经回答了这个问题:[How do I disable update a form in Windows Forms][1] [1]: stackoverflow.com/questions/126876/…
  • 您分配给 BackgroundImage 属性的图像太大,调整它的大小以适应小图片框需要太长时间。所以你会看到他们被一张一张地画出来。使用适合的绘画程序创建一个更好的程序。如果仍然需要太长时间(不应该),那么您可以使用this hack

标签: vb.net visual-studio-2013 graphics panel flicker


【解决方案1】:

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

【讨论】:

  • 优秀。我没有让所有的图片框不可见,而是尝试让面板不可见,并在调用 DoubleBuffer() 语句之后在加载中将 .Visible 设置为 True,它可以工作!
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-05-03
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 2011-11-04
    • 2013-05-27
    相关资源
    最近更新 更多