最近在做一個條碼系統的項目,第一次用dotnetbar控件,,查找資料時看到伍老師一篇文章(鏈接),但是沒有關於加載tab窗口的方法,自己摸索做了一個此類風格出來,並寫了一個通用方法,供大家參考。
風格如下:
一、使用superTabControl控件,設置其屬性,第一個屬性為顯示關閉按鈕,第二個屬性設置鋪滿父控件(如果你在使用ribbon風格的菜單欄一定不要忘記設置,否則ribbon添加自定義按鈕或最小化時可能會被遮擋或留白)
二、在開始添加tab時,我是手動添加tab到superTabControl中,以為點擊tab關閉時只是將此tab隱藏,打開時再顯示就行了。但實際不可行,因為關閉后此tab實際上已經被釋放掉了,無法恢復到原狀態。這里我使用的方法是講功能界面做成單獨子窗體,在點擊某功能時創建Tab,然后將子窗體加載到此Tab中。
1、添加一個window,放好基本控件,設置窗體FormBorderStyle為none隱藏邊框和窗體標題,
2、關鍵方法:設置Tab顯示。
第一個參數為tab名稱,對應功能菜單名稱,
第二個參數為子window的控件Name。
1 private void SetTabShow(string tabName,string sfrmName) { 2 bool isOpen = false; 3 foreach (SuperTabItem item in superTabCtrMain.Tabs) 4 { 5 //已打開 6 if (item.Name == tabName) { 7 superTabCtrMain.SelectedTab = item; 8 isOpen = true; 9 break; 10 } 11 } 12 if (!isOpen) { 13 //反射取得子窗體對象。 14 object obj = Assembly.GetExecutingAssembly().CreateInstance("BarCodeSys.subWindows." + sfrmName, false); 15 //需要強轉 16 Form form = (Form)obj; 17 //設置該子窗體不為頂級窗體,否則不能加入到別的控件中 18 form.TopLevel = false; 19 form.Visible = true; 20 //布滿父控件 21 form.Dock = DockStyle.Fill; 22 //創建一個tab 23 SuperTabItem item = superTabCtrMain.CreateTab(tabName); 24 //設置顯示名和控件名 25 item.Text = tabName; 26 item.Name = tabName; 27 //將子窗體添加到Tab中 28 item.AttachedControl.Controls.Add(form); 29 //選擇該子窗體。 30 superTabCtrMain.SelectedTab = item; 31 } 32 }
三、調用實現