我已經創建了一個具有63個窗體的vb.net應用程序。在每個表格label2
應該包含使用應用程序的用戶名。顯示給用戶的第一種形式是登錄表單。當用戶單擊此表單上的登錄按鈕時,所有新打開的窗口中的用戶名應出現在label2
的內部。我怎樣才能做到這一點?如何通過循環訪問不同的表單並更改vb.net中的標籤文本
回答
首先,我強烈建議將控件和標籤的名稱更改爲像userLabel這樣在將來更易於維護的名稱。
編輯:
當你的登錄表單顯示你沒有其他的窗戶打開,讓您的應用程序不存在(還),因此你可以不通過他們循環或改變狀態。
由於您有大量的表單,您應該嘗試找到不需要大量重複代碼的解決方案。其他人建議MDI窗口,這可能是一個解決方案。另一個解決方案是您創建的自定義登錄用戶控制。
這樣的自定義控件並不難創建。您可以按照自己的喜好設計風格,並在需要時添加更多功能(如註銷鏈接)。在此用戶控件的Load事件中,您可以檢索登錄的用戶名(通過靜態屬性或其他機制)並將其顯示在裏面。
有了這個,你所要做的唯一事情是發生在各種形式應該顯示用戶名該用戶的控制,其餘工作自動。有關如何創建用戶控件的幫助,在Google中有很多教程,基本上就像創建表單一樣。
除非是設計要求在每個形式的標籤,你可能要考慮使用的形式,是一個MDI容器作爲你的主要形式,增加了狀態欄,以這種形式的底部,並在一個存儲用戶名狀態欄字段。
這樣的用戶信息是用戶知道一個位置可用,不佔用寶貴的屏幕房地產有一個標籤,你不必關心新的形式。
如果設計中需要一個標籤,每個窗體,然後你最好的選擇是創建一個基類,每一表格從繼承。在表單加載事件期間,您可以使用表單的控件集合中的查找方法來查找包含用戶名稱並設置它的標籤(假定標籤都具有相同的名稱)。
例如:
Dim oLabel As Label
oLabel = TryCast(Me.Controls.Find("label2", True), Label)
If oLabel IsNot Nothing Then
oLabel.Text = globalusername
End If
答:我非常同意與AKZENT相對於一些一致和易於辨認的方式命名您的控件。我們現代化的快速機器的好處之一是我們可以在代碼中使用描述性名稱來表示變量和類。 :-)
B.有多種方法可以解決您的問題。雖然循環遍歷所有63種形式是其中之一,但它並不是最有效,最有效的或者再次可持續的。 C.不確定你是如何處理你的登錄信息的,所以我不確定用戶在登錄表單上點擊「確定」後會發生什麼。您是否設置了自己的登錄處理,還是使用內置身份驗證?
competent_tech是在正確的軌道上建議繼承。更進一步,您可以使用My.Application功能來包含您的全局變量。轉到您的項目屬性窗口/應用程序/查看應用程序事件。你會看到下面的代碼文件。添加指定的代碼:
Namespace My
Partial Friend Class MyApplication
'Add THIS code block:
Private _CurrentUserName As String = "Current User"
Public Property CurrentUserName() As String
Get
Return _CurrentUserName
End Get
Set(ByVal value As String)
_CurrentUserName = value
End Set
End Property
End Class
End Namespace
現在,您的登錄表單可以設置應用程序變量,像這樣:
Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
My.Application.CurrentUserName = Me.UsernameTextBox.Text
'YOUR LOGIN CODE HERE . . .
Me.Close()
End Sub
不要創建My.Application模塊內的類。利用項目/添加/新類 然後創建一個新的類,從System.Windows.Forms.Label繼承,如下(NOT內My.ApplicationEvents模塊!):
Public Class MyUserLabel
Inherits System.Windows.Forms.Label
Public Sub New()
Me.Text = My.Application.CurrentUserName
End Sub
End Class
您需要構建在MyUserLabel控件在工具箱中可見之前的項目。生成後,控件將可供您拖動到表單中。或者你可以使用範圍設置爲「整個項目」的Find/REplace。將「label2」替換爲「MyUserControl」
上述代碼將導致MyUserLabel的實例將每個實例的.Text屬性設置爲初始化時(即使在設計模式下)My.Application.CurrentUser變量表示的值。
然後使用MyUserLabel替換所有窗體上的Label2(您可以通過查找並將範圍替換爲整個項目來完成此操作)。
希望有所幫助。
下面是代碼:
Namespace My
' The following events are availble for MyApplication:
'
' Startup: Raised when the application starts, before the startup form is created.
' Shutdown: Raised after all application forms are closed. This event is not raised if the application terminates abnormally.
' UnhandledException: Raised if the application encounters an unhandled exception.
' StartupNextInstance: Raised when launching a single-instance application and the application is already active.
' NetworkAvailabilityChanged: Raised when the network connection is connected or disconnected.
Partial Friend Class MyApplication
'Add THIS code block:
Private _CurrentUserName As String = "Current User"
Public Property CurrentUserName() As String
Get
Return _CurrentUserName
End Get
Set(ByVal value As String)
_CurrentUserName = value
End Set
End Property
Public Class MyUserLabel
Inherits System.Windows.Forms.Label
Public Sub New()
Me.Text = My.Application.CurrentUserName
End Sub
End Class
End Class
末命名空間
我已經嘗試了上面的代碼,並且在構建項目之後,我看不到工具箱中的新控件....我在一個名爲mod1的模塊中創建了公共類.....並且還有我想要提及的是,我使用的是由兩個文本框和登錄按鈕 – user944591
定製的登錄表單(由我設計)登錄錯誤列表。項目是否成功完成? MyUSerLable沒有理由不應出現在工具箱中。通常在「組件」或「YourProjectNamespace組件」以及選擇箭頭。 – XIVSolutions
另外,沒有理由不能爲您的全局變量使用公共模塊,不過,我強烈建議重命名,以便您的代碼更易於使用/維護。但是,My.Application命名空間是一個更合乎邏輯的放置它的地方。 。 。 – XIVSolutions
- 1. 如何從循環訪問標籤並更改其文本
- 2. 通過訪問表單上的文本框循環並更改數據
- 3. 通過字符串數組循環並更改標籤文本
- 4. 使用循環通過按鈕單擊更改標籤文本?
- 5. 如何循環通過vb.net中的現有標籤
- 6. PHP循環通過html表格並獲取標籤文本
- 7. 如何通過ArrayList循環訪問java中的不同值
- 8. 循環通過文本框和標籤
- 9. 通過VBA更改訪問列標籤
- 10. 如何更改循環內的標籤
- 11. 標籤vb.net中的循環文件名
- 12. ASP.NET如何使用foreach循環訪問多個表單標籤文本屬性
- 13. 循環不會顯示錶單標籤中的文本
- 14. 通過文件循環並刪除幾行不同的文本
- 15. 如何通過單擊循環訪問LinkedHashMap中的數據
- 16. 通過ListView更改標籤文本ItemActivate
- 17. 如何通過xpath訪問基於標籤文本的輸入
- 18. 通過JQuery更改表單標籤上的標籤
- 19. 如何更改不同類中的標籤文本(C#)
- 20. 如何更改不同類中的標籤文本(C#)
- 21. 如何訪問地圖中的列表並通過該列表循環
- 22. 如何循環訪問特定標籤內的每個標籤?
- 23. 如何通過git標籤循環
- 24. 如何通過Progress View的值更改標籤文本
- 25. Rails通過表單域中的數據循環訪問
- 26. 循環通過Jquery標籤
- 27. 如何通過循環更新wpf文本塊的文本?
- 28. 訪問JSON中的嵌套值,不通過循環訪問
- 29. 如何使用for循環訪問所有孩子並逐個更改文本?
- 30. 如何從另一個表單更改標籤的文本?
登錄形式是第一種形式,只是一種形式是可見的一段時間......我想要的只是顯示的用戶名的功能,作爲label.text,誰已經登錄了應用程序...我想要在用戶登錄時在所有表單上設置標籤文本 – user944591
好吧,我添加了一些信息,可以幫助我回應。我還編輯了一些問題,以添加您剛告訴我的信息,並使其他人更容易理解您的需求。一旦您對一個答案感到滿意,請將其標記爲已接受的答案。這有助於其他類似的問題,並獎勵幫助你的人。 – aKzenT