日期:2014-05-18  浏览次数:20816 次

求围观
C# winform程序中怎样实现tabcontrol控件在切换到下一个tabpage时,前一个tabpage还存在。本来是这样的,但是我在每次显示下一页之前将窗体的透明度设为0,,那么每次切换到下一页之前总要显示桌面,请问怎么让其不显示桌面,直接动态切换(注:因为每一个tabpage切换的时候向tabpage上面动态加载控件,所有会有闪烁,故用了窗体的透明度来解决,切换时tabpage上的控件倒是不闪烁了,但是老是显示桌面,其实这是切换的tabpage已经出现了,只是透明度为0,所以看不到,当透明度达到1时才会出现),请问该怎么解决。

------解决方案--------------------
注:因为每一个tabpage切换的时候向tabpage上面动态加载控件,所有会有闪烁,故用了窗体的透明度来解决

这个问题很好解决啊
要动态生成1000个控件吗?



------解决方案--------------------
把Add换成AddRange
再加上SuspendLayout(); ResumeLayout();之类的语句
效果都比你设置为透明要好



------解决方案--------------------
先显示下一个要显示的tab页然后再给需要隐藏的设为透明
------解决方案--------------------
C# code
        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();
        }

------解决方案--------------------
探讨

引用:
先显示下一个要显示的tab页然后再给需要隐藏的设为透明

呵呵,你没明白我的意思,关键是现在要显示的tab透明度为1时才能显示啊,所以中间会看到桌面才能显示要显示的tab页,就是动态切换tab页不连续,显示一下桌面才显示要显示的tab页。

------解决方案--------------------
动态生成500个控件
也不算很闪
你的还闪
那就没办法了



------解决方案--------------------
探讨

引用:
动态生成500个控件
也不算很闪
你的还闪
那就没办法了


因为我查询了数据库,动态生成只生成控件,而我从数据库查询出20多个标签,然后赋值就闪,老是先出现蓝色的背景,然后才把控件显示出来。

------解决方案--------------------
闪的话先用系统API禁止该控件重绘
然后等数据加载完了再开启重绘
强制重绘一下
C# code

[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上。指定位置。。。保证不闪