创建一个主窗体(Formmain)、两个副窗体(Form1,Form2);在主窗体中分别添加一个menuStrip控件、tabControl控件,并在menu控件上添加一个主菜单和两个子菜单

 
继而,选中tabControl控件属性修改 DrawMode = OwnerDrawFixed,再根据如下代码添加即可:
public void Add_TabPage(string str, Form myForm)  
       {  
           if (tabControlCheckHave(this.MainTabControl, str))   
           {   
               return;   
           }  
           else  
           {  
               MainTabControl.TabPages.Add(str);  
               MainTabControl.SelectTab(MainTabControl.TabPages.Count - 1);  
                 
               myForm.FormBorderStyle = FormBorderStyle.None;  
               myForm.Dock = DockStyle.Fill;  
               myForm.TopLevel = false;  
               myForm.Show();  
               myForm.Parent = MainTabControl.SelectedTab;  
           }  
       }  
  
       public bool tabControlCheckHave(System.Windows.Forms.TabControl tab, String tabName)  
       {  
           for (int i = 0; i < tab.TabCount; i++)  
           {  
               if (tab.TabPages[i].Text == tabName)  
               {  
                   tab.SelectedIndex = i;  
                   return true;  
               }  
           }  
           return false;  
       }   
       private void form1ToolStripMenuItem_Click(object sender, EventArgs e)  
       {  
           Form1 f1= new Form1();  
           Add_TabPage("f1中华人民共和国窗体  ", f1);  
       }  
  
       private void form2ToolStripMenuItem_Click(object sender, EventArgs e)  
       {  
           Form2 f2 = new Form2();  
           Add_TabPage("f2朝鲜窗体  ", f2);  
       }  
  
       private void MainTabControl_DrawItem(object sender, DrawItemEventArgs e)  
       {  
           /*如果将 DrawMode 属性设置为 OwnerDrawFixed, 
           则每当 TabControl 需要绘制它的一个选项卡时,它就会引发 DrawItem 事件*/  
           try  
           {  
               this.MainTabControl.TabPages[e.Index].BackColor = Color.LightBlue;  
               Rectangle tabRect = this.MainTabControl.GetTabRect(e.Index);  
               e.Graphics.DrawString(this.MainTabControl.TabPages[e.Index].Text, this.Font, SystemBrushes.ControlText, (float)(tabRect.X + 2), (float)(tabRect.Y + 2));  
               using (Pen pen = new Pen(Color.White))  
               {  
                   tabRect.Offset(tabRect.Width - 15, 2);  
                   tabRect.Width = 15;  
                   tabRect.Height = 15;  
                   e.Graphics.DrawRectangle(pen, tabRect);  
               }  
               Color color = (e.State == DrawItemState.Selected) ? Color.LightBlue : Color.White;  
               using (Brush brush = new SolidBrush(color))  
               {  
                   e.Graphics.FillRectangle(brush, tabRect);  
               }  
               using (Pen pen2 = new Pen(Color.Red))  
               {  
                   Point point = new Point(tabRect.X + 3, tabRect.Y + 3);  
                   Point point2 = new Point((tabRect.X + tabRect.Width) - 3, (tabRect.Y + tabRect.Height) - 3);  
                   e.Graphics.DrawLine(pen2, point, point2);  
                   Point point3 = new Point(tabRect.X + 3, (tabRect.Y + tabRect.Height) - 3);  
                   Point point4 = new Point((tabRect.X + tabRect.Width) - 3, tabRect.Y + 3);  
                   e.Graphics.DrawLine(pen2, point3, point4);  
               }  
               e.Graphics.Dispose();  
           }  
           catch (Exception ex)  
           {  
               MessageBox.Show(ex.Message);  
           }  
       }  
  
       private void MainTabControl_MouseDown(object sender, MouseEventArgs e)  
       {  
           if (e.Button == MouseButtons.Left)  
           {  www.2cto.com
               int x = e.X;  
               int y = e.Y;  
  
               Rectangle tabRect = this.MainTabControl.GetTabRect(this.MainTabControl.SelectedIndex);  
               tabRect.Offset(tabRect.Width - 0x12, 2);  
               tabRect.Width = 15;  
               tabRect.Height = 15;  
               if ((((x > tabRect.X) && (x < tabRect.Right)) && (y > tabRect.Y)) && (y < tabRect.Bottom))  
               {  
                   this.MainTabControl.TabPages.Remove(this.MainTabControl.SelectedTab);  
               }  
           }  
       }  

