• 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);  
                   }  
               }  
           } 

    ==

    出处:http://blog.csdn.net/w1wqw/article/details/44356439

  • 相关阅读:
    python用于web题里写解密脚本
    改变checkbox和radio的默认样式
    div内元素垂直居中
    icheck.js插件
    glyphicons字形图标
    没有内容的span元素下掉问题
    临界区保护
    信号量的使用&生产者消费者问题
    空闲线程和钩子函数
    线程的时间片轮询调度
  • 原文地址:https://www.cnblogs.com/mq0036/p/6298445.html
Copyright © 2020-2023  润新知