希望得到一些關於從表單上的實例化類捕獲返回消息的最佳實踐建議。最佳實踐 - 表單類接收來自類模塊的消息
在我的表單(form1.vb)中,我有一個標籤,它反映了正在進行的操作,代碼如下。在Form1.vb的
代碼以顯示消息:
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
我已經在三個方法來至今:
直接型呼叫。在這種情況下的類直接調用窗體的消息例行:
form1.DisplayMessage("Show This Message", True)
類中的RaiseEvent。在這種情況下,form1是發送消息的類的Friends WithEvents,並且該類將事件引發到窗體。
**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)
有一個EventArgs類處理該事件。在這種情況下,我們有一個EventArg.vb類,每當我們引發事件時就會實例化。
**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
情景1看起來是最簡單的,儘管我被告知不要這樣,並被要求提出一個事件。隨着時間的推移,我遇到了場景3,其中涉及到了另一個場景與場景2.
因此,問題是...... 在這三種方法之間,這將是從類中返回消息的「正確」表格?根據場景3,額外的EventArg類是否必要,因爲場景2也可以正常工作?
非常感謝提前。
「最佳實踐」取決於情況。三種形式中的任何一種都可以根據用例進行工作。但是,'Application.DoEvents',默認表單實例和非標準事件簽名不是任何最佳實踐的一部分 – Plutonix
最差的做法:[Application.DoEvents()](http://stackoverflow.com/a/5183623/832052) – djv
你應該真的能夠做'lblShow.Text = Msg',除非你從另一個線程運行。爲什麼'Application.DoEvents'和'Refresh'放在首位? – djv