C#:减少向Form添加控件时窗口的闪烁或抖动


在 Windows Forms 应用程序中,在 Form 上添加多个控件时,通常会发生短暂的屏幕闪烁或重绘。

要最小化或消除闪烁,可以在添加控件或进行其他UI变更之前,暂时禁用 Form 的重绘,并在添加完所有控件后再启用重绘。

可以通过在 Windows API 中使用 SendMessage 函数和特定的消息来实现,尤其是 WM_SETREDRAW 消息。

WM_SETREDRAW 消息允许您暂时禁用 (wParam 为 0)或启用 (wParam 为 1)指定窗口的更新。

示例代码如下:

public class Form1 : Form
{
        public void OpenForm2()
        {
                Form2 form2 = new Form2();
                form2.AddControlsWithoutFlicker();
                form2.Show();
        }
}

public class Form2 : Form
{
        [DllImport("user32.dll")]
        public static extern int SendMessage(IntPtr hWnd, int wMsg, bool wParam, int lParam);
        private const int WM_SETREDRAW = 11;
        public Form2()
        {           
                // ...
        }

        public void AddControlsWithoutFlicker()
        {
                // 禁用绘图更新
                SendMessage(this.Handle, WM_SETREDRAW, false, 0);
         
                // ...

                // 重新启用绘图更新
                SendMessage(this.Handle, WM_SETREDRAW, true, 0);
                // 重绘表单及其所有子控件
                this.Refresh();
        }
}

原文链接:,转发请注明来源!