C# tabconctrol切换事件
tabconctrol没有click事件,切换page时,调用SelectedIndexChanged事件;
private void tabControl1_SelectedIndexChanged(object sender, System.EventArgs e) 
{ 
   switch(this.tabControl1.SelectedIndex) 
   { 
    case 0: 
       MessageBox.Show("tabPage1 is Selected"); 
     break; 
    case 1: 
       MessageBox.Show("tabPage2 is Selected"); 
     break; 
   } 
}
以下摘抄扩展:
http://www.cnblogs.com/wang2650/archive/2011/11/07/2240421.html
在WinForm开 发的过程中,MDI是一种常见的形式。在MDI主窗体打开的子窗体处于活动状态的只有一个,很多时候我们需要在打开的MDI子窗 体中切换。然而.Net的框架并没有提供一种易见的切换方式,当然可以通过“Ctrl+Tab”来切换,但是这种方式是不易见的,并且只能按照打开窗体的 顺序来切换。
下面来介绍一种结合了TabCotrol控件的软件设计形式。

这种设计形式要解决三个问题:
(1)TabControl的TabPage要和窗体对应
(2)TabControl的TabPage切换的时候,对应的窗体要激活
(3)窗体的新建或关闭,对应的TabPage要创建或撤销
下面就来一步步的解决这些问题
首先拖一个TabControl控件到MDI主窗口中,设置其DOCK为Bottom或者TOP,根据需要也可以设置到左或右。设置其Height为0。主窗体添加如下代码:
//切换TabPage,将对应的窗体激活
        private void tabControl_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (this.MdiChildren.Length > 0)
            {
                for (int i = 0; i < this.MdiChildren.Length; i++)
                {
                    if (this.tabControl.SelectedIndex == i)
                    {
                        this.MdiChildren[i].Activate();
                        return;
                    }
                }
            }
        }
or
//切换TabPage,将对应的窗体激活
        private void tabControl_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.ChangeTabPage();
        }
//子窗体切换激活
        private void ChangeTabPage()
        {
            if (this.MdiChildren.Length > 0 && tabControl.SelectedIndex > -1)
            {
                for (int i = 0; i < this.MdiChildren.Length; i++)
                {
                    if (this.tabControl.SelectedIndex == i)
                    {
                        this.MdiChildren[i].WindowState = FormWindowState.Maximized;
                        this.MdiChildren[i].Visible = true;
                        this.MdiChildren[i].Activate();
}
                    else if (this.MdiChildren[i].Visible == true)
                    {
                        this.MdiChildren[i].Visible = false;
                    }
                }
            }
}
        //增加TabPage,将对应的窗体激活
        private void tabControl_ControlAdded(object sender, ControlEventArgs e)
        {
            if (this.tabControl.SelectedIndex == 0)
            this.ChangeTabPage();
        }
//关闭TabPage,将对应的窗体关闭
        private void tabControl_ControlRemoved(object sender, ControlEventArgs e)
        {
            //if (this.tabControl.SelectedIndex == 0)
                //this.ChangeTabPage();
        }
//窗体关闭的时候,撤销对应的TabPage
        public void RemoveTabPage(TabPage tb)
        {
            this.MultiPageControl.TabPages.Remove(tb);
            if (this.tabControl.TabPages.Count == 0)
            {
                this.TabControlSize = new Size(this.TabControlSize.Width, 0);
            }
        }
//窗体创建的时候,创建对应的TabPage
        public void AddTabPage(TabPage tb)
        {
            if (this.tabControl.TabPages.Count == 0)
            {
                this.TabControlSize = new Size(this.TabControlSize.Width, 20);
            }
            this.MultiPageControl.TabPages.Add(tb);
            this.MultiPageControl.SelectedTab = tb;
        }
//获取TabControl控件,以便子窗体调用(只读)
        public TabControl MultiPageControl
        {
            get
            {
                return this.tabControl;
            }
        }
//获取TabControl控件的Size属性,以便子窗体调用
public Size TabControlSize
        {
            get
            {
                return this.tabControl.Size;
            }
            set
            {
                this.tabControl.Size = value;
            }
        }
对应子窗体,每个窗体打开的时候,主窗体都需要创建一个TabPage,关闭的时候,都要撤销一个TabPage,也就是说所有的子窗体都有共同的属性和功能,所以我设置了一个父窗体来实现这些功能,子窗体通过继承而拥有这些功能。
private frmMain frMain = null;
        private TabPage tabPage = new TabPage();
