Accessing dynamically created controls on windows form

Hi all,

I have a .net TabControl - the tabs of which I am dynamically creating.  Each tab has a form on it consisting of labels, textboxes, buttons and a datagrid.  I am able to create the tabs just fine, however once a tab is created how do I access the dynamically created controls on it (i.e. the labels, textboxes, buttons and datagrid)?

A brief section of my code is shown in the code snippet below:

How would I get the text value of pnTextBox on a particular tab?  How would I catch an event raised from a textchanged or button click even from contols on a particular tab?
Do I need to dynamically create event handler methods too?

Thanks for the help.
private void GeneratePartTabs(Int32 rmaID)
{
    RMA2MainPartList.Load(rmaID);
 
    foreach (RMA2MainPart mainPart in RMA2MainPartList.List)
    {
        TabPage tabPage = new TabPage(mainPart.PartNumber);
        tabPage = CreateTabForm(tabPage, mainPart);
        tabControl1.TabPages.Add(tabPage);
    }
}
 
private TabPage CreateTabForm(TabPage Tab, RMA2MainPart MainPart)
{
    int num = tabControl1.TabCount;
                                                     
    Label pnLabel = new Label();                    
    pnLabel.Name = "lbPartNumber" + num;     
    pnLabel.Text = "Part Number";                   
    pnLabel.Location = new Point(8, 6);          
    pnLabel.Size = new Size(75, 13);             
 
    TextBox pnTextBox = new TextBox();
    pnTextBox.Name = "tbPartNum" + num;
    pnTextBox.Location = new Point(8, 22);
    pnTextBox.Size = new Size(130, 20);
    pnTextBox.Text = MainPart.PartNumber;
 
    //Etc. etc. - multiple labels and textboxes added here.........
 
    Tab.Controls.Add(pnLabel);
    Tab.Controls.Add(pnTextBox);
 
    return Tab;
}

Open in new window

LVL 10
P1ST0LPETEAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

drypzCommented:
Hi! You may access controls like this

            foreach (Control ctrl in tabControl1.Controls)
            {
                if (ctrl is TextBox)
                {
                    MessageBox.Show(((TextBox)ctrl).Name);
                    //your code here
                }

                if (ctrl is Label)
                {
                    MessageBox.Show(((Label)ctrl).Name);
                    //your code here
                }
            }

You may also dynamically add an event of your control, something like

            int num = tabControl1.TabCount;

            TextBox pnTextBox = new TextBox();
            pnTextBox.Name = "tbPartNum" + num;
            pnTextBox.Location = new Point(8, 22);
            pnTextBox.Size = new Size(130, 20);
            pnTextBox.Text = MainPart.PartNumber;
            pnTextBox.TextChanged += new EventHandler(pnTextBox_TextChanged);

        private void pnTextBox_TextChanged(object sender, EventArgs e)
        {
            throw new Exception("The method or operation is not implemented.");
        }
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
.NET Programming

From novice to tech pro — start learning today.