views:

682

answers:

3

I have a dynamically created (runtime creation) textbox whose name is available as a string.What i want to do is access this textbox like we do as normal textboxes .Can any one tell me how to cast it as textbox or any other solution

+3  A: 

Hi, if you know the name of the textbox and its parent controls you can do like this

TextBox tb = (TextBox )parent.Controls["name"];

Best Regards, Iordan

IordanTanev
+3  A: 

In addition to Iordan's answer, if you don't know exactly where on your form the textbox is, then this extension method should help alot. Note, Form's inherit from Control somewhere down the track too, so you can call it from that, or any control on your form.

public static class ExtensionMethods
{
    public static Control FindControl(this Control root, string name)
    {
        foreach (Control c in root.Controls)
        {
            // Check this control
            if (c.Name == name) return c;

            // Check this controls subcontrols
            Control tmp = c.FindControl(name);
            if (tmp != null) return tmp;
        }

        return null;
    }
}

If this still isn't flexible enough for you, then you can iterate over System.Windows.Forms.Application.OpenForms

Matthew Scharley
+2  A: 

Since you seem to have control over the creation process, put a reference to it in a dictionary.

TextBox txt = DynamicCreate(name);
map[name] = txt;
this.Controls.Add(txt);

All you have to do is look it up in your dictionary, instead of loop through all the controls on the form.

TextBox txt = map["name"];

shimpossible