(一)标签页

先看看效果:

代码:

     public partial class 标签页 : Form
{
string s = "";
public 标签页()
{
InitializeComponent();
}
/// <summary>
/// 判断选项卡中是否有本选项卡
/// </summary>
/// <param name="s">选项卡名</param>
/// <returns>布尔型</returns> private bool HasTablePages(string s)
{
for (int i = ; i < tabControl1.TabPages.Count; i++)
{
if (tabControl1.TabPages[i].Text == s)
{
tabControl1.SelectedIndex = i;//如果选项卡中有本选项卡,则把本选项卡设为焦点
return false;
}
}
return true;
}
/// <summary>
/// 点击菜单时,创建本选项卡,同时将自定义的选项卡控件添加进去
/// </summary>
/// <param name="s">选项卡名</param>
/// <param name="uc">自定义的控件</param>
private void MenuAdd(string s,UserControl uc)
{
if (HasTablePages(s))
{
TabPage page = new TabPage();
page.Text = s; page.Controls.Clear();
page.Controls.Add(uc);
uc.Dock = DockStyle.Fill; tabControl1.TabPages.Add(page);
tabControl1.SelectedTab = page;
}
}
private void 会员管理ToolStripMenuItem_Click(object sender, EventArgs e)
{
s = "会员管理";
UC_HuiYuan uc = new UC_HuiYuan();
MenuAdd(s,uc);
} private void 数据管理ToolStripMenuItem_Click(object sender, EventArgs e)
{
s = "数据管理";
UC_ShuJu sj = new UC_ShuJu();
MenuAdd(s,sj);
} private void 客房管理ToolStripMenuItem_Click(object sender, EventArgs e)
{
s = "客房管理";
UC_KeFang kf = new UC_KeFang();
MenuAdd(s,kf);
}
/// <summary>
/// 双击选项卡名时,关闭本选项卡
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void tabControl1_DoubleClick(object sender, EventArgs e)
{
tabControl1.TabPages.RemoveAt(tabControl1.SelectedIndex);
}
}

(二)子窗体

先看看效果:

代码:

     public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 关闭所有窗口
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void 关闭所有窗口ToolStripMenuItem_Click(object sender, EventArgs e)
{
while (this.MdiChildren.Length > )
{
MdiChildren[].Close();
}
}
/// <summary>
/// 新建Form2
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
bool b = true;//用来判断子窗口中是否存在Form2
for (int i = ; i < this.MdiChildren.Length; i++)
{
if (this.MdiChildren[i].Name == "Form2")
{
b = false;
}
}
//没有子窗口 或者 子窗口中没有Form2 时
if (this.MdiChildren.Length == || b)
{
Form2 fm = new Form2();
fm.MdiParent = this;
fm.Show();
}
}
/// <summary>
/// 新建Form3
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void toolStripMenuItem2_Click(object sender, EventArgs e)
{
bool b = true;
for (int i = ; i < this.MdiChildren.Length; i++)
{
if (this.MdiChildren[i].Name == "Form3")
{
b = false;
}
}
if (this.MdiChildren.Length == ||b)
{
Form3 fm = new Form3();
fm.MdiParent = this;
fm.Show();
}
}
}

PS:

1.父窗体:IsMdiContainer=true
2.子窗体:建一个窗体,设计好。在父窗体“新建子窗体”界面中,把子窗体new出来。把新new出来的子窗体的MdiParent属性设置为父窗体对象。

