zoukankan      html  css  js  c++  java
  • 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);  
                   }  
               }  
           }

  • 相关阅读:
    LeetCode 121. Best Time to Buy and Sell Stock
    LeetCode 221. Maximal Square
    LeetCode 152. Maximum Product Subarray
    LeetCode 53. Maximum Subarray
    LeetCode 91. Decode Ways
    LeetCode 64. Minimum Path Sum
    LeetCode 264. Ugly Number II
    LeetCode 263. Ugly Number
    LeetCode 50. Pow(x, n)
    LeetCode 279. Perfect Squares
  • 原文地址:https://www.cnblogs.com/Echo529/p/6382468.html
Copyright © 2011-2022 走看看