2011-10-31 4 views
0

63フォームを持つvb.netアプリケーションを作成しました。各フォームのlabel2には、アプリケーションを使用するユーザー名が含まれている必要があります。ユーザーに表示される最初のフォームはログインフォームです。ユーザーがこのフォームのログインボタンをクリックすると、新しく開かれたすべてのウィンドウのユーザー名がlabel2に表示されます。これどうやってするの?ループを介して異なるフォームにアクセスし、vb.netのラベルテキストを変更する方法

答えて

0

まず最初に、あなたのコントロールとラベルの名前を、将来的にuserLabelのようなより保守的なものに変更することを強くお勧めします。

編集:

すると、あなたのアプリケーションのために、彼らは(まだ)存在していないので、あなたがそれらをループすることはできませんか、状態を変更するので、あなたは、他のウィンドウを開いていない、あなたのログインフォームが表示されます。

フォームが多数あるため、繰り返しの多いコードを必要としないソリューションを見つけようとする必要があります。他の人は、MDIウィンドウを提案しました。もう1つのソリューションは、作成するカスタムログインユーザーコントロールです。

このようなカスタムコントロールを作成することは難しくありません。必要に応じてスタイルを設定し、必要に応じて後で機能を追加することもできます(ログアウトリンクなど)。このユーザーコントロールのLoadイベントでは、ログインしたユーザー名を静的プロパティまたはその他のメカニズムを介して取得し、内部に表示できます。

これで、ユーザー名を表示する必要があるすべてのフォームにこのユーザーコントロールを配置し、残りは自動的に動作させるだけです。ユーザーコントロールを作成する方法については、Googleに多くのチュートリアルがあります。基本的にフォームを作成するのと同じです。

+0

ログインフォームが最初のフォームで、ただ一つの形が一度に表示されている...私が欲しい機能だけでユーザー名を表示することです、label.textとして、誰がアプリケーションにサインインしましたか...ユーザーがログインしたときに、すべてのフォームにラベルテキストを設定します。 – user944591

+0

私の回答に役立つ情報を追加しました。私はあなたの質問を編集して、ちょうど私に言った情報を追加し、他の人があなたが必要とするものを理解しやすくしました。 1つの答えに満足したら、それを受け入れられた答えとしてマークしてください。これは、類似の問題を抱えている他の人を助け、あなたを助けた人々に報酬を与えます。 – aKzenT

0

デザインに各フォームのラベルが必要な場合を除き、MDIコンテナをメインフォームとして使用し、このフォームの下部にステータスバーを追加し、ユーザー名を1つに格納することを検討してくださいステータスバーフィールドの

この方法では、ユーザーが知っている1つの場所でユーザー情報を利用できるため、貴重な画面の不動産をラベルで取り込まず、新しいフォームについて心配する必要はありません。

デザインに各フォームのラベルが必要な場合は、各フォームが継承する基本クラスを作成することをお勧めします。フォームのLoadイベント中に、FormのControlsコレクションのFindメソッドを使用して、ユーザー名を保持するラベルを検索して設定できます(ラベルはすべて同じ名前であることが前提です)。例えば

:私は強く、いくつかの一貫性と容易に認識方法であなたのコントロールの名前付けに関してAKZENTに同意

Dim oLabel As Label 

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

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

A.。近代的で高速なマシンのメリットの1つは、変数とクラスのコードで説明的な名前を使用できることです。 :-)

B.問題を解決する方法はいくつでもあります。 63種類すべてのフォームをループすることはその中の1つですが、それは最も効果的で効果的ではなく、やり直しが困難です。

C.ログインの処理方法がわからないため、ユーザーがログインフォームで[OK]をクリックした後に何が起きるかわかりません。独自のログイン処理を設定しましたか、または組み込みの認証を使用していますか?

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変数で表される値に設定します。

次に、すべてのフォームのLabel2をMyUserLabelに置き換えます(これは、検索とスコープをプロジェクト全体に置き換えて行うことができます)。

希望に役立ちます。ここで

はコードです:

 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という名前のモジュールでパブリッククラスを作っています.....また私も私は2つのテキストボックスとログインボタン – user944591

+0

で私が設計したカスタムのログインフォームを使用していると言いたいと思います。エラーリストを見てください。プロジェクトは正常に構築されましたか? MyUSerLableがツールボックスに表示されるべきではありません。通常、「コンポーネント」または「YourProjectNamespaceコンポーネント」に、選択矢印とともに表示されます。 – XIVSolutions

+0

また、グローバル変数にパブリックモジュールを使用することができない理由はありませんが、コードの使用/保守が容易になるように名前を変更することを強くお勧めします。ただし、My.Application名前空間は、それを配置するより論理的な場所です。 。 。 – XIVSolutions

関連する問題