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时,却是好好的,奇怪了,不懂为什么。
public class PanelEx : Panel
{
public PanelEx()
{
this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
this.UpdateStyles();
}
protected override void OnPaint(PaintEventArgs e)
{
// 使用双缓冲
this.DoubleBuffered = true;
// 背景重绘移动到此
if (this.BackgroundImage != null)
{
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
e.Graphics.DrawImage(
this.BackgroundImage,
new System.Drawing.Rectangle(, , this.Width, this.Height),
,
, this.BackgroundImage.Width, this.BackgroundImage.Height, System.Drawing.GraphicsUnit.Pixel);
}
base.OnPaint(e);
//this.BackgroundImage = null;
}
}
WinForm界面设计优化过程的更多相关文章
- NanUI for Winform发布,让Winform界面设计拥有无限可能
如今,尽管WPF.UWP大行其道,大有把Winform打残干废的趋势.但是还是有那么一波顽固不化的老家伙们固守着Winform,其中就包括我. 好吧,既然都说Winform做得软件不如WPF界面美观效 ...
- winform界面设计
http://www.cnblogs.com/wuhuacong/ 这位大师给了我指导方向 http://officeribbon.codeplex.com 提供了ribbon界面的控件 动态web ...
- WinForm界面设计-Button添加背景图去边框
转自:https://www.cnblogs.com/tommy-huang/p/4283538.html 1.既然是添加背景图片 所以这里应该使用 Button.BackgroudImage = & ...
- Winform开发的界面处理优化
在Winform开发中,客户体验是个很好的参考性指标,如果一个功能使用的时候感觉很流畅,说明我们的程序执行效率还不错,但是随着数据的真多,原先可能流程的地方可能会变得比较卡,这时候就需要追本索源,找到 ...
- Winform开发框架主界面设计展示
做了好多年Winform的程序的开发,主窗口的界面设计一般都要求做的更好一些,可以根据不同的系统功能模块进行归类整合,能使客户迅速寻找到相关功能的同时,也能感觉到整体性的美观大方,因此主窗口的界面设计 ...
- 【转】合理的布局,绚丽的样式,谈谈Winform程序的界面设计
从事Winform开发很多年了,由于项目的需要,设计过各种各样的界面效果.一般来说,运用传统的界面控件元素,合理设计布局,能够设计出比较中规中矩的标准界面:利用一些换肤的控件或者部分界面组件,能够设计 ...
- 对WEB前端的几段思考(一)——界面设计和性能优化(整理中)
尽管我并非艺术出生,既没有任何设计基础,又没有较高艺术涵养,也深谙在短时间内创造一定艺术造诣并非易事,但是既然当初选择从事网站前端开发,我的目光不能仅停留在前端代码上.作为一名志向在前端领域发展的人员 ...
- 合理的布局,绚丽的样式,谈谈Winform程序的界面设计
转载,不错的学习文章 阅读后,起初不太明白,试验了几次后明白了dev的强大.从事Winform开发很多年了,由于项目的需要,设计过各种各样的界面效果.一般来说,运用传统的界面控件元素,合理设计布局,能 ...
- 扫雷游戏制作过程(C#描述):第二节、界面设计
前言 这里给出教程原文地址. 该项目已经放在github上托管. 扫雷界面设计 界面的设计,首先需要创建一个菜单栏.具体方法在左边找到工具箱窗口,展开其中的菜单和工具栏,找到MenuStrip选项,双 ...
随机推荐
- (纯干货)最新WEB前端学习路线汇总初学者必看
Web前端好学吗?这是很多web学习者常问的问题,想要学习一门自己从未接触过的领域,事先有些了解并知道要学的内容,对接下来的学习会有事半功倍的效果.在当下来说web前端开发工程师可谓是高福利.高薪水的 ...
- lnmp 系统500 报错
分析点: 1 文件目录权限不足 如果日志缓存目录没有写入权限 chmod -R 775 目录 2 lnmp 一键安装包 查看.user.ini ,其中open_basedir 不要设置到public ...
- Oracle SQL语句之常见优化方法总结--不定更新
1.SQL语句尽量用大写的: 因为oracle总是先解析SQL语句,把小写的字母转换成大写的再执行. 2.WHERE子句中的连接顺序: ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理, ...
- Linux服务器 XAMPP后添加PHP和MYSQL环境变量
编辑/etc/profile文件 在文件末尾添加两行代码 vi /etc/profile CentOS: PATH=$PATH:/opt/lampp/bin export PATH Ubuntu: e ...
- 使用 Nginx 内置 $http_user_agent 来区分( 电脑 pc、手机 mobile、平板 pad )端的内容访问
location / { #pc端内容访问 set $flag "pc"; set $num 1; set $hua "${http_user_agent}"; ...
- java反射之获取所有方法及其注解(包括实现的接口上的注解),获取各种标识符备忘
java反射之获取类或接口上的所有方法及其注解(包括实现的接口上的注解) /** * 获取类或接口上的所有方法及方法上的注解(包括方法实现上的注解以及接口上的注解),最完整的工具类,没有现成的工具类 ...
- gjt常用命令---chalee
Git常用命令 一. git 基本操作流程 1. 从远程分支拉取并创建新的分支 git pull origin [远程分支名]:[本地分支名] // 从远程分支迁出本地分支,并切换到新的本地分支 gi ...
- Overture如何更改音符符尾设置
Overture作为一款专业的五线谱打谱软件,深受每一个音乐爱好者喜爱.在我们使用Overture来进行打谱操作时,往往会遇到下面这种情况:我们一般打上两个八分音符时,软件会自动符尾相连,但当我们连续 ...
- Android中获得网络状况的实现
要得知网络状况就是要用networkinfo类这个类名还是把这个类的意思表达的很清晰的,network是网络,info是状况.判断是否有网用到了这个类的IsAvailable方法,这个方法返回的是这个 ...
- 二.误删除MySQL用户,恢复方法
误删除MySQL用户导致无法进入数据库 一.方法一 1.停止数据库 [root@db02 ~]# /etc/init.d/mysqld stop 2.跳过授权表,跳过网络启动数据库 [root@db0 ...