• C#利用tabControl控件实现多窗体嵌入及关闭


    创建一个主窗体(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);  
                   }  
               }  
           }  
  • 相关阅读:
    Makefile目标汇总和变量的高级用法
    make命令详解
    再议HTML Clipboard Format
    编写一个Open Live Writer的VSCode代码插件
    win7安装ps cc 2019切片闪退
    redis cluster 数据迁移
    linux服务器两块网卡路由优先级冲突 Metric值(转)
    电梯怎么测,附常见的测试用例
    vue中watch属性深度监听,监听数组或多维数组下层
    前端JS base64与图片互转
  • 原文地址:https://www.cnblogs.com/gc2013/p/4241985.html
Copyright © 2020-2023  润新知