Solved

Accessing dynamically created controls on windows form

Posted on 2009-07-09
1
605 Views
Last Modified: 2013-12-17
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

0
Comment
Question by:P1ST0LPETE
1 Comment
 
LVL 13

Accepted Solution

by:
drypz earned 500 total points
ID: 24819897
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

Featured Post

Salesforce Made Easy to Use

On-screen guidance at the moment of need enables you & your employees to focus on the core, you can now boost your adoption rates swiftly and simply with one easy tool.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This document covers how to connect to SQL Server and browse its contents.  It is meant for those new to Visual Studio and/or working with Microsoft SQL Server.  It is not a guide to building SQL Server database connections in your code.  This is mo…
A theme is a collection of property settings that allow you to define the look of pages and controls, and then apply the look consistently across pages in an application. Themes can be made up of a set of elements: skins, style sheets, images, and o…
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

829 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question