1

テキストボックスとドロップダウンで構成されるページのコントロールを循環させてクリアしようとしています。

デバッグすると、親は現在のページ、値は ASP.nameOfCurrentpage_aspx と等しく、タイプは system.web.ui.page と等しくなりますが、c は ASP.site_master の値と system.web.ui.control のタイプを持ちます。また、x を入力して検出されたコントロールの数を確認すると、ページに 15 個程度のテキスト ボックスがあるにもかかわらず、x は 1 として返されます。c に ASP.nameOfCurrentpage_aspx の値を強制する方法はありますか? それとも私の問題ではないですか?どんな助けでも大歓迎です。

Protected Sub btnClear_Click(sender as Object, e as System.eventargs) Handles btnClear.Click
   ClearForm(Page)

End Sub

Public Sub ClearForm(ByRef Parent As Control)
    Dim c As Control
    Dim x As Integer = Parent.Controls.Count
    For Each c In Parent.Controls
        If c.GetType.ToString = "System.Web.UI.HtmlControls.HtmlForm" Then
            ClearForm(c)
        ElseIf c.GetType() Is GetType(TextBox) Then
            'is it a Text Box?
            Dim t As TextBox = c
            t.Text = ""
        ElseIf c.GetType() Is GetType(DropDownList) Then
            'is it a dropdown list?
            Dim d As DropDownList = c
            d.ClearSelection()
        End If
    Next

End Sub
4

3 に答える 3

1

いつもありがとうございます。すべての答えを試したわけではありませんが、アイデアに使用しました。これは私たちが仕事で思いついたものであり、ページ上のすべてのコントロールを見つけてクリアします。マスターサイト(cph)にリンクされているコンテンツプレースホルダーを見つける必要がありました。もう一度、すべての提案に感謝します。

Public Sub ClearForm(ByRef Parent As Control)
    Dim cph As System.Web.UI.WebControls.ContentPlaceHolder = Master.FindControl("MainBody")
    Dim c As Control
    Dim x As Integer = Parent.Controls.Count
    For Each c In cph.Controls
        If c.GetType.ToString = "System.Web.UI.HtmlControls.HtmlForm" Then
            ClearForm(c)
        ElseIf c.GetType() Is GetType(TextBox) Then
            'is it a Text Box?
            Dim t As TextBox = c
            t.Text = ""
        ElseIf c.GetType() Is GetType(DropDownList) Then
            'is it a dropdown list?
            Dim d As DropDownList = c
            d.ClearSelection()
        End If
    Next

End Sub
于 2012-08-16T15:36:08.300 に答える
1

HTMLForm コントロールは、MasterPage の下にネストされている可能性があります。関数を完全に再帰的に使用するか、If ステートメントにマスター ページを検索する句を追加します。これは、ブレークポイントとウォッチ ウィンドウが最適な場所です。

元:

ElseIf c.GetType.ToString = "ASP.MasterPageName_Master" Then
   ClearForm(c)
于 2012-08-15T20:40:51.243 に答える
0

コントロールを使用して.NETで何かをプログラミングしてからしばらく経ちました.MVCは私を愚かに甘やかしたり、VB.NETを使用したりしました...

ただし、おそらくコントロールのスタックを再帰する必要があると思います。

Protected Sub btnClear_Click(sender as Object, e as System.eventargs) Handles btnClear.Click
   ClearForm(Page)

End Sub

Public Sub ClearForm(ByRef Parent As Control)
    Dim c As Control
    Dim x As Integer = Parent.Controls.Count
    For Each c In Parent.Controls
        If c.GetType.ToString = "System.Web.UI.HtmlControls.HtmlForm" Then
            ClearForm(c)
        ElseIf c.GetType() Is GetType(TextBox) Then
            'is it a Text Box?
            Dim t As TextBox = c
            t.Text = ""
        ElseIf c.GetType() Is GetType(DropDownList) Then
            'is it a dropdown list?
            Dim d As DropDownList = c
            d.ClearSelection()
        ElseIf c.Controls != null ' Does VB.NET support nulls? I forget
            ClearForm(c.Controls)
        End If
    Next

End Sub
于 2012-08-15T20:21:41.773 に答える