20141112 WinForm子窗口标签页的更多相关文章

  1. Google 浏览器设置打开超链接到新窗口标签页

    一.windows  按住Ctrl + 鼠标点击,在新窗口打开,停留在当前页面: 按住Ctrl + Shift + 鼠标点击,在新窗口打开,停留在新窗口: 登录Google账号,管理Google账号, ...

  2. winform子窗口调用父窗口的控件及方法-一般调用

    首先新建一个窗体应用程序,在项目属性中点击右键->添加->添加新项,选择Windows窗体->添加. 在Form1和Form2窗口中各添加一个按钮,并双击添加事件处理函数:     ...

  3. winform子窗口与父窗口的交互-使用委托与事件

    实现子窗口与父窗口的交互,通过父窗口调用并控制子窗口,子窗口也能控制父窗口,使用委托和事件的方法,可以实现. 1.父窗口调用子窗口,并通过子窗口控制父窗口 新建工程,创建两个窗体    显示子窗体的代 ...

  4. 创建带标签页的MDI WinForms应用程序

    http://www.cnblogs.com/island/archive/2008/12/02/mditab.html 创建MDI应用程序 先创建”Windows窗体应用程序”解决方案Tabable ...

  5. 项目总结03:window.open()方法用于子窗口数据回调至父窗口,即子窗口操作父窗口

    window.open()方法用于子窗口数据回调至父窗口,即子窗口操作父窗口 项目中经常遇到一个业务逻辑:在A窗口中打开B窗口,在B窗口中操作完以后关闭B窗口,同时自动刷新A窗口(或局部更新A窗口)( ...

  6. dedecms列表页调用子栏目列表,织梦首页调用栏目的子栏目标签代码

    dedecms列表页调用子栏目列表,织梦首页调用栏目的子栏目标签代码. dedecms列表页调用子栏目列表标签: {dede:channelartlist type='sun' }<a href ...

  7. 4. VIM 系列 - 认识VIM的缓冲区、窗口、标签页

    目录 1. 缓冲区 2. 窗口 3. 标签页 4. 设置一下热键 1. 缓冲区 文件和缓冲区的区别 vim 打开一个文件时,其实是从磁盘中读取文件到内存中,vim的一些操作其实是在操作缓冲区, 当使用 ...

  8. window.open新打开窗口与新开标签页

    最近在使用window.open时忽略了一个细节问题:window.open新打开一个窗口,但是有时却是新打开一个窗口有时打开一个新标签页.虽然对一般的需求来说,这个两种情况都无所谓,但是对于那种有强 ...

  9. 【vim】分割窗口、标签页与Quickfix窗口

    vim支持窗口分割和标签页,合适地使用这两种特性可以使文字编辑工作更愉快. 1. 窗口分割 vim支持窗口的水平分割和垂直分割.以下是常用的操作指令或快捷键. 命令 说明 vim -o <fil ...

随机推荐

  1. poj 1734 Sightseeing trip_ 最小环记录路径

    题意:求最出小环,输出路径 #include <iostream> #include<cstdio> using namespace std; #define N 110 #d ...

  2. linux底半部机制在视频采集驱动中的应用

    最近在做一个arm+linux平台的视频驱动.本来这个驱动应该是做板子的第三方提供的,结果对方软件实力很差,自己做不了这个东西,外包给了一个暑期兼职的在读博士.学生嘛,只做过实验,没做过产品,给出的东 ...

  3. poj 3185 The Water Bowls(反转)

    Description The cows have a line of water bowls water bowls to be right-side-up and thus use their w ...

  4. sql server中将一个表中的部分数据插入到另一个表中

    可以通过存储过程完成,也可以通过在库名上右击“新建查询”执行.语句其实基本相同. 1. 存储过程: CREATE PROCEDURE pro1 as insert into tableB (field ...

  5. Objective-C——判断对象等同性

    无论我们使用什么语言,总是会出现需要判断两个对象是否相等的情况,OC当然也不例外.首先看一段代码: NSString *str1 = [[NSString alloc] initWithCString ...

  6. oracle优化思考-双刃剑

    oracle优化是一个双刃剑,特别注意这把剑用的场合:系统规划OLTP or OLAP 优化1:索引 在DML操作时.必须维护索引.假设大量的DML操作,想想看,IO是不是老高了? 索引长处:在非常多 ...

  7. js触摸屏案例

    js 手机端触发事事件.javascript手机端/移动端触发事件   处理Touch事件能让你跟踪用户的每一根手指的位置.你可以绑定以下四种Touch事件: 1 2 3 4 touchstart:  ...

  8. UVA 10954 Add All

    题意: 给出n个数,要将n个数相加,每次相加所得的值为当次的计算量,完成所有的求和运算后,要求总的计算量最小. 分析: 直接一个优先队列,由小到大排序,每次前两个相加就好. 代码: #include ...

  9. BroadcastReceiver浅析

    1.什么是BroadcastReceiver? 本质上是属于一个监听器,但onXxxListenter只是程序级别的监听器,当程序退出时候监听器也随之关闭.而BroadcastReceiver是系统级 ...

  10. Best Financing(HD4833)

    每笔收入产生的收益是独立的. 计算所有点的收益率,累计. #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<al ...