博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# tabconctrol切换事件
阅读量:6342 次
发布时间:2019-06-22

本文共 3570 字,大约阅读时间需要 11 分钟。

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; 
   } 
}

 

以下摘抄扩展:

 

在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;
        }

 

转载于:https://www.cnblogs.com/LuoXiaoTing604404828/p/4871152.html

你可能感兴趣的文章
linux 的IP配置和网络问题的排查(补充)
查看>>
解决VMware Workstation错误:未能锁定文件
查看>>
RHEL6 如何使用163 YUM源
查看>>
iPad浏览器HTML5性能测试
查看>>
CentOS6 手动编译升级 gcc
查看>>
使用noVNC访问虚机控制台
查看>>
关于struts2中prepare接口实现数据准备
查看>>
WordPress 相关路径函数
查看>>
基于Windows server 2008 R2和Windows7的企业环境的SSTP(或SSL) ×××构建二
查看>>
Android 文件操作
查看>>
两种常用动态路由协议的综合对比(ospf和eigrp)
查看>>
Lync 2013更新CU2
查看>>
Tomcat7+ 启动慢的问题解决
查看>>
0802收获
查看>>
google 开源项目C++ 编码规范
查看>>
23种设计模式之观察者模式
查看>>
memcached的安装与开启脚本
查看>>
Linux与Window字符集~~伤不起的幽灵空白符
查看>>
zabbix 邮件报警 -- sendmail
查看>>
JavaScript异步编程
查看>>