Hoping to get some best-practice advise with regards to capturing a returned message from an instantiated class on my form.
In my form (form1.vb), I have a label which reflects what is being done, with the code below.
Code in form1.vb to display message:
Public Sub DisplayMessage(ByVal Msg as String, ByVal Show as Boolean)
    Application.DoEvents()
    If Show Then
        lblShow.Text = Msg
        lblShow.Refresh()
    End If
End Sub
I have came across three methods so far:
- Direct Form Call. In this scenario the class directly calls the form's message routine: - form1.DisplayMessage("Show This Message", True)
- RaiseEvent within class. In this scenario form1 is Friends WithEvents of the class sending the message, and the class raises the event to the form. 
 - **Declared in Form1.vb** Friend WithEvents Class1 as New Class1 **Declared in Class1.vb** Public Event SetMessage(ByVal Msg As String, ByVal Show As Boolean) **Used in Class1.vb** RaiseEvent SetMessage("Show This Message", True)
- Have an EventArgs class handle the event. In this scenario we have an EventArg.vb class which is instantiated whenever we raise the event. 
 - **Declared in Form1.vb** Friend WithEvents Class1 as New Class1 Private Sub class1_DisplayMessage(ByVal Msg As String, ByVal showAs Boolean, ByRef e As ProgressMessageEventArgs) Handles Class1.SetMessage DisplayMessage(Msg, Show) End Sub
    **Declared in Class1.vb**
    Public Event SetMessage(ByVal msg As String, ByVal Show As Boolean, ByRef e As ProgressMessageEventArgs)
    Protected Sub CaptureMessage(ByVal msg As String, ByVal Show As Boolean)
        RaiseEvent SetMessage(message, ShowList, New ProgressMessageEventArgs(message))
    End Sub
    **Used in Class1.vb**
    RaiseEvent CaptureMessage("Show This Message", True)
    **EventArg.vb created to handle ProgressMessageEventArgs class**
    Public NotInheritable Class ProgressMessageEventArgs
        Inherits System.EventArgs
        Public txt As String
        Public Sub New(ByVal txt As String)
            MyBase.New()
            Me.Text = txt 
        End Sub
    End Class
Scenario 1 is seemingly the simplest, though I was advised against this and asked to raise an event instead. Over time I came across scenario 3 which involves an additional class vs scenario 2.
Therefore, the question is... Between these three methods, which would be the "proper" way of returning a message from a class to the form? Is the additional EventArg class as per scenario 3 necessary since scenario 2 works fine as well?
Many thanks in advance.
 
    