Devexpress Winform打开Tab页,防止闪屏的三种方法

一、闪屏是什么吗?
解:两个窗口在做切换或者打开动作的时候,屏幕会出现短暂的闪烁,闪烁一会后,才会正常显示所需要的窗口。

二、为什么会出现闪屏?
解:1.在做切换或者打开窗体时,窗体要进行绘制,如果窗体有大量的控件,前景色和背景色为透明时,会需要大量的时间进行绘制,就会导致窗体的刷新很慢很卡,这就造成了闪屏的出现。

三、防止闪屏的三种方法
解:
1.忽略 WM_ERASEBKGND 背景消息,同时使控件绘制到缓冲区而不是直接绘制到屏幕,这段代码可以减少闪屏。
SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);

2.启用windows样式,在窗体代码中加入这段代码:

 protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.ExStyle |= 0x02000000;
                return cp;
            }
        }

3.启用双缓冲,适用于win7以下系统:


        protected override CreateParams CreateParams
        {
            get
            {

                CreateParams cp = base.CreateParams;

                cp.ExStyle |= 0x02000000;  
                if (this.IsXpOr2003 == true)
                {
                    cp.ExStyle |= 0x00080000;  
                    this.Opacity = 1;
                }

                return cp;

            }

        }  //防止闪烁

        private Boolean IsXpOr2003
        {
            get
            {
                OperatingSystem os = Environment.OSVersion;
                Version vs = os.Version;

                if (os.Platform == PlatformID.Win32NT)
                    if ((vs.Major == 5) && (vs.Minor != 0))
                        return true;
                    else
                        return false;
                else
                    return false;
            }
        }

项目遇到情况:通过Dev的树形控件切换不同窗体会出现闪烁,通过改变窗体打开的顺序,同时在打开窗体的启动位置加上( 代码:SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true))。完美解决闪屏问题。

 private void treeList1_DoubleClick(object sender, EventArgs e)
        {


            TreeListNode curNode = this.treeList1.FocusedNode;
            if (curNode == null) return;
            string name = curNode.GetValue("KeyDisplayName").ToString().Trim();
            string formname = curNode.GetValue("TableName").ToString().Trim();

            if (formname != "")
            { 

                if (name != "")                       {

                    foreach (XtraTabPage page in xtraTabControl1.TabPages)
                    {
                        if (page.Text == name)
                        {
                            xtraTabControl1.SelectedTabPage = page;//显示该页  
                            return;
                        }
                    }

                    XtraTabPage xpage = new XtraTabPage();

                    ObjectHandle obj = Activator.CreateInstance(null, "SalePro." + formname + "");   //需要加上项目名称 SalePro 

                    if (obj != null)
                    {
                        Form frm = (Form)obj.Unwrap();

                        //放在Tab前面,会出现闪烁。
                     //   frm.Visible = true;
                        frm.Dock = DockStyle.Fill;
                        frm.FormBorderStyle = FormBorderStyle.None;
                        frm.TopLevel = false;//加载窗体必要的属性  
                        xpage.Controls.Add(frm);
                        xpage.Text = name;    
                        xtraTabControl1.TabPages.Add(xpage);
                        xtraTabControl1.SelectedTabPage = xpage;
                         //放在Tab后面,防止闪烁,
                        //同时在打开窗体的启动位置加上( 代码:SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true))
                        frm.Visible = true;                     
                    }
                }
            }
        }
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
用官方汉化包汉化DXperience控件详细步骤!! 1.你要先安装某一版本的DXperience控件(如:DXperience-11.2.5.exe)可以在这里http://www.devexpresscn.com/下载。 2.安装DXperience控件到某一目录下。(如:D:\DevExpress 11.2) 3.下载对应的汉包。(如:DXperience-11.2.5.exe的汉化包,名称为:dxKB_A421_DXperience_v11.2_(2012-04-27).zip)可以在http://www.devexpresscn.com/news/DevExpress-news-94.html下载。 4.解压汉包,在解压后的文件夹中找到DevExpress.DLL文件夹,在DevExpress.DLL文件夹中找到zh-CHS文件夹。 5.把zh-CHS文件夹复制到你建立的工程下的Debug文件夹中。(如 D:\Test\汉化Test\汉化Test\bin\Debug) 到这里汉化资源已经到位了。下面是在编程时使用汉化资源。(以C#为例) 6.在编程时,在Main方法中加入System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-CHS");(C#中Main方法在Program.cs文件中) 比较: 加入前: using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; namespace 汉o化?¥Test { static class Program { /// <summary> /// 应?|用??程¨?序¨°的ì?主??入¨?口¨2点ì?。?ê /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } } 加入后: using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; namespace 汉o化?¥Test { static class Program { /// <summary> /// 应?|用??程¨?序¨°的ì?主??入¨?口¨2点ì?。?ê /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-CHS"); Application.Run(new Form1()); } } } 到这汉化已经全部完成。接下来就是托控件了(使用控件)。如果你连托控件都不会,那么……我已被震亡了!! 说明:这个方法汉化不完全。(是官方汉化包的问题)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值