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