在 winform C# 中滚动时闪烁并弄乱 flowLayoutPanel 项



我有一个flowLayoutPanel,其中包含一些项目..这些项目是我创建的自定义用户控件。 当我嘟囔着,这些物品会闪烁。

所以我创建了自定义 FLP 并将这段代码放在它的构造函数中:

this.SetStyle(
ControlStyles.AllPaintingInWmPaint |
ControlStyles.UserPaint |
ControlStyles.DoubleBuffer, true);

但它仍然闪烁..然后我经过一些搜索找到了这段代码并添加了它:

protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000;
return cp;
}
}

闪烁问题已解决..但是此代码会导致滚动面板中出现一些性能问题..它变慢并且UX:(不佳

任何人都可以帮助解决这个问题??

你也可以试试这种风格:

this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);

如果这还不够,您可以使用以下方法手动停止和恢复窗体或控件绘图:

[DllImport("user32.dll", EntryPoint = "SendMessageA", ExactSpelling = true, CharSet = 
CharSet.Ansi, SetLastError = true)]
private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
private const int WM_SETREDRAW = 0xB;
public static void SuspendDrawing(Control target)
{
if (target != null && !target.IsDisposed)
SendMessage(target.Handle, WM_SETREDRAW, 0, 0);
}
public static void ResumeDrawing(Control target, bool redraw)
{
if (target != null && !target.IsDisposed)
{
SendMessage(target.Handle, WM_SETREDRAW, 1, 0);
if (redraw)
target.Refresh();
}
}

最新更新