(C#)多个子窗体最大化时如何象选项卡那样显示?
父窗体中打开多个子窗体,在最大化子窗体后象IE7的选项卡或vs中那样显示,让拥护可以方便切换.liuleiqt这样只实现了选项卡,关闭按钮等,看起来很别扭~~~如果这样可...
父窗体中打开多个子窗体,在最大化子窗体后象IE7的选项卡或vs中那样显示,让拥护可以方便切换.
liuleiqt
这样只实现了选项卡,关闭按钮等,看起来很别扭~~~如果这样可以直接用TabControl 展开
liuleiqt
这样只实现了选项卡,关闭按钮等,看起来很别扭~~~如果这样可以直接用TabControl 展开
3个回答
展开全部
父窗体上面放tabcontrol ,在page上面放一个panel,新窗体(fromborderstyle设置为none比较好看)停靠到panel上
Form3 f = new Form3();
f.TopLevel = false;
f.Show();
f.Parent = this.panel1;
======================
只所以用这样的设计,
方便的是设计,每个模块有自己的UI
自己的控制器
而如果都放到tabcontrol上面,处理功能很杂
不利于项目的管理
=============================
如果你非要类似遨游那种的选项卡页面
可以做一个假的,比如在窗体的上方有一排picture,平时就显示一个小画面,或者干脆隐藏。
当打开一个窗体后就把其中一个关联到窗体,它的text显示窗体名称,双击关闭对应窗体,单击则对应窗体显示到顶层
可以把这些公共事件封装到一个控件,拖过来用,把窗体name作为传入值
Form3 f = new Form3();
f.TopLevel = false;
f.Show();
f.Parent = this.panel1;
======================
只所以用这样的设计,
方便的是设计,每个模块有自己的UI
自己的控制器
而如果都放到tabcontrol上面,处理功能很杂
不利于项目的管理
=============================
如果你非要类似遨游那种的选项卡页面
可以做一个假的,比如在窗体的上方有一排picture,平时就显示一个小画面,或者干脆隐藏。
当打开一个窗体后就把其中一个关联到窗体,它的text显示窗体名称,双击关闭对应窗体,单击则对应窗体显示到顶层
可以把这些公共事件封装到一个控件,拖过来用,把窗体name作为传入值
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
MDI
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace ERM
{
public partial class MdiChildTab : UserControl
{
Form[] forms;
public MdiChildTab()
{
InitializeComponent();
}
public void MdiChildActivate(Form activateForm, Form[] OpenForms)
{
if (forms == null)
{
foreach (Form frm in OpenForms)
{
TabPage tp = new TabPage();
tp.Tag = frm.Handle.ToString();
tp.Text = frm.Text;
this.tabForm.TabPages.Add(tp);
}
}
else
{
if (forms.Length < OpenForms.Length) //打开窗体
{
foreach (Form frm in OpenForms)
{
bool exist = false;
foreach (Form frm1 in forms)
{
if (frm.Handle == frm1.Handle)
exist = true;
}
if (exist == false)
{
TabPage tp = new TabPage();
tp.Tag = frm.Handle.ToString();
tp.Text = frm.Text;
this.tabForm.TabPages.Add(tp);
}
}
}
else if (forms.Length > OpenForms.Length) //关闭窗体
{
foreach (Form frm in forms)
{
bool exist = false;
foreach (Form frm1 in OpenForms)
{
if (frm.Handle == frm1.Handle)
{
exist = true;
break;
}
}
if (exist == false)
{
foreach (TabPage tabp in this.tabForm.TabPages)
{
if (tabp.Tag.ToString() == frm.Handle.ToString())
{
this.tabForm.TabPages.Remove(tabp);
break;
}
}
}
}
}
}
// 当前窗体
if (activateForm == null || OpenForms.Length==0)
{
forms = null;
return;
}
foreach (TabPage tabp in this.tabForm.TabPages)
{
if (tabp.Tag.ToString() == activateForm.Handle.ToString())
{
this.tabForm.SelectedTab = tabp;
break;
}
}
forms = OpenForms;
}
private void tabForm_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.tabForm.SelectedTab == null || forms==null)
return;
foreach (Form frm in forms)
{
if (frm.Handle.ToString() == this.tabForm.SelectedTab.Tag.ToString())
frm.Activate();
}
}
}
}
上面代码为我所写的一个控件,将此控制加在MDI窗体上,再在MDI窗体加入MdiChildActivate事件,并加入下面代码
private void frmMain_MdiChildActivate(object sender, EventArgs e)
{
if (Application.OpenForms.Count == 1)
this.treeMenu1.Width = 400;
ArrayList childs = new ArrayList();
foreach (Form frm in Application.OpenForms)
{
if (frm.MdiParent == this)
childs.Add(frm);
}
Form[] forms = new Form[childs.Count];
childs.CopyTo(forms);
this.mdiChildTab1.MdiChildActivate(this.ActiveMdiChild, forms);
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace ERM
{
public partial class MdiChildTab : UserControl
{
Form[] forms;
public MdiChildTab()
{
InitializeComponent();
}
public void MdiChildActivate(Form activateForm, Form[] OpenForms)
{
if (forms == null)
{
foreach (Form frm in OpenForms)
{
TabPage tp = new TabPage();
tp.Tag = frm.Handle.ToString();
tp.Text = frm.Text;
this.tabForm.TabPages.Add(tp);
}
}
else
{
if (forms.Length < OpenForms.Length) //打开窗体
{
foreach (Form frm in OpenForms)
{
bool exist = false;
foreach (Form frm1 in forms)
{
if (frm.Handle == frm1.Handle)
exist = true;
}
if (exist == false)
{
TabPage tp = new TabPage();
tp.Tag = frm.Handle.ToString();
tp.Text = frm.Text;
this.tabForm.TabPages.Add(tp);
}
}
}
else if (forms.Length > OpenForms.Length) //关闭窗体
{
foreach (Form frm in forms)
{
bool exist = false;
foreach (Form frm1 in OpenForms)
{
if (frm.Handle == frm1.Handle)
{
exist = true;
break;
}
}
if (exist == false)
{
foreach (TabPage tabp in this.tabForm.TabPages)
{
if (tabp.Tag.ToString() == frm.Handle.ToString())
{
this.tabForm.TabPages.Remove(tabp);
break;
}
}
}
}
}
}
// 当前窗体
if (activateForm == null || OpenForms.Length==0)
{
forms = null;
return;
}
foreach (TabPage tabp in this.tabForm.TabPages)
{
if (tabp.Tag.ToString() == activateForm.Handle.ToString())
{
this.tabForm.SelectedTab = tabp;
break;
}
}
forms = OpenForms;
}
private void tabForm_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.tabForm.SelectedTab == null || forms==null)
return;
foreach (Form frm in forms)
{
if (frm.Handle.ToString() == this.tabForm.SelectedTab.Tag.ToString())
frm.Activate();
}
}
}
}
上面代码为我所写的一个控件,将此控制加在MDI窗体上,再在MDI窗体加入MdiChildActivate事件,并加入下面代码
private void frmMain_MdiChildActivate(object sender, EventArgs e)
{
if (Application.OpenForms.Count == 1)
this.treeMenu1.Width = 400;
ArrayList childs = new ArrayList();
foreach (Form frm in Application.OpenForms)
{
if (frm.MdiParent == this)
childs.Add(frm);
}
Form[] forms = new Form[childs.Count];
childs.CopyTo(forms);
this.mdiChildTab1.MdiChildActivate(this.ActiveMdiChild, forms);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |