2011-08-15 7 views
0

이런 종류의 질문에는 몇 가지 대답이 있지만 그 중 아무 것도 나에게 명확하지 않은 것처럼 보이며 JQuery에 대한 경험이 없으므로 여기에서 묻습니다.VB Web App에서 텍스트 상자를 반복합니다.

Visual Web Designer 2010 Express의 기본 템플릿을 사용하여 Default.aspx에 여러 개의 텍스트 상자가있는 VB 웹 응용 프로그램이 있습니다. 가능한 모든 경우에 VB 솔루션의 일종을 사용하여 해당 텍스트 상자를 반복하고 사용자가 단추를 누를 때 지우고 싶습니다. 나는 이런 식으로 시도했다 :

Dim cControl As Control 
For Each cControl in Me.Controls 
    If cControl Is TextBox Then 
     cControl.Text = "" 
    EndIf 
Next 

그러나 이것은 작동하지 않는다. 누군가가 올바른 방향으로 나를 가리킬 수 있다면 그것은 좋을 것입니다. 감사! 일부 컨트롤은 아마 패널과 같은 다른 컨트롤에 중첩되어 있기 때문에

답변

2

코드에 2 가지 문제점이 있습니다. 첫째, 코드를 사용하여 :

For Each cControl in Me.Controls 
    ... 
Next 

은 그룹 상자에서 패널에 텍스트 상자의 모든 메인 페이지에있는 경우 작동하지 않습니다, 등

둘째, 코드

If cControl is Textbox Then 

은 cControl이 Textbox와 완전히 다른 개체이기 때문에 실패합니다. cControl의 유형이 텍스트 상자인지 확인하려고합니다. 코드에 대한 재귀 솔루션은 다음과 같습니다

Public Sub ClearTextBoxes (ctrl as Control) 
    If Ctrl.HasChildren Then 
    For each childCtrl as Control in Ctrl.Controls 
     ClearTextBoxes(childCtrl) 
    Next 
    Else 
    If TypeOf Ctrl is TextBox Then 
     DirectCast(Ctrl, TextBox).Text = String.Empty 
    End If 
    End If 
End Sub 

이 방법을 실행하려면 다음 부를 것이다 :

ClearTextBoxes(Me) 
+0

감사합니다! 이것은 나를 위해 일했다. – Cuthbert

0

당신은 컨테이너 컨트롤의 일종에 중첩 된 텍스트 상자가없는 한,이 작업을해야 ...

Dim cControl As Control 
    For Each cControl In Page.Form.Controls 
     If cControl.GetType().ToString() = "System.Web.UI.WebControls.TextBox" Then 
      CType(cControl, TextBox).Text = "" 
     End If 
    Next 
0

당신은, 재귀를 통해 루프 필요

public void ClearTextBoxes(Control ctrl) 
{ 
    foreach (Control childCtrl in ctrl.Controls) 
    { 
     if (childCtrl is TextBox) 
     { 
      ((TextBox)ctrl).Text = String.Empty; 
     } 

     ClearTextBoxes(childCtrl); 
    } 
} 
관련 문제