日期:2014-05-18 浏览次数:20816 次
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上。指定位置。。。保证不闪