C#利用tabControl控件实现多窗体嵌入及关闭的更多相关文章

  1. C/S模式开发中如何利用WebBrowser控件制作导航窗体

    原文:C/S模式开发中如何利用WebBrowser控件制作导航窗体 转自: CSDN 相信不少同学们都做过MIS系统的开发,今天这里不讨论B/S模式开发的问题.来谈谈winform开发.用过市面上常见 ...

  2. 在Winform开发框架中,利用DevExpress控件实现数据的快速录入和选择

    在实际的项目开发过程中,有好的控件或者功能模块,我都是想办法尽可能集成到我的WInform开发框架中,这样后面开发项目起来,就可以节省很多研究时间,并能重复使用,非常高效方便.在我很早之前的一篇博客& ...

  3. 利用 SerialPort 控件实现 PC 串口通信

    整理参考自<Visual C#.NET 串口通信及测控应用典型实例>1.3 节 以及 一篇博文:C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子. 硬件部分 如果是两个串 ...

  4. winform利用ImageList控件和ListView控件组合制作图片文件浏览器

    winform利用ImageList控件和ListView控件组合制作图片文件浏览器,见图,比较简单,实现LISTVIEW显示文件夹图片功能. 1.选择文件夹功能代码: folderBrowserDi ...

  5. 隐藏C#的TabControl控件的选项卡TabPage

    在使用TabControl控件时,希望隐藏其中某个选项卡(即TabPage).TabPage类明明提供了一个Hide方法,用在代码中却没有任何效果,甚是奇怪.无奈之余,只好考虑另辟途径.方法一:设置该 ...

  6. TabControl控件的美化

    文件下载:http://files.cnblogs.com/zfanlong1314/TabControlEX.rar 本文转载:http://www.cnblogs.com/lmlblog/arch ...

  7. WPF之TabControl控件用法

    先创建实体基类:NotificationObject(用来被实体类继承) 实现属性更改通知接口: using System; using System.Collections.Generic; usi ...

  8. Visual Studio中的TabControl控件的用法

    今天遇到了一个自己没遇到过的控件TabControl控件,所以找了点关于它的资料 TabControl属性 DisplayRect:只定该控件客户区的一个矩形  HotTrack:设置当鼠标经过页标签 ...

  9. WPF 自定义TabControl控件样式

    一.前言 程序中经常会用到TabControl控件,默认的控件样式很普通.而且样式或功能不一定符合我们的要求.比如:我们需要TabControl的标题能够居中.或平均分布:或者我们希望TabContr ...

随机推荐

  1. BZOJ.2938.[POI2000]病毒(AC自动机)

    题目链接 \(Description\) 给n个模式串,问是否存在长度无限的主串,使得任何一个模式串都没有在主串中出现. \(Solution\) 先建AC自动机. 假设我们有了一个无限长的安全代码, ...

  2. JAVA中的email正则表达式

    说到正则表达式,网上有很多的通用的表达式,可是事实上说来,一般人的都 不愿意去拿来研究,就是拿来就直接用就行了.可是,事实上,可能有些时候,项目中或公司里的实际情况不一样,得要修改一下正则表达式的,根 ...

  3. USBDM Debugger interface for Freescale RS08,HCS08,HCS12,Coldfire and ARM-Kinetis Devices.

    Introduction USBDM is a debugger hardware interface for a range of Freescale microcontrollers. It is ...

  4. [Go] Http包 使用简介

    请求的结构 HTTP 的交互以请求和响应的应答模式.Go 的请求我们早就见过了,handler 函数的第二个参数 http.Requests.其结构为: type Request struct { M ...

  5. [Office Web Apps]实现在线office文档预览

    摘要 在使用office web apps实现office文档在线预览的时候,需要注意的地方. web api web api作为owa在线预览服务回调的接口,这里面核心代码片段如下: using H ...

  6. Excel部署配置DCOM

    对 Excel进行编程,实际上就是通过 .Net Framework去调用 Excel的 COM组件,所有要在 Web环境下调用 COM组件的时候,都需要对其进行相应的配置. 很多朋友都反映在 Win ...

  7. 让DELPHI自带的richedit控件显示图片

    让DELPHI自带的richedit控件显示图片 unit RichEx; { 2005-03-04 LiChengbin Added: Insert bitmap or gif into RichE ...

  8. 通俗易懂地讲解 __block 变量

    __block 变量 一般来说,在block内只能读取在同一个作用域的变数而且没有办法修改在block外定义的任何变量,此时若我们想要这些变数能够在block中被修改,就必须在前面挂上__block的 ...

  9. 【k8s】centos上安装kubernetes,报错Error:docker-ce-cli conflicts with 2:docker-1.13.1-94.gitb2f74b2.el7.centos.x86_64

    使用命令: yum install kubernetes 报错: Error: docker-ce-cli conflicts with :docker--.git07f3374.el7.centos ...

  10. 【IntelliJ IDEA】idea或者JetBrains公司所有编辑器,设置其软件的字体样式

    操作如下: 修改完成后的效果: 可以看到修改以后的ide的效果: