• 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

  • 相关阅读:
    DHCP原理和配置
    汇编学习1--寄存器学习
    关于ZF2中一点感悟,service_manager
    PHP太怪了,in_array() ,strpos,
    MySql中的skip-name-resovle
    好几天没有写随笔了,今天打开了,随便留点什么吧
    今天是第二次登录,随便写点东西
    我的博客开通了.....,以前也开通了博客,但从来都没有写过,从今天起,希望自己能坚持下去,不断的积累自己技术水平
    luogu 1258 小车问题 小学奥数(?)
    luogu 3406 海底高铁 前缀和
  • 原文地址:https://www.cnblogs.com/mq0036/p/6298445.html
Copyright © 2020-2023  润新知