vexe
vexe

Reputation: 5615

C# winform, Can I access Controls Inside a GroupBox like this: myGroupBox.InnerTextBox.Text "someText";?

I have a GroupBox which has 3 TextBoxes and 3 Labels the name of the group box is TextInfoGroupBox .. I'm trying to access the textBoxes inside it, but I just don't seem to know how .. I tried something like:

TextInfoGroupBox.innerTextbox;
TextInfoGroupBox.Controls.GetChildControl;

Both of these didn't pop up in the intellisence .. how can i reach them, set and get data from them ?

Upvotes: 0

Views: 9660

Answers (3)

Jaime Torres
Jaime Torres

Reputation: 10515

If you don't have direct access to innerTextBox for some reason, you can always go hunting:

        TextBox myTextBox = null;

        Control[] controls = TextInfoGroupBox.Controls.Find("InnerTextBoxName", true);
        foreach (Control c in controls)
        {
            if (c is TextBox)
            {
                myTextBox = c as TextBox;
                break;
            }
        }

At the end of this , if myTextBox is null, it couldn't be found (obviously). Hopefully you don't structure it so that there would be multiple entries.

You could also create some cute extension methods:

public static Control FindControl(this Control parent, string name)
{
    if (parent == null || string.IsNullOrEmpty(name))
    {
        return null;
    }

    Control[] controls = parent.Controls.Find(name, true);
    if (controls.Length > 0)
    {
        return controls[0];
    }
    else
    {
        return null;
    }
}

public static T FindControl<T>(this Control parent, string name) where T : class
{
    if (parent == null || string.IsNullOrEmpty(name))
    {
        return null;
    }

    Control[] controls = parent.Controls.Find(name, true);
    foreach (Control c in controls)
    {
        if (c is T)
        {
            return c as T;
        }
    }

    return null;
}

And you could simply call them as

        Control c = TextInfoGroupBox.FindControl("MyTextBox");
        TextBox tb = TextInfoGroupBox.FindControl<TextBox>("MytextBox");

Upvotes: 0

SLaks
SLaks

Reputation: 888195

You can access them just like any other control:

innerTextBox

The Visual Studio designer generates a field for each control you put in your form, regardless of nesting.

Upvotes: 2

Blablablaster
Blablablaster

Reputation: 3348

Use Controls collection for this purpose. You will need to know exactly what item in that collection is your TextBox. If there are only 3 textboxes in your groupbox you can use

groupBox.Controls[0], groupBox.Controls[1], groupBox.Controls[2]

to access your items or just use their respective names.

Upvotes: 1

Related Questions