2013-02-26 148 views
0

刚刚写了一个函数,用于检查HTML控件是否隐藏。 如何将参数myControl的System.Web.UI.HtmlControls.HtmlTableRow类型更改为支持任何HTML控件类型的类型。我宁愿不为任何html控件编写特定的函数。如何将任何HtmlControl作为参数传递给函数

public static bool IsUIElementHidden(System.Web.UI.HtmlControls.HtmlTableRow myControl) 
     {    
      if ((myControl.Style["display"] ?? "").ToLower().Equals("none") || (myControl.Style["visibility"] ?? "").ToLower().Equals("none")) 
      { 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
     } 

我试图使用WebControl类型,但是当我将控件传递给函数时出现错误。

+0

你得到的错误是什么? – Ameen 2013-02-26 15:13:35

+0

NB'visibility'的不可见值是'hidden'(或可能是'collapse'),而不是'none'。 – Rawling 2013-02-26 15:19:16

回答

2

这是基于对象层次的选择:

System.Object 
    System.Web.UI.Control 
    System.Web.UI.HtmlControls.HtmlControl 
     System.Web.UI.HtmlControls.HtmlContainerControl 
     System.Web.UI.HtmlControls.HtmlTableRow 

考虑到Style是继承了System.Web.UI.HtmlControls.HtmlControl我会选择:

static bool IsUIElementHidden(System.Web.UI.HtmlControls.HtmlControl myControl) 
1

您正在寻找Style财产,属于到System.Web.UI.HtmlControls.HtmlControl

所以这应该工作:

public static bool IsUIElementHidden(System.Web.UI.HtmlControls.HtmlControl myControl) 
     {    
      if ((myControl.Style["display"] ?? "").ToLower().Equals("none") || (myControl.Style["visibility"] ?? "").ToLower().Equals("none")) 
      { 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
     } 
0

假设你只有你希望传递给你的函数的几个控制类型,你可以通过一个通用的控制和一个字符串来决定投什么样的控制。然后,在您的函数中,将通用控件转换为特定的类型。

Private Sub setControl(ByVal control As Control, ByVal myType As String) 
     Select Case myType 
      Case myType = "label" 
       Dim newLabel As New Label 
       newLabel = CType(control, Label) 

      Case myType = "textbox" 
       Dim newTextBox As New TextBox 
       newTextBox = CType(control, TextBox) 
     End Select 
end sub 

您甚至可以放弃字符串并使用反射来确定它是什么类型的控件。

相关问题