Vb.net 电子邮件验证问题

Vb.net 电子邮件验证问题,vb.net,validation,Vb.net,Validation,我正在尝试验证电子邮件地址字段。我使用Regex完成了它,它工作得很好,但问题是 我在验证事件中将e.cancel设置为True,因此除非用户输入正确的电子邮件id,否则它不允许用户更改焦点,即使这不是问题,但它甚至不允许用户关闭窗口/表单 我的意思是,如果用户试图中止完成交易他/她需要输入有效的电子邮件id 这是我的密码- Private Sub tbemail_Validating(ByVal sender As System.Object, ByVal e As System.Comp

我正在尝试验证电子邮件地址字段。我使用
Regex
完成了它,它工作得很好,但问题是

我在
验证
事件中将
e.cancel
设置为
True
,因此除非用户输入正确的电子邮件id,否则它不允许用户更改焦点,即使这不是问题,但它甚至不允许用户关闭窗口/表单

我的意思是,如果用户试图
中止
完成交易他/她需要输入有效的电子邮件id

这是我的密码-

  Private Sub tbemail_Validating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles tbemail.Validating

    Dim pattern As String = "^[a-z][a-z|0-9|]*([_][a-z|0-9]+)*([.][a-z|0-9]+([_][a-z|0-9]+)*)?@[a-z][a-z|0-9|]*\.([a-z][a-z|0-9]*(\.[a-z][a-z|0-9]*)?)$"


    Dim match As System.Text.RegularExpressions.Match = Regex.Match(tbemail.Text.Trim(), pattern, RegexOptions.IgnoreCase)
    If (match.Success) Then
    Else
        MessageBox.Show("Please enter a valid email id", "Checking")
        e.Cancel = True
    End If
End Sub

您应该将取消按钮的
CausesValidation
属性设置为
False
。这样,单击它不会引发
验证
事件,即使最后一个控件中的数据无效,也可以关闭表单。这假设表单是通过调用
ShowDialog

来显示的,千万不要编写愚蠢的
If…Else
语句。如果您有一个空的
If
块,那么您只编写了错误的代码。如果您只关心一个条件,则测试该条件并删除
其他条件
,即如果不匹配则删除
。然后成功
。是的!我会记住这一点。谢谢有更好的方法检查有效的电子邮件地址:。基本上,
尝试创建一个
新邮件地址(tbemail.Text.Trim())
。Class@jmcilhinney一个例外是,如果你想在代码中“文档化”,你在代码中考虑了<代码>的另一个条件,如果在设计中,但是你不希望发生任何事情。然而,该分支至少应该有一条评论。e、 g.
如果x=1,则“业务所有者”明确希望当它为1时不会发生任何事情。如果
如果我将取消按钮的CausesValidation属性设置为False,则用户将能够在字段中输入错误的值。我只是不想让用户输入错误的值。您明确表示问题在于,如果用户输入无效数据,您无法关闭表单。我告诉过你,如果用户输入了无效数据,如何关闭表单。从这个意义上说,删除验证事件是更好的选择。即使这样,我也可以关闭表单。“我在问题中主动提到了这一点”。不,你没有。你的问题中没有提到
CausesValidation
。您是否混淆了原因验证和取消?。你只是把一些简单的事情变得复杂。用户可以随时输入无效数据。你无法阻止这一切。你能做的就是阻止他们继续使用无效数据。如果他们单击“取消”按钮,则表示他们没有进展。如果他们取消,这不会对任何控件中的内容产生任何影响,因为您不会使用任何数据。