20141112 WinForm子窗口标签页
(一)标签页
先看看效果:

代码:
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子窗口标签页的更多相关文章
- Google 浏览器设置打开超链接到新窗口标签页
一.windows 按住Ctrl + 鼠标点击,在新窗口打开,停留在当前页面: 按住Ctrl + Shift + 鼠标点击,在新窗口打开,停留在新窗口: 登录Google账号,管理Google账号, ...
- winform子窗口调用父窗口的控件及方法-一般调用
首先新建一个窗体应用程序,在项目属性中点击右键->添加->添加新项,选择Windows窗体->添加. 在Form1和Form2窗口中各添加一个按钮,并双击添加事件处理函数: ...
- winform子窗口与父窗口的交互-使用委托与事件
实现子窗口与父窗口的交互,通过父窗口调用并控制子窗口,子窗口也能控制父窗口,使用委托和事件的方法,可以实现. 1.父窗口调用子窗口,并通过子窗口控制父窗口 新建工程,创建两个窗体 显示子窗体的代 ...
- 创建带标签页的MDI WinForms应用程序
http://www.cnblogs.com/island/archive/2008/12/02/mditab.html 创建MDI应用程序 先创建”Windows窗体应用程序”解决方案Tabable ...
- 项目总结03:window.open()方法用于子窗口数据回调至父窗口,即子窗口操作父窗口
window.open()方法用于子窗口数据回调至父窗口,即子窗口操作父窗口 项目中经常遇到一个业务逻辑:在A窗口中打开B窗口,在B窗口中操作完以后关闭B窗口,同时自动刷新A窗口(或局部更新A窗口)( ...
- dedecms列表页调用子栏目列表,织梦首页调用栏目的子栏目标签代码
dedecms列表页调用子栏目列表,织梦首页调用栏目的子栏目标签代码. dedecms列表页调用子栏目列表标签: {dede:channelartlist type='sun' }<a href ...
- 4. VIM 系列 - 认识VIM的缓冲区、窗口、标签页
目录 1. 缓冲区 2. 窗口 3. 标签页 4. 设置一下热键 1. 缓冲区 文件和缓冲区的区别 vim 打开一个文件时,其实是从磁盘中读取文件到内存中,vim的一些操作其实是在操作缓冲区, 当使用 ...
- window.open新打开窗口与新开标签页
最近在使用window.open时忽略了一个细节问题:window.open新打开一个窗口,但是有时却是新打开一个窗口有时打开一个新标签页.虽然对一般的需求来说,这个两种情况都无所谓,但是对于那种有强 ...
- 【vim】分割窗口、标签页与Quickfix窗口
vim支持窗口分割和标签页,合适地使用这两种特性可以使文字编辑工作更愉快. 1. 窗口分割 vim支持窗口的水平分割和垂直分割.以下是常用的操作指令或快捷键. 命令 说明 vim -o <fil ...
随机推荐
- 单链表反转(递归和非递归) (Java)
链表定义 class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } 非递归实现很简单,只需要遍历一遍链表,在遍历过 ...
- java 科学计数法表示转换
BigDecimal strScien = new BigDecimal("9.67953970412123E-05"); System.out.println(strScien. ...
- POJ3307+找规律
/* 题意:求第N个productivity property数是谁. (productivity property数:就是这个数可以由另外的数的各个位上的乘积得到.) */ #include< ...
- C#中MessageBox用法总结
我们在程序中经常会用到MessageBox. MessageBox.Show()共有21中重载方法.现将其常见用法总结如下: 1.MessageBox.Show("Hello~~~~&quo ...
- ASP.NET MVC 3 配置EF自动生成模型
Tools(工具) => 扩展工具 => Nuget Tools(工具) => Nuget=>程序包管理器控制台 Nuget 程序包管理器 => Install-Pac ...
- JavaScript跨域深入研究与解决办法(转)
什么是跨域 JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象.但在安全限制的同时也给注入iframe或是ajax应用上带来了不少麻烦.这里把涉及到跨域的一些问题简单地整理一下: 首 ...
- IE下全局对象报 脚本错误提示“对象不支持此属性或方法”解决方案
原来是IE会把页面中的元素id可以直接当变量名一样使用,但是这个id变量不能被赋值. 例如: <body id='body'> <script type="text/jav ...
- C#运算符的优先级
在C#中,一共有38个常用的运用符,根据它们所执行运算的特点和它们的优先级,为了便于记忆,我将它们归为七个等级:1.单元运算符和括号.2.常规算术运算符.3.位移运算符.4.比较运算符.5.逻辑运算符 ...
- JQuery————基础&&基础选择器
环境搭建 搭建一个jQuery的开发环境非常方便,可以通过下列几个步骤进行. 下载jQuery文件库 在jQuery的官方网站(http://jquery.com)中,下载最新版本的jQuery文件库 ...
- iOS学习心得——UITableViewCell的复用
UITableView是在iOS开发中最常用的控件之一.我的第一篇学习心得献给它了 UITableView是由一行一行的UITableViewCell构成的. 首先想这 ...