private void frmTabMain_ParentChanged(object sender, EventArgs e)
        {
            if (this.MdiParent != null)
            {
this.tabPage.Text = this.Text + "  ";
                frMain = this.MdiParent as frmMain;//获取主窗体
                frMain.AddTabPage(tabPage);//调用主窗体方法,创建一个TabPage
            }
        }
//窗体被激活,对应的TabPage也呈选中状态
private void frmTabMain_Enter(object sender, EventArgs e)
        {
            if (this.frMain != null)
            {
                for (int i = 0; i < this.frMain.MdiChildren.Length; i++)
                {
                    if (this.frMain.MdiChildren[i] == this)
                    {
                        this.frMain.MultiPageControl.SelectedIndex = i;
                    }
                }
            }
        }
//窗体关闭,调用主窗体方法,撤销对应TabPage
        private void frmTabTitleMain_FormClosed(object sender, FormClosedEventArgs e)
        {
this.Dispose();
this.frMain.RemoveTabPage(tabPage);
        }
//窗体加载的时候,将窗体的标题赋给对应的TabPage
private void frmTabMain_Load(object sender, EventArgs e)
        {
           // this.tabPage.Text = this.Text;
        }
C# tabconctrol切换事件的更多相关文章
- select2切换事件如何生效
		
1.问题背景 利用select2生成可搜索下拉框,并且绑定切换事件:但是直接绑定change事件,发现不起作用 2.问题原因 <!DOCTYPE html> <html> &l ...
 - JS -判断、监听屏幕横竖屏切换事件
		
通过监听window.orientationchange事件,当横竖屏切换事件时触发 <!doctype html> <html> <head> <title ...
 - 小程序的tab切换事件
		
index.wxml代码 <view class="tab-left" > <view " bindtap="tab">tab ...
 - Windows 8 应用程序前后台切换事件监听
		
在一些情况下,我们需要监听应用程序切换到后台或者从后台切换至前台的事件,从而进行相关处理操作.支付宝应用锁屏(IOS,Android平台)的处理中就需要监听此事件,在用户将应用切换至后台一段时间后再切 ...
 - 封装tab切换事件
		
HTML <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...
 - html tab页面切换事件。
		
$(document).bind("visibilitychange",function(e){ //只对tab页面切换有效 //document.visibilityState ...
 - iOS监听tableView组头切换事件
		
- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSIntege ...
 - jQuery切换事件
		
有html页面内容如下: <body> <h5 id="hh">关于jQuery的介绍</h5> <p id="p1" ...
 - REDIS主从频繁切换事件排查
		
目录 前言 现象 排查 结论 redis主从配置注意点 前言 目前生产配置了2台redis一主一从1.193和12.6,和3个哨兵.1.193,3.10,12.6,搭建的redis高可用环境.突然发生 ...
 
随机推荐
- pptp记录日志
			
/etc/ppp/ip-up #!/bin/bash # This file should not be modified -- make local changes to # /etc/ppp/ip ...
 - Oracle EBS R12 电子技术参考手册 - eTRM (电子文档)
			
http://etrm.oracle.com/pls/etrm/etrm_search.search
 - Timer的用法
			
目的实现一个间隔轮询执行的功能. 从网上看到java中可以使用Timer,于是本篇文件就对自己的使用记录,进行一次记录. 主函数: package cn.test.timer; import java ...
 - MVC中的JS和CSS压缩
			
小说一下Js和CSS压缩的好处: 1.减小了文件的体积 2.减小了网络传输量和带宽占用 3.减小了服务器的处理的压力 4.提高了页面的渲染显示的速度 很多建议将站点的静态文件(如图片.js.css ...
 - 将Cocos2dX渲染到MFC窗口上
			
引用:http://www.cnblogs.com/windeer/archive/2012/11/18/2767750.html 引言 现在智能手机已经慢慢进入大众化,移动类应用开始火爆起来,游戏类 ...
 - 在linux中安装adb和fastboot工具
			
我用的是archlinux,在官方的软件仓库里就可以找到对应的包,包的名字叫:android-tools 据说debian系列的软件包是两个,分别是:android-tools-adb, androi ...
 - c3p0数据库连接池使用
 - 161214、oracle查询表信息
			
1.查找表的所有索引(包括索引名,类型,构成列): select t.*,i.index_type from user_ind_columns t,user_indexes i where t.ind ...
 - Python—装饰器
			
装饰器 1.普通函数 #简单的函数和调用 def a1(): print("i am zhangsan") def a2(): print("i am lisi" ...
 - 一步一步教你编写与搭建自动化测试框架——python篇
			
[本文出自天外归云的博客园] 这两天用python写了一个自动化测试框架,取名为Auty.准备用来做Web方面的接口测试,以下为Auty框架一步一步的搭建过程——