(C#)多个子窗体最大化时如何象选项卡那样显示?

父窗体中打开多个子窗体,在最大化子窗体后象IE7的选项卡或vs中那样显示,让拥护可以方便切换.liuleiqt这样只实现了选项卡,关闭按钮等,看起来很别扭~~~如果这样可... 父窗体中打开多个子窗体,在最大化子窗体后象IE7的选项卡或vs中那样显示,让拥护可以方便切换.
liuleiqt
这样只实现了选项卡,关闭按钮等,看起来很别扭~~~如果这样可以直接用TabControl
展开
 我来答
liuleiqt
推荐于2016-09-10 · TA获得超过1285个赞
知道小有建树答主
回答量:1953
采纳率:0%
帮助的人:376万
展开全部
父窗体上面放tabcontrol ,在page上面放一个panel,新窗体(fromborderstyle设置为none比较好看)停靠到panel上

Form3 f = new Form3();
f.TopLevel = false;
f.Show();
f.Parent = this.panel1;

======================
只所以用这样的设计,
方便的是设计,每个模块有自己的UI
自己的控制器
而如果都放到tabcontrol上面,处理功能很杂
不利于项目的管理
=============================
如果你非要类似遨游那种的选项卡页面
可以做一个假的,比如在窗体的上方有一排picture,平时就显示一个小画面,或者干脆隐藏。
当打开一个窗体后就把其中一个关联到窗体,它的text显示窗体名称,双击关闭对应窗体,单击则对应窗体显示到顶层
可以把这些公共事件封装到一个控件,拖过来用,把窗体name作为传入值
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
网络剑客Eks
2008-10-29 · TA获得超过425个赞
知道小有建树答主
回答量:224
采纳率:0%
帮助的人:245万
展开全部
MDI
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
luck_zeng
2008-10-29 · TA获得超过196个赞
知道小有建树答主
回答量:345
采纳率:0%
帮助的人:190万
展开全部
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);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式