我有一个GroupBox
有 3TextBoxes
和 3Labels
的组框的名称是 TextInfoGroupBox .. 我正在尝试访问其中的文本框,但我似乎不知道如何.. 我尝试了类似的东西:
TextInfoGroupBox.innerTextbox;
TextInfoGroupBox.Controls.GetChildControl;
这两个都没有出现在智能中..我怎样才能接触到它们,设置并从它们那里获取数据?
您可以像访问任何其他控件一样访问它们:
innerTextBox
无论嵌套如何,Visual Studio 设计器都会为您放入表单中的每个控件生成一个字段。
Controls
为此目的使用集合。您将需要确切知道该集合中的哪个项目是您的 TextBox。如果您的组框中只有 3 个文本框,您可以使用
groupBox.Controls[0], groupBox.Controls[1], groupBox.Controls[2]
访问您的项目或仅使用它们各自的名称。
如果由于某种原因您无法直接访问 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");