日期:2014-05-18 浏览次数:20988 次
        private void button1_Click_1(object sender, EventArgs e)
        {
            this.DoubleBuffered = true;
            this.WindowState = FormWindowState.Maximized;
            FlowLayoutPanel panel = new FlowLayoutPanel();
            panel.Dock = DockStyle.Fill;
            Control[] arrControls = new Control[500];
            for (Int32 i = 0; i < arrControls.Length; i++)
            {
                arrControls[i] = new TextBox(); 
            }
            this.SuspendLayout();
            panel.Controls.AddRange(arrControls);
            this.Controls.Add(panel);
            this.ResumeLayout();
        }
------解决方案--------------------
[DllImport("user32")]
        private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, IntPtr lParam);
        private const int WM_SETREDRAW = 0xB;
SendMessage(MaxPanel.Handle, WM_SETREDRAW, 0, IntPtr.Zero);//关闭重绘
SendMessage(MaxPanel.Handle, WM_SETREDRAW, 1, IntPtr.Zero);//开启重绘
            MaxPanel.Refresh();//强制重绘
------解决方案--------------------
会闪,可能是因为有背景图
------解决方案--------------------
闪的原因是    容器嵌套层次太多
建议直接在form上弄。
别弄太多层panel或groupbox
那写容器都或先加载后再显示背景图片
然后再加载子控件 再加载子控件里的背景图等等
这就是闪的原因
第一可以先在内存里面加载完成。然后重绘。可减少闪烁。----当然不可能完全不闪
第二 可以直接绘制在form上。指定位置。。。保证不闪