http://blog.csdn.net/zx13525079024/article/details/6084733

今天在论坛上看到有人问到,如果在点击TRVEVIEW时动态生成tabcontrol的选项卡,并在选项卡中添加窗体,于是写了一个DEMO,供大家参考

demo下载:http://download.csdn.net/source/2920757

  1. public partial class Form5 : Form
  2. {
  3. public Form5()
  4. {
  5. InitializeComponent();
  6. }
  7. private void Form5_Load(object sender, EventArgs e)
  8. {
  9. TreeNode root = new TreeNode("电话缴费");
  10. root.Name = "root";
  11. treeView1.Nodes.Add(root);
  12. TreeNode tnMobile = new TreeNode("中国移动");
  13. tnMobile.Name = "mobile";
  14. root.Nodes.Add(tnMobile);
  15. TreeNode tnUnion = new TreeNode("中国联通");
  16. tnUnion.Name = "union";
  17. root.Nodes.Add(tnUnion);
  18. root.Expand();
  19. }
  20. private TabPage tbMobile = null;
  21. private TabPage tbUnion = null;
  22. private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
  23. {
  24. if (treeView1.SelectedNode.Name=="mobile")
  25. {
  26. if (ErgodicModiForm("tbmobile", tabControl1))
  27. {
  28. tbMobile = new TabPage("中国移动");
  29. tbMobile.Name = "tbmobile";
  30. tabControl1.Controls.Add(tbMobile);
  31. Form6 form = new Form6();
  32. form.TopLevel = false;
  33. form.BackColor = Color.White;
  34. form.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
  35. form.FormBorderStyle = FormBorderStyle.None;
  36. form.Show();
  37. tbMobile.Controls.Add(form);
  38. }
  39. tabControl1.SelectedTab = tbMobile;
  40. }
  41. else if (treeView1.SelectedNode.Name=="union")
  42. {
  43. if (ErgodicModiForm("tbunion", tabControl1))
  44. {
  45. tbUnion = new TabPage("中国联通");
  46. tbUnion.Name = "tbunion";
  47. tabControl1.Controls.Add(tbUnion);
  48. Form2 form = new Form2();
  49. form.TopLevel = false;
  50. form.BackColor = Color.White;
  51. form.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
  52. form.FormBorderStyle = FormBorderStyle.None;
  53. form.Show();
  54. tbUnion.Controls.Add(form);
  55. }
  56. tabControl1.SelectedTab = tbUnion;
  57. }
  58. }
  59. /// </summary>
  60. /// <param name="MainTabControlKey">选项卡的键值</param>
  61. /// <param name="objTabControl">要添加到的TabControl对象</param>
  62. /// <returns></returns>
  63. private Boolean ErgodicModiForm(string MainTabControlKey, TabControl objTabControl)
  64. {
  65. //遍历选项卡判断是否存在该子窗体
  66. foreach (Control con in objTabControl.Controls)
  67. {
  68. TabPage tab = (TabPage)con;
  69. if (tab.Name == MainTabControlKey)
  70. {
  71. return false;//存在
  72. }
  73. }
  74. return true;//不存在
  75. }
  76. }

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动态生成选项卡,并且在选项卡中添加窗体的更多相关文章

  1. c#在panel或groupbox中添加窗体,实现点击不同按钮或combox时panel中窗体切换,在xtratabcontrol中添加窗体

    参考panel添加窗体: http://blog.csdn.net/illegalname/article/details/65444249 http://blog.csdn.net/Eastmoun ...

  2. winform中动态生成多行label,同时添加滚动条

    设计思路大概是这样的,Form内添加一个groupBox,groupBox内添加一个panel,panel的属性AutoScroll=true,在panel内动态添加label. 原始From如下: ...

  3. js动态创建style节点(js文件中添加css)

    ie6 不能 document.createElement('style') 然后append到head标签里.所以就找到这样个好文章 --------------------- 有很多提供动态创建 ...

  4. Android 动态背景的实现以及SurfaceView中添加EditText控件

    首先还是一贯作风,我们先看案例: \ 静态图看不出来效果,如果用过此软件(扎客)的同学们都知道,她的背景会动.怎么样,是不是觉得很时尚,起码比静态的要好(个人观点).其实实现起来并不复杂,这个如果让做 ...

  5. 向Docx4j生成的word文档中添加布局--第二部分

    原文标题:Adding layout to your Docx4j-generated word documents, part 2 原文链接:http://blog.iprofs.nl/2012/1 ...

  6. C# 动态生成word文档 [C#学习笔记3]关于Main(string[ ] args)中args命令行参数 实现DataTables搜索框查询结果高亮显示 二维码神器QRCoder Asp.net MVC 中 CodeFirst 开发模式实例

    C# 动态生成word文档 本文以一个简单的小例子,简述利用C#语言开发word表格相关的知识,仅供学习分享使用,如有不足之处,还请指正. 在工程中引用word的动态库 在项目中,点击项目名称右键-- ...

  7. jQuery EasyUI中DataGird动态生成列的方法

    EasyUI中使用DataGird显示数据列表中,有时需要根据需要显示不同的列,例如,在权限管理中,不同的用户登录后只能查看自己权限范围内的列表字段,这就需要DataGird动态组合列,下面介绍Eas ...

  8. 用js动态生成css代码

    有时候我们需要利用js来动态生成页面上style标签中的css代码,方法很直接,就是直接创建一个style元素,然后设置style元素里面的css代码,最后把它插入到head元素中.但有些兼容性问题我 ...

  9. (转载)PHP 动态生成表格

    (转载)http://hi.baidu.com/shawns/item/c7d51f351c6a0482b711dba6 提要:PHP能够高效地生成HTML代码,其中,动态生成表格是实际应用中经常碰到 ...

