Winform 窗口加载实例(二)-----TabControl
来源:互联网 发布:疯狂的程序员 编辑:程序博客网 时间:2024/06/05 19:53
在WinForm开发的过程中,MDI是一种常见的形式。在MDI主窗体打开的子窗体处于活动状态的只有一个,很多时候我们需要在打开的MDI子窗体中切换。然而.Net的框架并没有提供一种易见的切换方式,当然可以通过“Ctrl+Tab”来切换,但是这种方式是不易见的,并且只能按照打开窗体的顺序来切换。
下面来介绍一种结合了TabCotrol控件的软件设计形式。
这种设计形式要解决三个问题:
(1)TabControl的TabPage要和窗体对应
(2)TabControl的TabPage切换的时候,对应的窗体要激活
(3)窗体的新建或关闭,对应的TabPage要创建或撤销
下面就来一步步的解决这些问题
首先拖一个TabControl控件到MDI主窗口中,设置其DOCK为Bottom或者TOP,根据需要也可以设置到左或右。设置其Height为0。主窗体添加如下代码:
//切换TabPage,将对应的窗体激活
private void tabControl_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.MdiChildren.Length > 0)
{
for (int i = 0; i < this.MdiChildren.Length; i++)
{
if (this.tabControl.SelectedIndex == i)
{
this.MdiChildren[i].Activate();
return;
}
}
}
}
or
//切换TabPage,将对应的窗体激活
private void tabControl_SelectedIndexChanged(object sender, EventArgs e)
{
this.ChangeTabPage();
}
//子窗体切换激活
private void ChangeTabPage()
{
if (this.MdiChildren.Length > 0 && tabControl.SelectedIndex > -1)
{
for (int i = 0; i < this.MdiChildren.Length; i++)
{
if (this.tabControl.SelectedIndex == i)
{
this.MdiChildren[i].WindowState = FormWindowState.Maximized;
this.MdiChildren[i].Visible = true;
this.MdiChildren[i].Activate();
}
else if (this.MdiChildren[i].Visible == true)
{
this.MdiChildren[i].Visible = false;
}
}
}
}
//增加TabPage,将对应的窗体激活
private void tabControl_ControlAdded(object sender, ControlEventArgs e)
{
if (this.tabControl.SelectedIndex == 0)
this.ChangeTabPage();
}
//关闭TabPage,将对应的窗体关闭
private void tabControl_ControlRemoved(object sender, ControlEventArgs e)
{
//if (this.tabControl.SelectedIndex == 0)
//this.ChangeTabPage();
}
//窗体关闭的时候,撤销对应的TabPage
public void RemoveTabPage(TabPage tb)
{
this.MultiPageControl.TabPages.Remove(tb);
if (this.tabControl.TabPages.Count == 0)
{
this.TabControlSize = new Size(this.TabControlSize.Width, 0);
}
}
//窗体创建的时候,创建对应的TabPage
public void AddTabPage(TabPage tb)
{
if (this.tabControl.TabPages.Count == 0)
{
this.TabControlSize = new Size(this.TabControlSize.Width, 20);
}
this.MultiPageControl.TabPages.Add(tb);
this.MultiPageControl.SelectedTab = tb;
}
//获取TabControl控件,以便子窗体调用(只读)
public TabControl MultiPageControl
{
get
{
return this.tabControl;
}
}
//获取TabControl控件的Size属性,以便子窗体调用
public Size TabControlSize
{
get
{
return this.tabControl.Size;
}
set
{
this.tabControl.Size = value;
}
}
对应子窗体,每个窗体打开的时候,主窗体都需要创建一个TabPage,关闭的时候,都要撤销一个TabPage,也就是说所有的子窗体都有共同的属性和功能,所以我设置了一个父窗体来实现这些功能,子窗体通过继承而拥有这些功能。
private frmMain frMain = null;
private TabPage tabPage = new TabPage();
private void frmTabMain_ParentChanged(object sender, EventArgs e)
{
if (this.MdiParent != null)
{
this.tabPage.Text = this.Text + " ";
frMain = this.MdiParent as frmMain;//获取主窗体
frMain.AddTabPage(tabPage);//调用主窗体方法,创建一个TabPage
}
}
//窗体被激活,对应的TabPage也呈选中状态
private void frmTabMain_Enter(object sender, EventArgs e)
{
if (this.frMain != null)
{
for (int i = 0; i < this.frMain.MdiChildren.Length; i++)
{
if (this.frMain.MdiChildren[i] == this)
{
this.frMain.MultiPageControl.SelectedIndex = i;
}
}
}
}
//窗体关闭,调用主窗体方法,撤销对应TabPage
private void frmTabTitleMain_FormClosed(object sender, FormClosedEventArgs e)
{
this.Dispose();
this.frMain.RemoveTabPage(tabPage);
}
//窗体加载的时候,将窗体的标题赋给对应的TabPage
private void frmTabMain_Load(object sender, EventArgs e)
{
// this.tabPage.Text = this.Text;
}
- Winform 窗口加载实例(二)-----TabControl
- Winform 窗口加载实例(二)-----TabControl
- Winform 窗口加载实例(一)-----MenuStrip
- Winform 窗口加载实例(三)-----功能菜单
- Winform 窗口加载实例(一)-----MenuStrip (转)
- TabControl实例
- winform tabControl隐藏顶部按钮
- C# winform 只运行一个实例窗口
- WinForm中ToolBar与TabControl的一些事件写法(C#)
- C# WinForm控件美化扩展系列之TabControl控件(1)
- Winform -----TabControl 标签 画关闭按钮
- Winform中TabControl闪烁问题解决办法
- Winform 自定义TabControl实现浏览器标签
- C# Winform 中tabControl的使用
- WinForm基础(二)
- 二十、类加载实例
- Winform DevExpress控件库(二) 使用SplashScreenManager控件定制程序加载页面
- WinForm 窗口弹出 问题(winform窗体值传递)
- QT程序退出后托盘图标不消失问题
- 字符格式化
- WINCE6.0 + S3C2443的启动过程---nboot篇
- 觞了,谁疼――致偶像麦迪
- Android-NDK开发之第三个例子--传递整型数组
- Winform 窗口加载实例(二)-----TabControl
- 程序员:增加编程经验的3种途径
- 大话设计模式学习--面向对象设计的原则
- nboot通过DNW下载并运行eboot.nb0
- Delphi 组件渐进开发浅谈(一)——由简入繁
- symbian lbs google 地图编程汇总
- 给自己一点激励
- IIS无法启动
- 初始化动态分配的数组问题