.NET(C#) WinForm TabControl动态添加删除TabPage

.NET(C#) WinForm TabControl动态添加删除TabPage

在这里我采用一个TabManager来管理删除添加等操作,使用时需要传入一个TabControl

    /// 
    /// 选项卡管理器,用来封装TabControl
    /// 
    public class TabManager
    {
        /// 
        /// 外部引用注意是否会被其它人修改
        /// 
        public TabControl TabControl { get; set; }

        /// 
        /// 初始化,添加TabControl的引用
        /// 
        /// 
        public void Init(TabControl control)
        {
            TabControl = control;
        }

        /// 
        /// 当主界面加载后调用
        /// 
        public void MainWindow_Loadd()
        {
            Add();
        }

        /// 
        /// 末尾添加
        /// 
        public void Add()
        {
            // 声明一个字符串变量,用于生成新增选项卡的名称
            string Title = "新增选项卡 " + (TabControl.TabCount + 1).ToString();

            // 使用TabControl控件的TabPages 属性的Add方法添加新的选项卡
            TabControl.TabPages.Add(CreateTabPage(Title, (Form)Assembly.GetExecutingAssembly().CreateInstance("WS.Note.EditForm")));
            MessageBox.Show("现有" + TabControl.TabCount + "个选项卡");  //获取选项卡个数
        }

        /// 
        /// 末尾添加一个指定标题的TabPage
        /// 
        /// TabPage的标题
        public void Add(string title)
        {
            Add(title, "WS.Note.EditForm");
        }

        /// 
        /// 在选项卡列表末尾添加一个TabPage,并填充一个Form
        /// 
        /// 
        /// 
        public void Add(string title, string FormClassName)
        {
            Add(title, (Form)Assembly.GetExecutingAssembly().CreateInstance(FormClassName));
        }
        
        /// 
        /// Tabs末尾追加填充Form的TabPage
        /// 
        /// 
        /// 
        public void Add(string title, Form form)
        {
            TabControl.TabPages.Add(CreateTabPage(title, form));
        }

        /// 
        /// 将以Form填充的TabPage添加到Tabs的指定位置
        /// 注1:如果索引为负数,将从末尾向前索引
        /// 注2:如果索引超限,将做取模操作
        /// 
        /// 标题
        /// Form窗口
        /// 添加的位置(插入模式)
        public void Add(string title, Form form, int position)
        {
            // 获取自然数索引(从0开始)
            int index = (position % TabControl.TabCount + TabControl.TabCount) % TabControl.TabCount;

            // 使用TabControl控件的TabPages 属性的Add方法添加新的选项卡
            TabControl.TabPages.Insert(index, CreateTabPage(title, form));
        }

        /// 
        /// 删除当前选中的选项卡
        /// 
        public void Remove()
        {
            // 删除时判断是否还存在TabPage
            if (TabControl.SelectedIndex > -1)
            {
                //使用TabControl控件的TabPages属性的Remove方法移除指定的选项卡
                int removeIndex = TabControl.SelectedIndex;
                TabControl.TabPages.Remove(TabControl.SelectedTab);
            }
        }

        /// 
        /// 交换两个索引所在TabPage的位置
        /// 
        /// 
        /// 
        public void Swap(int index1, int index2)
        {
            // 参数检查 - 索引是否超限 -TODO 取模操作避免超限
            if (index1 < 0 || index1 >= TabControl.TabPages.Count || index1 < 0 || index1 >= TabControl.TabPages.Count)
            {
                throw new IndexOutOfRangeException("Tab Page Index out of the Range");
            }
            // 交换TabPage
            TabPage page = TabControl.TabPages[index1];
            TabControl.TabPages.RemoveAt(index1);
            TabControl.TabPages.Insert(index2, page);
        }

        /// 
        /// 生成一个新的TabPage,用Form填充
        /// 
        /// Tab Page Title
        /// Form
        /// 
        private static TabPage CreateTabPage(string title, Form form)
        {
            TabPage page = new TabPage
            {
                Text = title,
                Tag = form.GetType().FullName
            };
            //设置窗体没有边框 加入到选项卡中  
            form.FormBorderStyle = FormBorderStyle.None;
            form.TopLevel = false;
            form.Parent = page;  // 将新生成的Form添加到选择的TabPage里面去
            form.ControlBox = false;
            form.Dock = DockStyle.Fill;
            form.Show();

            return page;
        }
    }

你可能感兴趣的:(C#,.NET,WinForm,C#,.NET,WinForm)