我有一个Windows窗体应用程序。
Windows窗体由几个元素组成。我可以用他们的名字联系到他们每个人。 (例如:textbox1.Text)
我可以在集合中获取所有表单元素吗?
答案 0 :(得分:3)
您可以使用以下方法遍历树并获取任何控件下方的所有子控件(在所有深度处)。
public static IEnumerable<Control> GetAllControls(Control root)
{
var stack = new Stack<Control>();
stack.Push(root);
while (stack.Any())
{
var next = stack.Pop();
foreach (Control child in next.Controls)
stack.Push(child);
yield return next;
}
}
然后,您可以将表单作为根传递,以便在单个序列中获取该表单中的所有控件。如果您希望全部使用ToList
,请使用List
。
如果您只想过滤掉特定类型的控件,请使用OfType
:
var textboxes = GetAllControls(someForm).OfTYpe<Textbox>();
答案 1 :(得分:0)
试试这个。在代码隐藏文件中进行控制,并给出一个所有控件的列表。
答案 2 :(得分:0)
使用this.Controls
(或更正式地:Control.Controls
)
要获取所有TextBox
控件,请使用:
this.Controls.OfType<Control>().Where(x => x is TextBox);
这只会获得顶级项目。如果你需要更深入(提示开始),你需要做一些递归。