我有一个flowLayoutPanel,里面有一些东西..这些项目是我创建的自定义UserControl。当我移动的时候,这些东西会闪烁。
因此,我创建了Custom FLP并将以下代码放入其构造函数中:
this.SetStyle(
ControlStyles.AllPaintingInWmPaint |
ControlStyles.UserPaint |
ControlStyles.DoubleBuffer, true);
但它仍然在闪烁..然后我找到了这段代码,并添加了它:
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000;
return cp;
}
}
闪烁问题解决了..但是这段代码会在滚动面板中导致一些性能问题。它变得很慢,并且有糟糕的用户体验:(
任何人都可以帮助解决这个问题??
发布于 2020-03-31 17:13:47
您也可以尝试此样式:
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();
}
}
https://stackoverflow.com/questions/59812586
复制相似问题