需求
在我們現有的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是沒有問題的。