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