需求

在我们现有的ERP应用中,他是基于WinForm设计的,在早期的设计中,我们每打开一个作业,就会新建一个窗口,就像这样:

当我们打开很多的作业时,用户要通过Windows的任务栏慢慢找到,当然,如果仅仅这个问题,到还能忍受。关键是用户会打开多个客户端,比如一个客户端登录A公司,另外一个客户端登陆B公司,就算我们在标题上添加公司信息,用户也需要时间反应,使用体验并不好。

解决方案

可能你首先想到MDI窗口,但你知道的,那是年代久远的东西,现在没有多少人愿意看到那个古老的界面风格了。

大多数人希望类似Chrome的风格。

制作这个控件本身不是难点,难点在于如何让以前的旧代码安全的运行?例如旧的代码中总是假设程序是运行在某个WinForm上,比如调用FindForm();

所以我的技巧是:

1、建立一个无边框的窗体(this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None),放一个TabControl;

2、当需要显示一个子窗口时,将他也设计为无边框,然后嵌入到TabPage中,类似这样:

Form2 f2 = new Form2();
f2.Dock = DockStyle.Fill;
f2.TopLevel = false;
TabPage p2 = new TabPage(f2.Text);
p2.Controls.Add(f2);
tabControl1.TabPages.Add(p2);
f2.Show();
tabControl1.SelectTab(p2);

其中f2就是潜入的窗口,这样看起来的效果就类似Chrome了,而且我执行FindForm是没有问题的。

示例代码下载

最新文章

  1. centos6.5安装elasticsearch
  2. z-stack组网过程
  3. WebSQL 查询工具
  4. grunt 基本使用使用(一)。
  5. 127.0.0.1、0.0.0.0和本机IP地址的区别和使用
  6. DCC Software and Graphics System
  7. Linux常用命令回顾
  8. [LeetCode 116 117] - 填充每一个节点的指向右边邻居的指针I & II (Populating Next Right Pointers in Each Node I & II)
  9. Javascript 原型注意事项
  10. BZOJ 2946: [Poi2000]公共串( 后缀自动机 )
  11. C++一些注意点之异常处理
  12. 一个类搞定UIScrollView那些事儿
  13. CentOS-Minimal版本下安装telnet服务和xinetd服务
  14. 【js】箭头函数与普通函数的异同
  15. NodeJS基础(二)
  16. __get__ __set__ __delete__描述符
  17. TensorFlow Saver 保存最佳模型 tf.train.Saver Save Best Model
  18. 安装wordcloud第三方库Unable to find vcvarsall.bat
  19. mkdir failed for img Read-only file system
  20. Going Deeper with Convolutions(Inception v1)笔记

热门文章

  1. Lua 函数参数 & 默认实参
  2. spring源码解析2--容器的基本实现
  3. 安装pip、numpy、sklearn
  4. JavaScript笔记1———js的一些常识
  5. qt手写输入法资料
  6. 【融云分析】 IM 即时通讯之链路保活
  7. Python-----多线程threading用法
  8. IDEA启动项目内存溢出
  9. 【ubuntu】-桌面假死的解决办法
  10. 集成学习:以Bagging、Adaboosting为例