2013-02-26 181 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 

您甚至可以放棄字符串並使用反射來確定它是什麼類型的控件。

相關問題