0

我有一个GroupBox有 3TextBoxes和 3Labels 的组框的名称是 TextInfoGroupBox .. 我正在尝试访问其中的文本框,但我似乎不知道如何.. 我尝试了类似的东西:

TextInfoGroupBox.innerTextbox;
TextInfoGroupBox.Controls.GetChildControl;

这两个都没有出现在智能中..我怎样才能接触到它们,设置并从它们那里获取数据?

4

3 回答 3

2

您可以像访问任何其他控件一样访问它们:

innerTextBox

无论嵌套如何,Visual Studio 设计器都会为您放入表单中的每个控件生成一个字段。

于 2012-07-24T16:42:12.073 回答
1

Controls为此目的使用集合。您将需要确切知道该集合中的哪个项目是您的 TextBox。如果您的组框中只有 3 个文本框,您可以使用

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

访问您的项目或仅使用它们各自的名称。

于 2012-07-24T16:41:06.250 回答
0

如果由于某种原因您无法直接访问 innerTextBox,您可以随时进行搜索:

        TextBox myTextBox = null;

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

在 this 结束时,如果 myTextBox 为空,则找不到(显然)。希望您不要对其进行结构化,以便有多个条目。

您还可以创建一些可爱的扩展方法:

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;
}

你可以简单地称它们为

        Control c = TextInfoGroupBox.FindControl("MyTextBox");
        TextBox tb = TextInfoGroupBox.FindControl<TextBox>("MytextBox");
于 2012-07-24T16:45:10.357 回答