Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何从另一个窗体调用公共函数_Vb.net_Forms_Function_Call_Public - Fatal编程技术网

Vb.net 如何从另一个窗体调用公共函数

Vb.net 如何从另一个窗体调用公共函数,vb.net,forms,function,call,public,Vb.net,Forms,Function,Call,Public,Frm1包含验证文本框的代码: 因为有相当多的验证,我不想在其他表单中重复所有代码 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 我以另一种形式尝试了上面的代码,

Frm1包含验证文本框的代码:

因为有相当多的验证,我不想在其他表单中重复所有代码

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
我以另一种形式尝试了上面的代码,但错误列表显示未声明AlphacalOnly


有什么需要添加到代码中的吗?

首先,不要将函数放在窗体上。如果它是所有窗体共享的公共代码,请将其放入自己的类文件中

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

由于此函数不依赖于对象状态,因此可以将其共享。大概是这样的:

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

首先,不要将函数放在窗体上。如果它是所有窗体共享的公共代码,请将其放入自己的类文件中

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

由于此函数不依赖于对象状态,因此可以将其共享。大概是这样的:

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

我要提醒大家不要过度使用静态函数,因为它们会使单元测试变得更加困难,因为它们变成了无法伪造的东西。否则你的答案是正确的,我不知道是谁投了反对票。嗨,大卫!你的方法很管用!然而,我发现对每个文本框使用按键事件是一种更好的方法!无论如何谢谢你@铯95:很高兴我能帮忙!keypress事件同样好,这里的要点不是使用哪个事件,而是在哪里组织公共代码。这种助手方法肯定属于UI级别的助手类,而不是表单。它是否应该被共享,或者公共代码的结构应该是什么,这是有争议的。理想情况下,随着代码的增加,这将转向更面向对象的设计。但是对于这种单助手方法,目标是简单地将代码从表单中移出。我要警告不要过度使用静态函数,因为它们会使单元测试变得更加困难,因为它们变成了无法伪造的东西。否则你的答案是正确的,我不知道是谁投了反对票。嗨,大卫!你的方法很管用!然而,我发现对每个文本框使用按键事件是一种更好的方法!无论如何谢谢你@铯95:很高兴我能帮忙!keypress事件同样好,这里的要点不是使用哪个事件,而是在哪里组织公共代码。这种助手方法肯定属于UI级别的助手类,而不是表单。它是否应该被共享,或者公共代码的结构应该是什么,这是有争议的。理想情况下,随着代码的增加,这将转向更面向对象的设计。但是,对于这一个助手方法,目标是在实践中简单地将代码移出表单。