Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 611
  • Last Modified:

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

0
P1ST0LPETE
Asked:
P1ST0LPETE
1 Solution
 
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

Featured Post

NEW Veeam Backup for Microsoft Office 365 1.5

With Office 365, it’s your data and your responsibility to protect it. NEW Veeam Backup for Microsoft Office 365 eliminates the risk of losing access to your Office 365 data.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now