如何从另一种形式调用公共函数

时间:2015-03-08 18:36:54

标签: vb.net forms function call public

Frm1包含验证textbox的代码:

Public Function AlphabeticalOnly(ByVal Str As String) As Boolean
    Dim pattern As String = "^[a-zA-Z\s]+$"
    Dim reg As New Regex(pattern)
    If reg.IsMatch(Str) = False Then
        MsgBox(Str & " is invalid! Please enter alphabetical characters only!", MsgBoxStyle.Critical, "Error")
    End If
    Return reg.IsMatch(Str)
End Function

因为有相当多的验证,我不想再以其他形式重复所有代码。

Private Sub btnDone_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDone.Click
If AlphabeticalOnly(txtName.Text) = False Then
        Exit Sub
End If
...
End Sub

我尝试了另一种形式的上述代码,但错误列表显示未声明AlphabeticalOnly

我需要在代码中添加任何内容吗?

1 个答案:

答案 0 :(得分:3)

首先,不要将该功能放在表单上。如果它是所有表单共享的公共代码,请将其放在自己的类文件中。

其次,这个通用代码不应该通过消息框提示用户。此函数应该只执行逻辑而已。 (这也使得函数更容易进行单元测试。)然后允许使用代码(在本例中为表单)与用户交互。 (特别是因为当前实现检查匹配两次,这是不必要的。)

由于此函数不依赖于对象状态,因此可以将其设为Shared。像这样:

Public Class CommonFunctions
    Public Shared Function IsAlphabeticalOnly(ByVal Str As String) As Boolean
        Dim pattern As String = "^[a-zA-Z\s]+$"
        Dim reg As New Regex(pattern)
        Return reg.IsMatch(Str)
    End Function
End Class

然后在表单上,​​您可以调用该函数:

If CommonFunctions.IsAlphabeticalOnly(txtName.Text) = False Then
    MsgBox(Str & " is invalid! Please enter alphabetical characters only!", MsgBoxStyle.Critical, "Error")
End If