【问题标题】:Is their a way to stop the picturebox from flickering when being resized?他们是一种阻止图片框在调整大小时闪烁的方法吗?
【发布时间】:2013-01-04 00:29:31
【问题描述】:

我有一张想要包含在我的 vb.net 应用程序中的图像,所以我在 photoshop 中将它切片并将其分成多个图片框,并相应地锚定它们,这样当我的应用程序调整大小时它不会拉伸所有部分图片。这一切都很好,它看起来很棒,而且几乎可以很好地工作..除了在调整表单大小时会导致图片框闪烁的事实。

我知道图片框不是最快的控件,所以我猜它的刷新速度不够快。除了闪烁之外,即使图片框是透明的,它也会在下方显示为白色背景。

我尝试为背景添加 BG 颜色,希望它能在加载时更好地隐藏闪烁,但无济于事。

所以我的第一个问题是他们有什么方法可以防止这种情况发生吗?如果不是,他们的控件是不是我可以使用的更快?

也许有人知道自定义图片框,或者即使您知道更快的控件。基本上任何允许背景图像和透明 BG 颜色的控件都可以工作,只要它更快。

我非常感谢任何帮助。谢谢。 PS:我的应用程序在 VB.net 中,但我也添加了一个 C# 标签,因为我很可能不得不切换控件而不是通过代码修复它。

【问题讨论】:

  • 你的构造函数是什么样的......?你试过设置DoubleBuffered = true
  • 如果您查看屏幕右侧,您会发现之前的问题:stackoverflow.com/questions/64272/…
  • 谢谢。我看了看。我不确定在哪里添加双缓冲布尔值。我尝试创建一个 sub new 并将其放入其中,但它重置了我的表单。

标签: c# .net vb.net visual-studio-2010 gdi+


【解决方案1】:

两种处理方法是:

a) 调整图片框中的图像大小,使其更小,重绘速度更快,或者

b) 使用计时器重绘图像,使其在最后一次调整大小事件后 100 到 350 毫秒后才开始重绘。

【讨论】:

  • 好的,所以我将添加代码以在计时器中重绘,然后在表单调整大小处理程序上启用计时器?然后在完成时禁用?我将如何阻止它自动刷新?我猜我将不得不以某种方式覆盖油漆过程?对不起,如果我完全错了,整个特殊图形对我来说都是新的。
  • 对。在处理程序中禁用计时器。我认为您可以在图片框的绘制事件中阻止它刷新(或在那里启动计时器而不是调整大小事件),但我还没有测试过。
【解决方案2】:

两个避免在表单中闪烁的控件您可以使用以下功能 只需将其复制并粘贴到 form.vb 中的任何位置

Protected Overrides ReadOnly Property CreateParams() As CreateParams
        Get
            Dim cp As CreateParams = MyBase.CreateParams
            cp.ExStyle = cp.ExStyle Or &H2000000
            Return cp
        End Get
    End Property 'CreateParams

只粘贴到只读属性的地方

【讨论】:

  • 天啊,你是怎么做到的? +1!我一直在寻找一种解决方案,以避免 4 个月前在我的面板上闪烁!在这个论坛和其他论坛上询问之后,在阅读之后,在尝试了子类面板之后......你在几行代码中得到了解决方案!真的很棒,谢谢。但你能解释一下这句话是什么意思吗?
  • @ElektroStudios 请参阅 Microsoft Docs 中的此链接以解释 docs.microsoft.com/en-us/windows/desktop/winmsg/…
  • 另外,如果你把它放在 MDI 父窗体中,它也会修复所有子窗体,而不必在每个窗体类中放置 sn-p。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-12
  • 2010-11-22
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多