最近在做一个条码系统的项目,第一次用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 }
三、调用实现