winform 如何使用TabControl 控件来做winform界面框架?

这样的效果:

首先菜单的窗口展示的承载器为TabControl 控件,这个控件本身包含多页面预览和页面初始化。

如图所示:要实现如下功能。

1. 安装DevComponents.DotNetBar 组件 我这里使用的是:10.9.0.4版本 这个可随意,只要不是特别老的版本就可以了。

2. 添加引用 DevComponents.DotNetBar2   如图:

3. 设计Tablcontrol的展示样式 默认即可。

4. 将要打开窗口创建 对象 放入TablControl控件的ITem中。

5. 如何判断已经打开的窗口显示?

需要循环tableContorl的tab 集合 将已存在的页面设置显示,选中。

直接上源码:

   #region 控制添加窗口
private int index = 0;
private void MenuItem(object sender, EventArgs e)
{
string menuItemTxt = ((DevComponents.DotNetBar.BaseItem)(sender)).Text;
Office2007Form f = new Office2007Form();
switch (menuItemTxt)
{
case "File_ReadWrite":
f = new Frm.UserSet();
break;
case "DataGridExample":
f = new Frm.UserSet();
break;
case "1":
break;
case "2":
break;
case "3":
break;
case "4":
break;
case "5":
break;
default:
break;
}
//for (int i = 0; i < this.tabControl1.Tabs.Count; i++)
//{//已经打开了 就默认选中即可了
// if (tabControl1.Tabs[i].Text == menuItemTxt)
// {
// this.tabControl1.SelectedTab = tabControl1.Tabs[i];
// return;
// }
//}
//f.TopLevel = false;
//f.FormBorderStyle = FormBorderStyle.None;
//f.WindowState = FormWindowState.Maximized;
//TabPage Page = new TabPage();
//Page.Name = "Page" + index.ToString();
//Page.Text = menuItemTxt.ToString();
//Page.TabIndex = index;
//// tabControl1.TabPages[0].Controls.Add(f);
//Page.Controls.Add(f);
//this.tabControl1.Controls.Add(Page); //f.TopLevel = false;
//f.FormBorderStyle = FormBorderStyle.None;
//f.WindowState = FormWindowState.Maximized; //TabItem it = new TabItem(); //it.Text = menuItemTxt.ToString();
//it.Name = "Page" + index.ToString(); //TabPage p = new TabPage(); //p.Container.Add();
//this.tabControl1.Tabs.Add(it); //#region 三种设置某个选项卡为当前选项卡的方法
////this.tabControl1.SelectedIndex = index;
////this.tabControl1.SelectTab("Page" + index.ToString());
//#endregion
//this.tabControl1.SelectedTabIndex = index;
//f.Show();
//index++; AddForm(f); }
private void AddForm(DevComponents.DotNetBar.Office2007Form frm)
{
this.tabControl1.Visible = true;
if (!IsOpenTab(frm.Text))
{
DevComponents.DotNetBar.TabItem tabItem = tabControl1.CreateTab(frm.Text);
DevComponents.DotNetBar.TabControlPanel tcp = new DevComponents.DotNetBar.TabControlPanel();
tabItem.AttachedControl = tcp;
tcp.TabItem = tabItem;
tcp.Dock = DockStyle.Fill;
tcp.Name = frm.Name + "Tab"; frm.TopLevel = false;
frm.Dock = DockStyle.Fill;
frm.FormBorderStyle = FormBorderStyle.None;
frm.Show();
tcp.Controls.Add(frm); tabControl1.Controls.Add(tcp); tabControl1.SelectedTab = tabItem;
}
} /// <summary>
/// 检查是否已打开某个子窗体
///</summary>
/// <param name="tabName"></param>
/// <returns></returns>
private bool IsOpenTab(string tabName)
{
bool isOpened = false;
foreach (DevComponents.DotNetBar.TabItem tab in tabControl1.Tabs)
{
if (tab.Text.Trim() == tabName.Trim())
{
isOpened = true; tabControl1.SelectedTab = tab;
break;
}
}
return isOpened;
}
#endregion

  

Winform 使用DotNetBar 根据菜单加载TabControl的更多相关文章

  1. 雷林鹏分享:jQuery EasyUI 树形菜单 - 树形菜单加载父/子节点

    jQuery EasyUI 树形菜单 - 树形菜单加载父/子节点 通常表示一个树节点的方式就是在每一个节点存储一个 parentid. 这个也被称为邻接列表模型. 直接加载这些数据到树形菜单(Tree ...

  2. AutoCAD菜单加载失败 找不到文件mnc 怎么办

    菜单加载失败,找不到文件 SWFILECONV(mnu/mns/mnc)   找到CAD安装目录下的swfileconv.arx文件,用记事本打开,清空内容,然后保存即可.  

  3. abp web.mvc项目中的菜单加载机制

    abp中的菜单加载机制 在abp中菜单的定义与我们传统写的框架不一样,它是在编写代码的时候配置,而我们一般写的通用权限管理系统中,是后期在后台界面中添加的.这一点有很大不同.abp关于菜单的定义及管理 ...

  4. Winform动态加载TabControl用法

    private void BindTabData() { dtIPD = new DataTable(); //drItem = new DataTable(); //获取[项目大类]列表显示于 Ta ...

  5. ASP.NET Repeater嵌套Repeater实现菜单加载

    在KS系统中要实现从数据库中读取界面权限文件实现菜单.界面的动态加载. 效果图: ASP.NET界面代码 <div id="menu-container"> <a ...

  6. WinForm中使用BackgroundWorker异步加载数据并使用进度条

    在WinForm程序中,有时会因为加载大量数据导致UI界面假死,这种情况对于用户来说是非常不友好的.因此,在加载大量数据的情况下,首先应该将数据加载放在另一线程中进行,这样保证了UI界面的响应:其次可 ...

  7. EasyUI 树形菜单加载父/子节点

    通常表示一个树节点的方式就是在每一个节点存储一个 parentid. 这个也被称为邻接列表模型. 直接加载这些数据到树形菜单(Tree)是不允许的. 但是我们可以在加载树形菜单之前,把它转换为标准标准 ...

  8. DotNetBar 中 SuperGridControl 加载数据、获取数据、设置样式

    1.加载数据 构建列 //加载列 GridColumn gd = new GridColumn(); gd.Name = "第1"; gd.HeaderText = "第 ...

  9. C#开发BIMFACE系列53 WinForm程序中使用CefSharp加载模型图纸1 简单应用

    BIMFACE二次开发系列目录     [已更新最新开发文章,点击查看详细] 在我的博客<C#开发BIMFACE系列52 CS客户端集成BIMFACE应用的技术方案>中介绍了多种集成BIM ...

随机推荐

  1. Robot Framework自动化测试环境部署

    文档版本:v1.0 作者:令狐冲 如有问题请发邮件到:1146009864@qq.com 使用Robot Framework框架(以下简称RF)来做自动化测试. 模块化设计 1.所需环境一览表 软件 ...

  2. 1682: [Usaco2005 Mar]Out of Hay 干草危机

    1682: [Usaco2005 Mar]Out of Hay 干草危机 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 391  Solved: 258[ ...

  3. 【方法】Oracle用户密码含特殊字符时的登陆问题

    [方法]Oracle用户密码含特殊字符时的登陆问题 1.1  BLOG文档结构图 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它 ...

  4. Omi v1.0.2发布 - 正式支持传递javascript表达式

    原文地址:https://github.com/AlloyTeam/omi/ 写在前面 Omi框架可以通过在组件上声明 data-* 把属性传递给子节点. Omi从设计之初,就是往标准的DOM标签的标 ...

  5. go-common-pool设计原理分析

    common-pool: 对于一些对象的频繁创建会带来很大的系统开销,并且需要对对象数量进行控制来降低资源消耗,比如数据库连接,线程等 common-pool采用了缓存思想来解决这个问题,预先把一些对 ...

  6. [译]Selenium Python文档:二、初步开始

    2.1.简单使用 如果已经安装好了Selenium Python,你就可以像下面这样编写Python代码来使用它了: from selenium import webdriver from selen ...

  7. iOSiOS开发之数据存储之NSKeyedArchiver

    1.概述 NSKeyedArchiver归档和plist文件存储不同的是NSKeyedArchiver可以直接保存对象.如果对象是NSString.NSDictionary.NSArray.NSDat ...

  8. 模式识别与机器学习—bagging与boosting

    声明:本文用到的代码均来自于PRTools(http://www.prtools.org)模式识别工具箱,并以matlab软件进行实验. (1)在介绍Bagging和Boosting算法之前,首先要简 ...

  9. phpcms2008常用函数小结

    {$head[title]} 页面标题,用法: <title>{$head[title]}-{$PHPCMS[sitename]}</title> {$PHPCMS[siten ...

  10. 我所理解的javascript中函数的作用域和作用域链

    本文为原创,转载请注明出处: cnzt       文章:cnzt-p 写在前面 一周木有更新了,今天终于攻克了自行车难关,非常开心,特意来一更~ (那些捂嘴偷笑的人我看到你们了快把嘴闭上我会假装没看 ...