求围观
C# winform程序中怎样实现tabcontrol控件在切换到下一个tabpage时,前一个tabpage还存在。本来是这样的,但是我在每次显示下一页之前将窗体的透明度设为0,,那么每次切换到下一页之前总要显示桌面,请问怎么让其不显示桌面,直接动态切换(注:因为每一个tabpage切换的时候向tabpage上面动态加载控件,所有会有闪烁,故用了窗体的透明度来解决,切换时tabpage上的控件倒是不闪烁了,但是老是显示桌面,其实这是切换的tabpage已经出现了,只是透明度为0,所以看不到,当透明度达到1时才会出现),请问该怎么解决。
[解决办法]
注:因为每一个tabpage切换的时候向tabpage上面动态加载控件,所有会有闪烁,故用了窗体的透明度来解决
这个问题很好解决啊
要动态生成1000个控件吗?
[解决办法]
把Add换成AddRange
再加上SuspendLayout(); ResumeLayout();之类的语句
效果都比你设置为透明要好
[解决办法]
先显示下一个要显示的tab页然后再给需要隐藏的设为透明
[解决办法]
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上。指定位置。。。保证不闪