2011-10-31 21 views

回答

0

首先,我強烈建議將控件和標籤的名稱更改爲像userLabel這樣在將來更易於維護的名稱。

編輯:

當你的登錄表單顯示你沒有其他的窗戶打開,讓您的應用程序不存在(還),因此你可以不通過他們循環或改變狀態。

由於您有大量的表單,您應該嘗試找到不需要大量重複代碼的解決方案。其他人建議MDI窗口,這可能是一個解決方案。另一個解決方案是您創建的自定義登錄用戶控制。

這樣的自定義控件並不難創建。您可以按照自己的喜好設計風格,並在需要時添加更多功能(如註銷鏈接)。在此用戶控件的Load事件中,您可以檢索登錄的用戶名(通過靜態屬性或其他機制)並將其顯示在裏面。

有了這個,你所要做的唯一事情是發生在各種形式應該顯示用戶名該用戶的控制,其餘工作自動。有關如何創建用戶控件的幫助,在Google中有很多教程,基本上就像創建表單一樣。

+0

登錄形式是第一種形式,只是一種形式是可見的一段時間......我想要的只是顯示的用戶名的功能,作爲label.text,誰已經登錄了應用程序...我想要在用戶登錄時在所有表單上設置標籤文本 – user944591

+0

好吧,我添加了一些信息,可以幫助我回應。我還編輯了一些問題,以添加您剛告訴我的信息,並使其他人更容易理解您的需求。一旦您對一個答案感到滿意,請將其標記爲已接受的答案。這有助於其他類似的問題,並獎勵幫助你的人。 – aKzenT

0

除非是設計要求在每個形式的標籤,你可能要考慮使用的形式,是一個MDI容器作爲你的主要形式,增加了狀態欄,以這種形式的底部,並在一個存儲用戶名狀態欄字段。

這樣的用戶信息是用戶知道一個位置可用,不佔用寶貴的屏幕房地產有一個標籤,你不必關心新的形式。

如果設計中需要一個標籤,每個窗體,然後你最好的選擇是創建一個基類,每一表格從繼承。在表單加載事件期間,您可以使用表單的控件集合中的查找方法來查找包含用戶名稱並設置它的標籤(假定標籤都具有相同的名稱)。

例如:

Dim oLabel As Label 

oLabel = TryCast(Me.Controls.Find("label2", True), Label) 

If oLabel IsNot Nothing Then 
    oLabel.Text = globalusername 
End If 
0

答:我非常同意與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 

末命名空間

+0

我已經嘗試了上面的代碼,並且在構建項目之後,我看不到工具箱中的新控件....我在一個名爲mod1的模塊中創建了公共類.....並且還有我想要提及的是,我使用的是由兩個文本框和登錄按鈕 – user944591

+0

定製的登錄表單(由我設計)登錄錯誤列表。項目是否成功完成? MyUSerLable沒有理由不應出現在工具箱中。通常在「組件」或「YourProjectNamespace組件」以及選擇箭頭。 – XIVSolutions

+0

另外,沒有理由不能爲您的全局變量使用公共模塊,不過,我強烈建議重命名,以便您的代碼更易於使用/維護。但是,My.Application命名空間是一個更合乎邏輯的放置它的地方。 。 。 – XIVSolutions

相關問題