我正在尝试使用LINQ的页面控件集合。 虽然这有效:
dim l = Me.Controls.OfType(Of TextBox).AsQueryable()
以下返回ArgumentExceptionError:
dim l = Me.Controls.AsQueryable()
我需要所有控件。有帮助吗? 感谢
答案 0 :(得分:1)
你试过了吗?
Me.Controls.Cast(Of Control)
出于兴趣,你为什么需要IQueryable
? IEnumerable<T>
对你来说不够吗? (这是Cast
的结果。)
仅调用AsQueryable的问题是控件集合不实现IEnumerable<T>
,而只是IEnumerable
。
答案 1 :(得分:1)
另外,不要忘记控件可以嵌套,只是询问页面的控件只会告诉你直接的孩子,但它不会告诉你这些控件中的控件:
Locate the web forms controls on a page by walking the Controls Collection
此示例仅查找Page对象中包含的控件以及作为页面直接子控件的控件。它找不到作为控件子级的文本框,而控件又是页面的子级。例如,如果您向页面添加了一个Panel控件,则Panel控件将是Page包含的HtmlForm控件的子控件,并且可以在此示例中找到它。但是,如果您随后将一个TextBox控件添加到Panel控件中,示例将不会显示TextBox控件文本,因为它不是页面的子项或者是页面子项的控件的子项。以这种方式遍历控件的更实际的应用是创建一个递归方法,可以在遇到时调用每个控件的Controls集合。但是,为清楚起见,下面的示例不是作为递归函数创建的。