2017-01-22 60 views
0

我正在嘗試將活動記錄器添加到我的應用程序中。我希望保持我的代碼清潔,因此只想在我的代碼中聲明一次當前活動,然後將其顯示在lblStatus中並更新日誌文件。我試圖做到這一點是這樣的:在通過的表格上訪問標籤

我路過像這樣我的正常形式:

LogActivity.LogActivity(Me, "Checking program directories...") 

而且這是在做什麼工作的子。

Public Sub LogActivity(FormID As Form, ByVal ActivityDescription As String) 

'Log Activity code is here 

'Update Status Label on form 
FormID.lblStatus = ActivityDescription 

end sub 

但是Visual Studio的不理解語法,我可以理解爲什麼,但我不知道如何正確地做到這一點。

「lblStatus」不是「形式」

不過的一員,我的所有形式將調用此子,所以我真的需要我的代碼,以瞭解哪些形式稱爲子和更新特別是在那種形式上。

我可以只檢查表單的名字是這樣的:

If Form.Name = "Main_Loader" Then 
Main_Loader.lblStatus = ActivityDescription 
elseif Form.Name = "..." then 
end if 

但同樣,這不是很乾淨,似乎不是正確的方法......誰能指教?

+0

'系統,Windows.Forms'是從基類所有形式都繼承。它與「MyForm」或「Form1」不同或者你的表單類被命名。爲了保持表單清潔的希望將通過傳遞UI元素而不是變量來破滅, – Plutonix

+0

爲什麼不在更新標籤**之前**你打電話給你的記錄器,你已經有了適當的範圍。使用您的記錄器類僅更新您的日誌文件。它會讓你無需弄清楚調用形式,並將你的FormId變量轉換爲你的日誌類中的正確類型。 –

回答

1

假設標籤被稱爲 「lblStatus」 上的形式ALL,你可以簡單地使用Controls.Find()這樣的:

Public Sub LogActivity(FormID As Form, ByVal ActivityDescription As String) 
    Dim matches() As Control = FormID.Controls.Find("lblStatus", True) 
    If matches.Length > 0 AndAlso TypeOf matches(0) Is Label Then 
     Dim lbl As Label = DirectCast(matches(0), Label) 
     lbl.Text = ActivityDescription 
    End If 
End Sub 
+0

絕對完美,正是我在尋找的感謝。 – user3516240

1

您可以使用自定義事件。需要報告的信息的表單訂閱了具有LogActivity的表單上的事件。

Public Class frmActivity 'name of class is an example 
    Private log As New LogClass 
    Public Event LogActivity(ActivityDescription As String, log As LogClass) 
    'somewhere in code raise this event and send to info to main form 
    Private Sub SomeEventSub() 
    RaiseEvent LogActivity("some status", log) 
    End Sub 
    '... 
End Class 

Public Class frmMain 'name of class is an example 
    Private Sub btnGetActivity() Handles btnGetActivity.Click 
    Dim frm As New frmActivity 
    Addhandler frm.LogActivity, AddressOf LogActivity 
    frm.Show() 
    End SUb 
    Private Sub LogActivity(ActivityDescription As String, log As LogClass) 
    lblStatus = ActivityDescription 
    'then use the log variable to store the log data 
    End Sub 
    '... 
End Class