我得到一个aspx页面中所有控件的通用列表。我要对该列表的每个元素进行的操作是为这些aspx控件的属性Visible和Enabled设置一个值。
我不知道如何从通用列表的每个元素中获取TYPE。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim controlList As New List(Of Control)
controlList = AddControls(Page.Controls, controlList)
For Each ctl As Control In controlList
Response.Write(ctl.ID & "<br/>")
'Here I setup property Enabled of control textbox1
CType(Me.FindControl("textbox1"), TextBox).Enabled = True
'I'd like to setup property Enabled of control ctl.ID, but how to invoke <type of ctl>
CType(Me.FindControl(ctl.ID), <type of ctl> ).Enabled = True
Next
End Sub
Private Function AddControls(ByVal page As ControlCollection, ByVal controlList As List(Of Control)) As List(Of Control)
For Each c As Control In page
If c.ID IsNot Nothing Then
controlList.Add(c)
End If
If c.HasControls() Then
AddControls(c.Controls, controlList)
End If
Next
Return controlList
End Function
编辑1:
如果我尝试:
For Each ctl As Control In controlList
Response.Write(ctl.ID & "<br/>")
CType(Me.FindControl(ctl.ID), **ctl.GetType()** ).Enabled = True
Next
我收到错误:输入'ctl.GetType'未定义。
如果我尝试:
For Each ctl As Control In controlList
Response.Write(ctl.ID & "<br/>")
CType(Me.FindControl(ctl.ID), **WebControl** ).Enabled = True
Next
我收到错误:无法将对象类型'System.Web.UI.HtmlControls.HtmlForm'转换为'System.Web.UI.WebControls.WebControl'
编辑2:
如果我尝试:
For Each ctl As Control In controlList
Response.Write(ctl.ID & "<br/>")
CType(ctl, WebControl).Enabled = False
Next
我收到错误:无法将对象类型'System.Web.UI.HtmlControls.HtmlForm'转换为'System.Web.UI.WebControls.WebControl'
我不知道我在这里缺少什么。
答案 0 :(得分:0)
你不应该像控件(或WebControl)一样都有.Visible和.Enabled,而不是使用List&lt; Control&gt;使用List&lt; WebControl&gt;。
然而,在回答您的实际问题时,您可以调用object.GetType()来返回类型,然后您可以使用反射来获取类型名称。
答案 1 :(得分:0)
我不确定我到底知道你在问什么,但是因为你在ASP.NET中这样做我猜你所有的控件都属于System.Web.UI.WebControls
,所以你是否尝试过转换为通用WebControl
?
CType(ctl, WebControl).Enabled = True
您网页的所有UI元素都应该从WebControl
继承,该.Enabled
具有.Visible
和.GetType()
属性。
如果您只想针对特定类型执行此操作,例如,您希望遍历每个控件但只想禁用文本框并使按钮不可见,则可以使用If ctl.GetType(ctl) = GetType(TextBox) Then
CType(ctl, WebControl).Enabled = False
ElseIf ctl.GetType(ctl) = GetType(Button) Then
CType(ctl, WebControl).Visible = False
End If
来查找类型:< / p>
{{1}}