【问题标题】:How to clear every TextBox inside a GroupBox [closed]如何清除 GroupBox 中的每个 TextBox [关闭]
【发布时间】:2018-11-26 01:22:18
【问题描述】:

我在清空 GroupBox 中的每个 TextBox 时遇到问题,因为我的循环仅在 textbox1 有价值时清除所有 TextBox,但如果我尝试绕过 textbox1 并跳转到输入数据到 textbox2,我的 @987654324 @ 方法不起作用。

如果需要更改,请查看我的循环代码:

Public Sub ClearCtrlText(ByVal root As Control)

    For Each ctrl As Control In root.Controls
        If TypeOf ctrl Is TextBox Then ' textbox set to empty string
            If ctrl.Text <> "" Then
                ctrl.Text = Nothing
            End If
        End If
    Next
End Sub

【问题讨论】:

    标签: vb.net winforms textbox


    【解决方案1】:

    我很想把它写成扩展方法:

    Imports System.Runtime.CompilerServices
    
    Public Module ControlExtensions
    
        <Extension>
        Public Sub ClearTextBoxes(source As Control)
            For Each child As Control In source.Controls
                Dim tb = TryCast(child, TextBox)
    
                If tb Is Nothing Then
                    child.ClearTextBoxes()
                Else
                    tb.Clear()
                End If
            Next
        End Sub
    
    End Module
    

    然后您可以在控件上调用它,就好像它是一个成员一样,例如

    GroupBox1.ClearTextBoxes()
    

    此方法还包括访问子容器内的子控件所需的递归,例如PanelGroupBox 内。

    【讨论】:

    • 如何添加这样的扩展?
    • 也许用你的眼睛。我发布的代码是一个模块,为什么不像任何其他模块一样添加它?
    • 抱歉,我认为这是作为模块添加的另一个项目
    • 这是一个和其他任何模块一样的模块。扩展方法必须在模块中声明。您可以将该方法添加到您已经拥有的模块中,或者您可以像我在这里所做的那样添加一个专用于扩展控件类的方法的模块。这就是我倾向于做的事情:每个扩展类型一个模块。一旦您拥有使用Extension 属性声明的模块和方法,就可以像成员一样调用该方法。我还建议您对扩展方法进行一些一般性阅读,以便您了解需要导入模块所属的命名空间之类的事情。
    • 感谢您的代码可以正常工作,我看到了我所犯的错误我删除了验证 textbox1 如果为空的 if 语句,这是使我的明文函数不起作用的语句 :)
    【解决方案2】:

    您需要像这样递归进入表单中的容器:

    Public Class Form1
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            ClearCtrlText(Me)
        End Sub
    
        Public Sub ClearCtrlText(ByVal root As Control)
            For Each ctrl As Control In root.Controls
                If TypeOf ctrl Is TextBox Then ' textbox set to empty string
                    If ctrl.Text <> "" Then
                        ctrl.Text = Nothing
                    End If
                ElseIf ctrl.HasChildren Then
                    ClearCtrlText(ctrl)
                End If
            Next
        End Sub
    
    End Class
    

    【讨论】:

    • 感谢您的回复,我会尝试您的答案:)
    • 我忘了说这段代码在一个模块里面
    • 它仍然绕过其他文本框
    • 你必须传入表单。它在一个模块中并不重要。它怎么不工作?提供有关您的设置的详细信息...
    • 我正在使用此功能来清除组框内的文本框,即。当我单击取消按钮时,ClearCtrlText(groupbox1)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 2015-08-29
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多