tabcontrol动态生成选项卡,并且在选项卡中添加窗体
http://blog.csdn.net/zx13525079024/article/details/6084733
今天在论坛上看到有人问到,如果在点击TRVEVIEW时动态生成tabcontrol的选项卡,并在选项卡中添加窗体,于是写了一个DEMO,供大家参考
demo下载:http://download.csdn.net/source/2920757

- public partial class Form5 : Form
- {
- public Form5()
- {
- InitializeComponent();
- }
- private void Form5_Load(object sender, EventArgs e)
- {
- TreeNode root = new TreeNode("电话缴费");
- root.Name = "root";
- treeView1.Nodes.Add(root);
- TreeNode tnMobile = new TreeNode("中国移动");
- tnMobile.Name = "mobile";
- root.Nodes.Add(tnMobile);
- TreeNode tnUnion = new TreeNode("中国联通");
- tnUnion.Name = "union";
- root.Nodes.Add(tnUnion);
- root.Expand();
- }
- private TabPage tbMobile = null;
- private TabPage tbUnion = null;
- private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
- {
- if (treeView1.SelectedNode.Name=="mobile")
- {
- if (ErgodicModiForm("tbmobile", tabControl1))
- {
- tbMobile = new TabPage("中国移动");
- tbMobile.Name = "tbmobile";
- tabControl1.Controls.Add(tbMobile);
- Form6 form = new Form6();
- form.TopLevel = false;
- form.BackColor = Color.White;
- form.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
- form.FormBorderStyle = FormBorderStyle.None;
- form.Show();
- tbMobile.Controls.Add(form);
- }
- tabControl1.SelectedTab = tbMobile;
- }
- else if (treeView1.SelectedNode.Name=="union")
- {
- if (ErgodicModiForm("tbunion", tabControl1))
- {
- tbUnion = new TabPage("中国联通");
- tbUnion.Name = "tbunion";
- tabControl1.Controls.Add(tbUnion);
- Form2 form = new Form2();
- form.TopLevel = false;
- form.BackColor = Color.White;
- form.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
- form.FormBorderStyle = FormBorderStyle.None;
- form.Show();
- tbUnion.Controls.Add(form);
- }
- tabControl1.SelectedTab = tbUnion;
- }
- }
- /// </summary>
- /// <param name="MainTabControlKey">选项卡的键值</param>
- /// <param name="objTabControl">要添加到的TabControl对象</param>
- /// <returns></returns>
- private Boolean ErgodicModiForm(string MainTabControlKey, TabControl objTabControl)
- {
- //遍历选项卡判断是否存在该子窗体
- foreach (Control con in objTabControl.Controls)
- {
- TabPage tab = (TabPage)con;
- if (tab.Name == MainTabControlKey)
- {
- return false;//存在
- }
- }
- return true;//不存在
- }
- }

