给你的MDI程序加上一个标签栏
2007-04-21 18:27
239 查看
在MDI窗体中定义一个
TabControl tabCon = new TabControl();
在MdiChildActivate事件写:代码如下:
private void MainFrame_MdiChildActivate(object sender, EventArgs e)
{
Form f = this.ActiveMdiChild;
if (f == null) { return; }
string key = f.Handle.ToString();
if (!tabCon.TabPages.ContainsKey(key))
{
tabCon.TabPages.Add(key, f.Text);
f.Closed += delegate(Object _sender, EventArgs _e) { tabCon.TabPages.RemoveByKey((_sender as Form).Handle.ToString()); };
}
tabCon.SelectedIndex = tabCon.TabPages.IndexOfKey(key);
}
void tabCon_Selected(Object sender, TabControlEventArgs e)
{
if (e == null || e.TabPage == null)
return;
string key = e.TabPage.Name;
foreach (Form f in this.MdiChildren)
{
if (f.Handle.ToString() == key)
{
f.BringToFront();
break;
}
}
}
private void tabCon_DoubleClick(object sender, EventArgs e)
{
if (this.tabCon.Visible && tabCon.TabCount>0)
{
Form childFrom = this.ActiveMdiChild;
childFrom.Close();
this.RemoveTabPageFromTabCtrl();
}
}
/**/
/// <summary>
/// 在子窗体关闭时移除对应的TabPage
/// </summary>
private void RemoveTabPageFromTabCtrl()
{
for (int i = 0; i < this.tabCon.TabCount; i++)
{
if (this.ActiveMdiChild.Equals(tabCon.TabPages[i].Tag))
{
this.tabCon.TabPages.Remove(this.tabCon.TabPages[i]);
break;
}
}
}
TabControl tabCon = new TabControl();
在MdiChildActivate事件写:代码如下:
private void MainFrame_MdiChildActivate(object sender, EventArgs e)
{
Form f = this.ActiveMdiChild;
if (f == null) { return; }
string key = f.Handle.ToString();
if (!tabCon.TabPages.ContainsKey(key))
{
tabCon.TabPages.Add(key, f.Text);
f.Closed += delegate(Object _sender, EventArgs _e) { tabCon.TabPages.RemoveByKey((_sender as Form).Handle.ToString()); };
}
tabCon.SelectedIndex = tabCon.TabPages.IndexOfKey(key);
}
void tabCon_Selected(Object sender, TabControlEventArgs e)
{
if (e == null || e.TabPage == null)
return;
string key = e.TabPage.Name;
foreach (Form f in this.MdiChildren)
{
if (f.Handle.ToString() == key)
{
f.BringToFront();
break;
}
}
}
private void tabCon_DoubleClick(object sender, EventArgs e)
{
if (this.tabCon.Visible && tabCon.TabCount>0)
{
Form childFrom = this.ActiveMdiChild;
childFrom.Close();
this.RemoveTabPageFromTabCtrl();
}
}
/**/
/// <summary>
/// 在子窗体关闭时移除对应的TabPage
/// </summary>
private void RemoveTabPageFromTabCtrl()
{
for (int i = 0; i < this.tabCon.TabCount; i++)
{
if (this.ActiveMdiChild.Equals(tabCon.TabPages[i].Tag))
{
this.tabCon.TabPages.Remove(this.tabCon.TabPages[i]);
break;
}
}
}
相关文章推荐
- 给你的MDI程序加上一个标签栏
- 给你的MDI程序加上一个标签栏,方便地切换和关闭子窗体
- 给你的MDI程序加上一个标签栏,方便地切换和关闭子窗体
- 对mdi程序中一个弹出菜单警告原因的分析
- C语言 编写一个程序,从标准输入读取几行输入。每行输入都要打印到标准输出上,前面加上行号。在编写这个程序的时候要使这个程序能够处理的输入行的长度没有限制
- 编写一个程序,从标准输入读取几行输入。每行输入都要打印到标准输出上,前面加上行号。
- 【C语言】编写一个程序,从标准输入读取几行输入。每行输入都要打印到标准输出上,前面加上行号。编写这个程序的时候要使这个程序能够处理的输入行的长度没有限制。
- 一个简单的MDI示范程序(Delphi)
- 编写一个程序,从标准输入读取几行输入。每行输入都要打印到标准输出上,前面加上行号。
- 2. 编写一个程序,从标准输入读取几行输入。每行输入都要打印到标准输出上,前面加上行号。在编写这个程序的时候要使用让这个程序能够处理的输入行的长度没有限制
- 推荐一个XP系统任务栏标签拖放程序 Taskix32 (本人友情汉化)
- 关于派生类的构造的——一个程序的分析(钱能c++ P353),加上了析构函数
- 一个C程序 我觉得自己写它好难啊 注释那行是最后分析后加上的 费了我一个小时
- 如何为一个img标签设置宽度和高度,加上src
- 如何打开 两个Editplus(窗口 进程),不想在一个窗口多标签打开程序,这样子很难对比程序
- 一个为字符串中的网址加上链接的程序例子
- 一个在unicode文本插入标签的程序小结
- 关于派生类的构造的——一个程序的分析(钱能c++ P353),加上了析构函数
- MFC创建MDI程序一个Doc对应多个View
- 给多窗口的程序加上多标签