zoukankan      html  css  js  c++  java
  • WinForm界面设计优化过程

      以在做的项目为例,记录一下界面美化过程中遇到的问题,由于项目是先做出来之后,又请美工进行稍微调整设计界面,所以会又些限制

    1. TabControl的问题----在添加了背景图片后,TabControl的标签不能添加背景图片,背景不可以设置。

      针对这个问题,网上有两种解决方法:参考:https://blog.csdn.net/sinat_29136193/article/details/80652443

      a) 重绘TabControl----设置DrawMode属性为OwnerDrawFixed,然后添加事件DrawItem,但是对于性能方面不知是否影响大。在重绘了标签和背景后,又对Page背景为与总背景一直进行设置,但是,下面的重写控件可以设置为透明度,直接,省去一些麻烦。

           b) 重写方法虽然可以用,在界面Designer.cs中修改this.TabControl=new TabControlEx();调用成功,但是在x64位编译后,不能直接拖控件到界面上,不知是何原因。

        但是重写方法可以启用TControl透明等各种,但是在设置了页面透明后,最后发现页面加载控件比较卡,未设置透明的页面不卡。不知具体原因

    2. GroupBox边框问题----在项目中,原本使用GroupBox进行排版,现在美化界面设置背景图片后,GroupBox又很明显的边框,看起来不太好看。

      解决历程:首先找去边框方法,网上提供方法重写方法OnPaint()

    private void groupBox10_Paint(object sender, PaintEventArgs e)
            {
                e.Graphics.Clear(this.BackColor);           
            }

     测试之后,发现,GroupBox直接连背景图片都变成白色的了,果断放弃;之后采用Panel替换GroupBox,设置背景图片,不存在任何边框问题。

    3. 最主要的问题是在整体都布局设置好之后,运行程序发现卡的要命。网上查找资料总结参考:https://www.cnblogs.com/kest/p/4683012.html。

          CreateParams重载之后,页面是等待所有控件都完全加载好之后,啪的一下全出来,其中有一个等待过程,后面经分析,是TabControl页面设置透明导致等待时间过长。最后决定不再使用TabControl,直接添加按钮跳转页面,也不至于有这么多问题。

    4. 在解决问题过程中,重写Panel控件,将界面中所有Panel换成重写的Panel,代码如下,第一天测的时候,由于控件加载比较慢,所以看到了控件加载的过程,背景图片是加了一层又一层,特别混乱,例如,Label本没有背景图,却显示其他控件的图片作为背景,很乱,所以没有采用这样的改善方法。但是,等到最后,我又重新还是一样的用重写的Panel时,却是好好的,奇怪了,不懂为什么。

     1 public class PanelEx : Panel
     2     {
     3         public PanelEx()
     4         {
     5             this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
     6             this.UpdateStyles();
     7         }
     8         protected override void OnPaint(PaintEventArgs e)
     9         {
    10             // 使用双缓冲  
    11             this.DoubleBuffered = true;
    12             // 背景重绘移动到此  
    13             if (this.BackgroundImage != null)
    14             {
    15                 e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
    16                 e.Graphics.DrawImage(
    17                     this.BackgroundImage,
    18                     new System.Drawing.Rectangle(0, 0, this.Width, this.Height),
    19                     0,
    20                     0, this.BackgroundImage.Width, this.BackgroundImage.Height, System.Drawing.GraphicsUnit.Pixel);
    21             }
    22             base.OnPaint(e);
    23             //this.BackgroundImage = null; 
    24         }
    25     }
  • 相关阅读:
    HDOJ 5347 MZL's chemistry 【打表】
    自定义轮播图插件
    Twitter Bootstrap:前端框架利器
    左边定宽,右边自适应两列布局
    JS 断点调试心得
    关于将多个json对象添加到数组中的测试
    普通选项卡+自动播放功能+向前/向后按钮 原生js
    线程队列、事件以及协程
    GIL锁、进程池与线程池、同步异步
    JoinableQueue类与线程
  • 原文地址:https://www.cnblogs.com/Betty-IT/p/9152782.html
Copyright © 2011-2022 走看看