je les classes suivantes:VB.NET: WithEvents ne fonctionne pas
Public Class Email
Private Shared ReadOnly EMAIL_REGEX = "\b[a-zA-Z]+[a-zA-Z0-9._+-][email protected]" + _
"[a-zA-Z0-9.-]+\.[a-zA-Z]{2,3}\b"
Private _email As String
Public Event emailCreated()
' Declare empty constructor private so the only way to create an object
' is using new (email)
Private Sub New()
End Sub
Sub New(ByVal email As String)
If Regex.IsMatch(email, EMAIL_REGEX) Then
_email = email
RaiseEvent emailCreated()
Else
Throw New Exception("Email Not Valid")
End If
End Sub
ReadOnly Property Email() As String
Get
Return _email
End Get
End Property
End Class
Et
Public Class EmailForm
WithEvents myEmail As Email
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
myEmail = New Email(TextBox1.Text)
Catch ex As Exception
MessageBox.Show("Exception: " & ex.Message)
End Try
End Sub
Public Sub emailCreated() Handles myEmail.emailCreated
MessageBox.Show("New Email Created")
End Sub
End Class
Si créer un e-mail erronée permet de dire "email" l'exception est correctement mis en mémoire cache et un message est montré cependant je saisis un email valide l'événement n'est pas levé, l'objet est créé mais aucun message n'est montré et aucune erreur ou exception n'est levée je suspecte qu'il a quelque chose faire avec using "myemail = nouvel email (email)" mais j'ai vu des exemples d'utilisation de nouveau avec withevents sans problème. J'aprécier toute entrée sur ce problème
merci
Edit: pour référence future - VB.NET - problem with member's event handling
Merci pour votre réponse Je n'étais pas au courant de la classe MailAddress mais cela ne résout pas le problème de l'événement. – Hei
Je comprends maintenant, fondamentalement l'événement est soulevé avant qu'il puisse être manipulé, la solution évidente semble être soulevant l'événement en dehors du constructeur, est-il un moyen de le faire sans utiliser un processus en deux étapes comme "e = new email () e.Email = "[email protected]" "? – Hei
Oui, mais vous ne devriez pas. Il serait beaucoup plus propre d'utiliser une propriété à la place. – SLaks