Windows窗体选项卡控件闪烁背景

时间:2015-05-07 12:31:37

标签: c# vb.net tabcontrol windows-forms-designer

我在Windows窗体上有一个面板。根据单击的按钮将表单加载到面板中。加载到面板中的这些表单之一具有选项卡控件。表单的背景是一个图像,每次我在选项卡之间切换时,表单都会闪烁。当我将背景图像设置为无或纯色时,它可以正常工作,因此它必须是图像。有没有办法解决?提前谢谢。

4 个答案:

答案 0 :(得分:0)

图像绘制成本很高,尤其是在表格背景上。我发现帮助这一点的唯一方法是将BackgroundImageLayout设置为None,这有助于减少我开发的应用程序中的闪烁。

您也可以尝试将DoubleBuffered属性设置为true,但我不确定您将获得多少里程数。

问题是当放置在表单上的控件必须重绘时(如更改标签页时),该控件下面的所有内容也必须重绘。这会导致您的表单背景无效并重绘,有时多次因为多个控件上发生失效(它们不批处理)。

答案 1 :(得分:0)

要解决有关转换为PArgb32的后续问题,以下代码可以解决问题:

using System.Drawing;
using System.Drawing.Imaging;

Bitmap originalBmp;
var converted = new Bitmap(originalBmp.Width, originalBmp.Height, PixelFormat.Format32bppPArgb);
using (var g = Graphics.FromImage(converted))
{
    g.DrawImage(0, 0, originalBmp);
}

您仍然需要使用双缓冲控件来减少闪烁,但将图像转换为PArgb32应该会大大加快绘图速度。

答案 2 :(得分:0)

您可以使用无闪烁选项卡面板来解决此问题:

以下是面板控制的示例代码:

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

答案 3 :(得分:-2)

查看DoubleBuffered和/或Image /

TabControl属性

如果将其设置为true,则闪烁可能会停止。