简单的标签页功能

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Win
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }

        private void MainForm_Load(object sender, EventArgs e)
        {
            //隐藏标签页
            this.tabChildForm.Visible = false;
        }

        #region 标签页

        List<Form> forms = new List<Form>();
        Form[] tabForms;

        /// <summary>
        /// 主窗体操作子窗体事件
        /// </summary>
        /// <param name="sender">对象</param>
        /// <param name="e">消息</param>
        private void MainForm_MdiChildActivate(object sender, EventArgs e)
        {
            if (Application.OpenForms.Count > 0)
            {
                List<Form> frmList = new List<Form>();
                foreach (Form frm in Application.OpenForms)
                {
                    if (frm.MdiParent == this)
                    {
                        frmList.Add(frm);
                    }
                }

                forms = frmList;

                this.ActivateChild(this.ActiveMdiChild, forms);

                if (forms.Count == 0)
                {
                    this.tabChildForm.Visible = false;
                }
                else
                {
                    this.tabChildForm.Visible = true;
                }
            }
        }

        /// <summary>
        /// 激活子窗体
        /// </summary>
        /// <param name="activateForm">主窗体的活动子窗体</param>
        /// <param name="OpenFormss">打开的子窗体列表</param>
        private void ActivateChild(Form activateForm, List<Form> OpenFormss)
        {
            if (tabForms == null)
            {
                foreach (Form frm in OpenFormss)
                {
                    TabPage tp = new TabPage();
                    tp.Tag = frm.Handle.ToString();
                    tp.Text = frm.Text;

                    this.tabChildForm.TabPages.Add(tp);
                }
            }
            else
            {
                //Form.Open
                if (tabForms.Length < OpenFormss.Count)
                {
                    foreach (Form frm in OpenFormss)
                    {
                        bool exist = false;
                        foreach (Form frm1 in tabForms)
                        {
                            if (frm.Handle == frm1.Handle)
                            {
                                exist = true;
                            }
                        }
                        if (exist == false)
                        {
                            TabPage tp = new TabPage();
                            tp.Tag = frm.Handle.ToString();
                            tp.Text = frm.Text;

                            this.tabChildForm.TabPages.Add(tp);
                        }
                    }
                }
                //Form.close
                else if (tabForms.Length > OpenFormss.Count)
                {


                    foreach (Form frm in tabForms)
                    {

                        bool exist = false;
                        foreach (Form frm1 in OpenFormss)
                        {
                            if (frm.Text == frm1.Text)
                            {
                                exist = true;
                                break;
                            }
                        }
                        if (exist == false)
                        {
                            foreach (TabPage tabp in this.tabChildForm.TabPages)
                            {
                                if (tabp.Tag.ToString() != null && tabp.Text == frm.Text)
                                {
                                    this.tabChildForm.TabPages.Remove(tabp);
                                    break;
                                }
                            }
                        }
                    }

                }
            }

            // ActivateForm
            if (activateForm == null || OpenFormss.Count == 0)
            {
                tabForms = null;
                return;
            }

            foreach (TabPage tabp in this.tabChildForm.TabPages)
            {
                if (tabp.Tag.ToString() == activateForm.Handle.ToString())
                {
                    this.tabChildForm.SelectedTab = tabp;
                    break;
                }
            }
            tabForms = OpenFormss.ToArray();
        }

        /// <summary>
        /// 设置标签文本语言切换
        /// </summary>
        /// <param name="frmActiveChild">当前窗体</param>
        private void SetTabText(Form frmActiveChild)
        {
            foreach (TabPage tp in this.tabChildForm.TabPages)
            {
                if (tp.Tag.ToString() == frmActiveChild.Handle.ToString())
                {
                    tp.Text = frmActiveChild.Text;
                }
            }
        }

        /// <summary>
        /// 标签页选项切换
        /// </summary>
        /// <param name="sender">对象</param>
        /// <param name="e">消息</param>
        private void tabChildForm_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (this.tabChildForm.SelectedTab == null || tabForms == null)
            {
                return;
            }
            foreach (Form frm in tabForms)
            {
                if (frm.Text == this.tabChildForm.SelectedTab.Text)
                    frm.Activate();
            }
        }

        #endregion

    }
}

posted @ 2010-07-16 18:55  ITchinese  阅读(525)  评论(0)    收藏  举报