随机推荐

  1. html b标签 语法

    html b标签 语法 标签b是什么意思? b的意思是bold,b标签主要用于html中规定粗体文本,该标签内的字符将被设为粗体.B标签所传达的意思只是加粗,没有任何其它的作用. 作用:规定粗体文本. ...

  2. C++ - 操作运算符

    一.操作运算符 操作运算符:在C++中,编译器有能力将数据.对象和操作符共同组成表达式,解释为对全局或成员函数的调用 该全局或成员函数被称为操作符函数,程序员可以通过重定义函数操作符函数,来达到自己想 ...

  3. ant design Radio.Group defaultValue 默认选中没生效

    版本问题 (3.10.7 版本中使用 defaultValue) <div> <Radio.Group defaultValue="a" buttonStyle= ...

  4. (51)LINUX应用编程和网络编程之六Linux高级IO

    3.6.1.非阻塞IO 3.6.1.1.阻塞与非阻塞 阻塞:阻塞具有很多优势(是linux系统的默认设置),单路IO的时候使用阻塞式IO没有降低CPU的性能 补充:阻塞/非阻塞, 它们是程序在等待消息 ...

  5. linux服务器在线测速

    cd /tmpwget https://raw.github.com/sivel/speedtest-cli/master/speedtest.py或者wget https://raw.githubu ...

  6. android界面的滑动切换功能

    左右滑动切换是几乎所有应用中都会用到的功能.在这里将相关资源进行总结 (1)viewflipper结合手势检测进行左右滑动. http://www.cnblogs.com/hanyonglu/arch ...

  7. Struts2漏洞修复总结

    Struts2的S2-016漏洞是之前比较重大的漏洞,也是一些老系统的历史遗留问题 此漏洞影响struts2.0-struts2.3的所有版本,可直接导致服务器被远程控制从而引起数据泄漏,影响巨大 漏 ...

  8. net.sf.json和com.alibaba.fastjson两种json加工类的相关使用方法

    com.alibaba.fastjson Fastjson是一个Java语言编写的高性能功能完善的JSON库.它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Jav ...

  9. Django学习之序列化和信号

    一.序列化 1.serializers 2.json.dumps 二.信号 1.Django内置信号 2.自定义信号 一.序列化 关于Django中的序列化主要应用在将数据库中检索的数据返回给客户端用 ...

  10. gvim安装中文文档

    今天下载了个gvim一直无法安装中文中文文档,以为是版本原因,又下了几个版本,后来发现都不行. 最后发现是文档安装位置不对,需要放到vim/vim47目录下才行 以下是翻墙在官网下的gvim74和vi ...