遞迴方式的 FindControl

一般 FindControl 函式只能找到第一層子控制項,像 GridView、FormView 之類的複合式控制項,要尋找包含的控制項就非常麻煩,要明確找到父代控制項(容器),才能使用 FindControl 去找到子控制項。而且一旦所有往上的父代控制項有任一層變更,就需要再去修改程式碼。

為解決上述的問題,可以使用遞迴的方式來進行 FindControl 的動作,來簡化尋找控制項的麻煩。請參閱以下的 FindControlEx 函式。

 1       ' '' <summary>
 2       ' '' 遞迴尋找指定 ID 的控制項。
 3       ' '' </summary>
 4       ' '' <param name="Parent">父代控制項。</param>
 5       ' '' <param name="ID">欲尋找的控制項識別 ID。</param>
 6       ' '' <returns>回傳 ID 符合的控制項,若未找到則傳回 Nothing。</returns>
 7       Public   Function  FindControlEx( ByVal  Parent  As  System.Web.UI.Control,  ByVal  ID  As   String As  System.Web.UI.Control
 8           Dim  oCtrl  As  System.Web.UI.Control  =   Nothing
 9           Dim  oChildCtrl  As  System.Web.UI.Control  =   Nothing
10 
11           ' 先使用 FindControl 去尋找指定的子控制項 
12          oCtrl  =  Parent.FindControl(ID)
13 
14           ' 若尋找不到則往下層遞迴方式去尋找()
15           If  oCtrl  Is   Nothing   Then
16               For   Each  oChildCtrl  In  Parent.Controls
17                   ' 以遞迴方式呼叫原函式
18                  oCtrl  =  FindControlEx(oChildCtrl, ID)
19                   ' 若有尋找到指定控制項則離開迴圈
20                   If  oCtrl IsNot  Nothing   Then   Exit   For
21               Next
22           End   If
23 
24           Return  oCtrl
25       End Function


你可能感兴趣的:(find)