给你的MDI程序加上一个标签栏,方便地切换和关闭子窗体
来源:互联网 发布:迷宫的十字路口 知乎 编辑:程序博客网 时间:2024/04/30 06:58
效果如下图所示,应该说还不错吧,菜单简陋了一点,不过你可以根据自己的需要扩充。
因为能力有限,没能实现给当前的TabPage加一些修饰,不像专业软件那么漂亮,不过还能凑合用^_^
做法如下:
首先创建一个MDI子窗口的基类
然后,在MDI的主窗体中拖上一个TabControl,加入一下代码
最后,在创建MDI窗口对象时,把它放进TabControl就行了
因为能力有限,没能实现给当前的TabPage加一些修饰,不像专业软件那么漂亮,不过还能凑合用^_^
做法如下:
首先创建一个MDI子窗口的基类
using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;namespace ECHaierHR.Common{ /// <summary> /// MDIChild 的摘要说明。 /// </summary> public class MDIChild : System.Windows.Forms.Form { /// <summary> /// 必需的设计器变量。 /// </summary> private System.ComponentModel.Container components = null; private TabControl tabCtrl; private TabPage tabPag; public MDIChild() { // // Windows 窗体设计器支持所必需的 // InitializeComponent(); // // TODO: 在 InitializeComponent 调用后添加任何构造函数代码 // } /// <summary> /// 清理所有正在使用的资源。 /// </summary> protected override void Dispose(bool disposing) { if (disposing) { if (components != null) { components.Dispose(); } } base.Dispose(disposing); } #region Windows 窗体设计器生成的代码 /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { // // MDIChild // this.AutoScaleBaseSize = new System.Drawing.Size(6, 14); this.ClientSize = new System.Drawing.Size(292, 273); this.Name = "MDIChild"; this.Text = "MDIChild"; this.Closing += new System.ComponentModel.CancelEventHandler(this.MDIChild_Closing); this.Activated += new System.EventHandler(this.MDIChild_Activated); } #endregion private void MDIChild_Closing(object sender, System.ComponentModel.CancelEventArgs e) { //Destroy the corresponding Tabpage when closing MDI child form if (this.tabPag != null) this.tabPag.Dispose(); //If no Tabpage left if (this.tabCtrl != null && !tabCtrl.HasChildren) { tabCtrl.Visible = false; } } private void MDIChild_Activated(object sender, System.EventArgs e) { //Activate the corresponding Tabpage tabCtrl.SelectedTab = tabPag; if (!tabCtrl.Visible) { tabCtrl.Visible = true; } } public TabControl TabCtrl { set { this.tabCtrl = value; } } public TabPage TabPag { get { return this.tabPag; } set { this.tabPag = value; } } }}
然后,在MDI的主窗体中拖上一个TabControl,加入一下代码
#region 把MDI窗口与TabControl关联并加入快捷菜单private void tabControl1_SelectedIndexChanged(object sender, System.EventArgs e){ foreach (MDIChild childForm in this.MdiChildren) { //Check for its corresponding MDI child form if (childForm.TabPag.Equals(tabControl1.SelectedTab)) { //Activate the MDI child form childForm.Select(); } }}private void AddMDIChildToTabCtrl(MDIChild frmChild){ frmChild.MdiParent = this; //child Form will now hold a reference value to the tab control frmChild.TabCtrl = tabControl1; //Add a Tabpage and enables it TabPage tp = new TabPage(); tp.Parent = tabControl1; tp.Text = frmChild.Text; tp.Show(); //child Form will now hold a reference value to a tabpage frmChild.TabPag = tp; frmChild.Show();}private void ctxmnuClose_Click(object sender, System.EventArgs e){ if (this.tabControl1.Visible) { MDIChild childForm = (MDIChild) this.ActiveMdiChild; childForm.Close(); }}private void tabControl1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e){ if (e.Button == MouseButtons.Right) { Rectangle rct; for (int i = 0; i < tabControl1.TabPages.Count; i++) { rct = tabControl1.GetTabRect(i); if (rct.Contains(e.X, e.Y)) { //tabControl1.SelectedIndex = i; tabControl1.SelectedTab = tabControl1.TabPages[i]; break; } } }}#endregion
最后,在创建MDI窗口对象时,把它放进TabControl就行了
Employee emp = new Employee();this.AddMDIChildToTabCtrl(emp);
- 给你的MDI程序加上一个标签栏,方便地切换和关闭子窗体
- 给你的MDI程序加上一个标签栏,方便地切换和关闭子窗体
- 给你的MDI程序加上一个标签栏
- 给你的MDI程序加上一个标签栏
- MFC中MDI程序切换子窗体
- 关闭MDI窗体子窗体
- C# 实现MDI子窗体只打开一个(打开新的窗口,关闭其他窗口)
- 屏蔽MDI子窗体的关闭铵钮
- 只允许建立一次子窗体的MDI程序
- MDI的子窗体问题
- Delphi MDI 子窗体的创建和销毁 [zhuan]
- DELPHI中MDI子窗口的关闭 和打开
- MDI 子窗体 最大化 无最大化最小化按钮 和无关闭按钮
- 如何动态地切换MDI子窗口或者在SDI主应用程序窗口显示的视图?
- VS.NET 2005(C#)的C/S程序中MDI子窗体控制其父窗体
- MDI窗体环境下只弹出一个子窗体
- MDI窗体内只显示一个子窗体
- 给你的C程序加上颜色
- AJAX如何与后台交互
- 在vs2005中配置使用log4net
- Apache基于域名的虚拟主机(Windows)
- 图解 Tomcat 体系结构
- 对IN子查询使用绑定变量
- 给你的MDI程序加上一个标签栏,方便地切换和关闭子窗体
- PB中的Describe,Evaluatate,LookUpDisplay小结
- 看不透的天空——旅途中的感觉 by tom.com
- NMS对Flash的支持
- 第四部分 方法4---------------
- DataGridView新特色、常用操作
- www服务器
- APS.net執行流程圖
- VS.net 2005, 没有找到MSVCR80D.dll的完美解决方案