如何从TabControl删除TabPage? [英] How to remove TabPage from TabControl?

查看:62
本文介绍了如何从TabControl删除TabPage?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从tab控件中删除特定的标签页.为此,我具有必须关闭的选项卡名称的值.

I want to remove a particular tabpage from the tabcontrol. For which i have the value of tab name which has to be closed.

但是,当我使用..

for (int i = 0; i < myTabControl.TabPages.Count; i++)
{
    if (myTabControl.TabPages[i].Name.Equals(tabToRemove, StringComparison.OrdinalIgnoreCase))
    {
        myTabControl.TabPages.RemoveAt(i);
        break;
    }
}

它不在循环内,因为计数为零.而tabcontrol在其中带有两个选项卡的情况下可见.

It is not going inside the loop because the count is zero. whereas the the tabcontrol is visible with two tabs in it.

出什么问题了?

这就是我添加标签的方式->

This is how i am adding the tabs ->

public void TabIt(string strProcessName)
{
    this.Show();

    //Creating MDI child form and initialize its fields
    MDIChild childForm = new MDIChild();
    childForm.Text = strProcessName;
    childForm.MdiParent = this;

    //child Form will now hold a reference value to the tab control
    childForm.TabCtrl = tabControl1;

    //Add a Tabpage and enables it
    TabPage tp = new TabPage();

    tp.Parent = tabControl1;
    tp.Text = childForm.Text;
    tp.Show();
    //child Form will now hold a reference value to a tabpage
    childForm.TabPag = tp;
    //Activate the MDI child form
    childForm.Show();
    childCount++;

    //Activate the newly created Tabpage.
    tabControl1.SelectedTab = tp;
    tabControl1.ItemSize = new Size(200, 32);
    tp.Height = tp.Parent.Height;
    tp.Width = tp.Parent.Width;
}


public void GetTabNames()
{

    foreach (string strProcessName in Global.TabProcessNames)
    {
        TabIt(strProcessName);
    }
}


子窗体:


The child form :

using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Diagnostics; using System.Drawing.Drawing2D;

namespace Daemon 
{ 

public class MDIChild : System.Windows.Forms.Form
{
    /// <summary>
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.Container components = null;
    private TabControl tabCtrl;
    private TabPage tabPag;

    public MDIChild()
    {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();
    //MDIChild TargerForm = new MDIChild();
    //WinApi.SetWinFullScreen(TargerForm.Handle); 
            //
            // TODO: Add any constructor code after InitializeComponent call
            //
    }

    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    protected override void Dispose( bool disposing )
    {
            if( disposing )
            {
                    if(components != null)
                    {
                            components.Dispose();
                    }
            }
            base.Dispose( disposing );
    }

    public TabPage TabPag
    {
            get
            {
                    return tabPag;
            }
            set
            {
                    tabPag = value;
            }
    }

    public TabControl TabCtrl
    {
            set
            {
                    tabCtrl = value;
            }
    }


    #region Windows Form Designer generated code
    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {
    this.SuspendLayout();
    // 
    // MDIChild
    // 
    this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
    this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
    this.BackColor = System.Drawing.SystemColors.InactiveCaptionText;
    this.ClientSize = new System.Drawing.Size(0, 0);
    this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
    this.MaximizeBox = false;
    this.MinimizeBox = false;
    this.Name = "MDIChild";
    this.Opacity = 0;
    this.ShowIcon = false;
    this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
    this.Text = "MDIChild"; 
    this.Activated += new System.EventHandler(this.MDIChild_Activated);
    this.Closing += new System.ComponentModel.CancelEventHandler(this.MDIChild_Closing);
    this.ResumeLayout(false);

    }
    #endregion

    private void MDIChild_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
    try
    {
        //Destroy the corresponding Tabpage when closing MDI child form
        this.tabPag.Dispose();

        //If no Tabpage left
        if (!tabCtrl.HasChildren)
        {
            tabCtrl.Visible = false;
        }
    }
    catch (Exception ex)
    { 
    }
    }

    private void MDIChild_Activated(object sender, System.EventArgs e)
    {
    try
    {
        //Activate the corresponding Tabpage
        tabCtrl.SelectedTab = tabPag;

        if (!tabCtrl.Visible)
        {
            tabCtrl.Visible = true;
        }
        Global.ExistingTabProcessNames.Add(tabPag.Text);
    }
    catch (Exception ex)
    { 
    }
    }
}

}

推荐答案

如果您拥有TabPage的名称,那么这样做有什么问题...

If you have the name of the TabPage what is wrong with doing just this...

tabControl1.TabPages.RemoveByKey("tabPage1");

?

这篇关于如何从TabControl删除TabPage?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