public partial class Form5 : Form
{
public Form5()
{
InitializeComponent();
}
private void Form5_Load(object sender, EventArgs e)
{
TreeNode root = new TreeNode("电话缴费");
root.Name = "root";
treeView1.Nodes.Add(root);
TreeNode tnMobile = new TreeNode("中国移动");
tnMobile.Name = "mobile";
root.Nodes.Add(tnMobile);
TreeNode tnUnion = new TreeNode("中国联通");
tnUnion.Name = "union";
root.Nodes.Add(tnUnion);
root.Expand();
}
private TabPage tbMobile = null;
private TabPage tbUnion = null;
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
if (treeView1.SelectedNode.Name=="mobile")
{
if (ErgodicModiForm("tbmobile", tabControl1))
{
tbMobile = new TabPage("中国移动");
tbMobile.Name = "tbmobile";
tabControl1.Controls.Add(tbMobile);
Form6 form = new Form6();
form.TopLevel = false;
form.BackColor = Color.White;
form.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
form.FormBorderStyle = FormBorderStyle.None;
form.Show();
tbMobile.Controls.Add(form);
}
tabControl1.SelectedTab = tbMobile;
}
else if (treeView1.SelectedNode.Name=="union")
{
if (ErgodicModiForm("tbunion", tabControl1))
{
tbUnion = new TabPage("中国联通");
tbUnion.Name = "tbunion";
tabControl1.Controls.Add(tbUnion);
Form2 form = new Form2();
form.TopLevel = false;
form.BackColor = Color.White;
form.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
form.FormBorderStyle = FormBorderStyle.None;
form.Show();
tbUnion.Controls.Add(form);
}
tabControl1.SelectedTab = tbUnion;
}
}
/// </summary>
/// <param name="MainTabControlKey">选项卡的键值</param>
/// <param name="objTabControl">要添加到的TabControl对象</param>
/// <returns></returns>
private Boolean ErgodicModiForm(string MainTabControlKey, TabControl objTabControl)
{
//遍历选项卡判断是否存在该子窗体
foreach (Control con in objTabControl.Controls)
{
TabPage tab = (TabPage)con;
if (tab.Name == MainTabControlKey)
{
return false;//存在
}
}
return true;//不存在
}
}
tabcontrol动态生成选项卡,并且在选项卡中添加窗体的更多相关文章
- c#在panel或groupbox中添加窗体,实现点击不同按钮或combox时panel中窗体切换,在xtratabcontrol中添加窗体
参考panel添加窗体: http://blog.csdn.net/illegalname/article/details/65444249 http://blog.csdn.net/Eastmoun ...
- winform中动态生成多行label,同时添加滚动条
设计思路大概是这样的,Form内添加一个groupBox,groupBox内添加一个panel,panel的属性AutoScroll=true,在panel内动态添加label. 原始From如下: ...
- js动态创建style节点(js文件中添加css)
ie6 不能 document.createElement('style') 然后append到head标签里.所以就找到这样个好文章 --------------------- 有很多提供动态创建 ...
- Android 动态背景的实现以及SurfaceView中添加EditText控件
首先还是一贯作风,我们先看案例: \ 静态图看不出来效果,如果用过此软件(扎客)的同学们都知道,她的背景会动.怎么样,是不是觉得很时尚,起码比静态的要好(个人观点).其实实现起来并不复杂,这个如果让做 ...
- 向Docx4j生成的word文档中添加布局--第二部分
原文标题:Adding layout to your Docx4j-generated word documents, part 2 原文链接:http://blog.iprofs.nl/2012/1 ...
- C# 动态生成word文档 [C#学习笔记3]关于Main(string[ ] args)中args命令行参数 实现DataTables搜索框查询结果高亮显示 二维码神器QRCoder Asp.net MVC 中 CodeFirst 开发模式实例
C# 动态生成word文档 本文以一个简单的小例子,简述利用C#语言开发word表格相关的知识,仅供学习分享使用,如有不足之处,还请指正. 在工程中引用word的动态库 在项目中,点击项目名称右键-- ...
- jQuery EasyUI中DataGird动态生成列的方法
EasyUI中使用DataGird显示数据列表中,有时需要根据需要显示不同的列,例如,在权限管理中,不同的用户登录后只能查看自己权限范围内的列表字段,这就需要DataGird动态组合列,下面介绍Eas ...
- 用js动态生成css代码
有时候我们需要利用js来动态生成页面上style标签中的css代码,方法很直接,就是直接创建一个style元素,然后设置style元素里面的css代码,最后把它插入到head元素中.但有些兼容性问题我 ...
- (转载)PHP 动态生成表格
(转载)http://hi.baidu.com/shawns/item/c7d51f351c6a0482b711dba6 提要:PHP能够高效地生成HTML代码,其中,动态生成表格是实际应用中经常碰到 ...
随机推荐
- UVa 129 Krypton Factor (DFS && 回溯)
题意 : 如果一个字符串包含两个相邻的重复子串,则称它是“容易的串”,其他串称为“困难的 串”.例如,BB.ABCDACABCAB.ABCDABCD都是容易的串,而D.DC.ABDAB. CBABCB ...
- BZOJ 1901 洛谷 P2617 ZOJ 2112 Dynamic Rankings
以下时空限制来自zoj Time limit 10000 ms Memory limit 32768 kB OS Linux Source Online Contest of Christopher' ...
- 【Leetcode】最长回文子串
启发 1)做题前一定要读懂题目 在本题中,首先要清楚地定义回文子串的概念,然后才能设计算法查找它. 如中心扩散法,其主要思想在于找到一个回文子串的定义——两侧互为镜像.进一步分为奇数长度和偶数长度进行 ...
- (45)FreeRTOS学习之二
一:架构概述 FreeRTOS是一个相对较小的应用程序.最小化的FreeRTOS内核仅包括3个(.c)文件和少数头文件,总共不到9000行代码,还包括了注释和空行.一个典型的编译后(二进制)代码映像小 ...
- sqli-labs(27)
0X01 先查询闭合 ?id=' 报错 ?id='' 正确 知道是’的闭合语句 0X02那么开始我们的注入之旅 空格过滤了 尝试一下%0a绕过 #也被过滤了 那么用and '1'='1构造闭合 ?i ...
- 测试常用命令之awk篇
awk/gawk 1,内置变量 FILENAME:输入文件名称 FNR:当前数据文件中的数据行数 NF:数据文件中的字段总数 NR:已处理的输入数据行数目 FS:输入数据段分隔符 RS:输入数据行分隔 ...
- PTA编程总结二
7-1 币值转换 (20 分) 输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式.如23108元,转换后变成“贰万叁仟壹百零捌”元.为了简化输出,用小写英文字 ...
- SpringBoot 整合Shiro 一指禅
目标 了解ApacheShiro是什么,能做什么: 通过QuickStart 代码领会 Shiro的关键概念: 能基于SpringBoot 整合Shiro 实现URL安全访问: 掌握基于注解的方法,以 ...
- shims-vue.d.ts 解析
TypeScript的文档看起来比较让人匪夷所思 TS是从2012年就开始的项目,那时ES6的模块化还没有成为继定标准,所以今天来看TS中一些名词让人匪夷所思,其实都是历史遗留问题 比如namespa ...
- vue入门demo:用户管理3
该入门demo是使用组件的方式实现,不涉及向后端发送请求 说明 把用户列表和添加用户拆分为两个组件,用户列表数据在父组件 获取用户列表:用户列表组件获取父组件的用户列表(父组件向子组件传值)1-1 1 ...