Anuya
Anuya

Reputation: 8350

How can i remove the tabs from tabcontrol using c#

How can i remove the tabs from tabcontrol when i reference each tab to the childform.

I am using a tabcontrol, i want to remove a particular tab from the control. The value i have to do this in a string which i dynamically.

How to remove the tab from tabcontrol using a existing tab name which i have in a string ??

I tried something like...

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

}

But in the above code, the myTabControl.TabPages.Count is always zero.

Below is the code, to show i am creating the tabs. This is working perfectly.


         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
{
    /// <summary>
    /// Summary description for MDIChild.
    /// </summary>
    /// 

    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)
            { 
            }
        }

    }
}

Upvotes: 1

Views: 5918

Answers (4)

jasonh
jasonh

Reputation: 30303

As jussij suggested, you need to do this:

tabControl1.Controls.Add(tp);

And you can more easily locate the tab like this:

var foundTab = (from System.Windows.Forms.TabPage tab in tabControl1.TabPages.Cast<TabPage>()
                where tab.Name == "tabName"
                select tab).First();

Upvotes: 1

SwDevMan81
SwDevMan81

Reputation: 50018

I would recommend taking a look at this tab page example for adding/removing tabs.

Upvotes: 0

jussij
jussij

Reputation: 10580

For starters you should be looping the other way around:

for (int i = myTabControl.TabPages.Count - 1; i >= 0 ; i--)
{
   ......
}

EDIT: Ignore me. I missed the break; and yes it should also be >= :(

My next theory is you are missing this line:

 // add the page to the tab control
 tabControl1.Controls.Add(tp);

PS: Why does copying code from SO not maintain the CRLFs. That is very annoying!

Upvotes: 2

ecathell
ecathell

Reputation: 1030

I dont know the purpose of your code, but if you will eventually re-add the tab, why not just hide it? Its easier and you dont have to worry about reverse loop logic and invalid arguments once the page is hidden and such. If you need to need a way to address all the tabs at once just do a check for visible tabs...

Upvotes: 1

Related Questions