从公共模块中清除多个表单中的所有文本框

时间:2016-02-11 08:41:07

标签: .net vb.net textbox refactoring controls

我是vb.net的新手,实际上在这里添加我的第一个问题, 希望我的问题不要太蹩脚。

我的项目中有12个表单。 我创建了一个公共'模块,包含在各种表格中使用的程序和功能。

使用其中一个程序,我打算清除表单中的所有文本框 - 我所在的任何形式。 这是程序(在这里建议......):

Public Sub ClearTextBoxes()
    Dim MyControl As Control
    For Each MyControl In controls
        If TypeOf MyControl Is TextBox Then
            MyControl.Text = ""
        End If
    Next
End Sub

我想从任何形式调用它,使用表单名称,以便清除该活动表单中的所有文本框。

我想我应该使用变量(如me.name)调用该过程,并在过程本身中添加一个ByVal - 但是还无法完成

等待回复 感谢。

2 个答案:

答案 0 :(得分:0)

试试这个方法

 Public Sub CLEAR_TEXTBOXES(ByVal frm As Form)
        For Each txtctrl In frm.Controls.OfType(Of Windows.Forms.TextBox)()
            txtctrl.Clear()
        Next
 End Sub

并将其称为

CLEAR_TEXTBOXES(Me)

答案 1 :(得分:0)

你几乎拥有所需的一切。您只需要传递对要清除文本框的表单的引用。

但是您可能遇到的一个小问题是控件也可以有子控件(例如,组框中的文本框)。

这些未在.Controls集合中提取,因此您需要一个递归方法:

Public Sub ClearTextBoxesFromAControl(ctl As Control)
    For Each MyControl As Control In ctl.Controls
        If TypeOf MyControl Is TextBox Then
            MyControl.Text = ""
        End If
        If MyControl.HasChildren Then ClearTextBoxesFromAControl(MyControl)
    Next
End Sub

由于表单继承自控件,您只需将表单引用传递给方法,如下所示:

ClearTextBoxesFromAControl(Me)

额外信用:您甚至可以为表单创建扩展方法来执行此操作:

Public模块中:

<Extension()>
Public Sub ClearAllTextBoxes(ctl As Control)
    For Each MyControl As Control In ctl.Controls
        If TypeOf MyControl Is TextBox Then
            MyControl.Text = ""
        End If
        If MyControl.HasChildren Then ClearAllTextBoxes(MyControl)
    Next
End Sub

然后您可以像Me.ClearAllTextBoxes

一样调用它