前提・実現したいこと
VBを使ってWindowsフォームアプリケーションを作成しています。
1ソリューション内の複数プロジェクトで、画面に表示しているテキストデータの共有がしたいです。
※社内情報のため、できるだけコードのコピペは控えています。ご了承ください。
質問概要:
下記の構成のように、Windowsアプリケーションからクラスライブラリに対して値を渡す上で困っています。
1メインプロジェクトのログイン.vbでログインして社員情報を取得
2メニュー.vb内の遷移先のボタンクリック内で、遷移先の初期画面のログイン情報(部署名と氏名をそれぞれLabalに)を表示。<コード⓵参照>
この時点で遷移先のサブプロジェクトの初期画面ではログイン情報は表示できています。
サブプロジェクト3,4,5の2つ目の画面で上手く表示ができません。<コード⓶、⓷参照>
構成:
メインプロジェクト(Windowsフォームアプリケーション)
-Login.vb
-Menu.vb
-LoginInfo.vb(コードのみ)
サブプロジェクト1(クラスライブラリ)1画面
サブプロジェクト2(クラスライブラリ)1画面
サブプロジェクト3(クラスライブラリ)3画面 以下同様
-Form1.vb
-Form2.vb
-Form3.vb
サブプロジェクト4(クラスライブラリ)2画面
サブプロジェクト5(クラスライブラリ)4画面
システム概要:
メニュープロジェクトのログイン画面(このソリューションの最初の画面)でログイン(社員IDとパスワード)します。
メニュープロジェクトのメニュー画面に遷移して、ボタンクリックでサブプロジェクトに遷移します。
遷移方法は、サブプロジェクトの初期画面のインスタンスを生成して、showしています。
ログインした時点で部署名(Dname)と氏名(Name)を取得してSyainオブジェクトに入れ、LoginInfo.vb内のコンストラクタに格納しています。
LoginInfo型のSyainオブジェクトは、Public Sharedにしているのでメインプロジェクト内では参照できています。
該当のソースコード
VB
1'<<<コード⓵:サブプロジェクトへの遷移時、サブプロジェクト>>> 2'サブプロジェクトのフォームインスタンスを格納するフィールド 3Private SubProjectInstance1 As SubProject.Form1 4 5Private Sub Button1 click …以下略 6 'サブプロジェクト3の初期フォームインスタンスを生成 7 Me.SubProjectInstance1 = New SubProject.Form1 8 '画面に表示 9 Me.SubProjectInstance1.show() 10 'ログイン情報を設定 11 Me.SubProjectInstance1.部署名.Text = Login.Syain.Dname 12 Me.SubProjectInstance1.氏名.Text = Login.Syain.Name 13End Sub
VB
1'<<<コード⓶:Form1.vbで表示されているLabelのテキストを格納し、共有化>>> 2 Public Shared mydname As String '部署名を共有 3 Public Shared myname As String '氏名を共有 4 5Private Sub …以下略 '画面ロード時 6 Dim mydname As String = Me.部署名.Text 7 Dim myname As String = Me.氏名.Text 8End Sub
VB
1'<<<コード⓷:Form2.vbで、Form1のLabelテキストを取得し、表示>>> 2Private Sub …以下略 '画面ロード時 3 Me.部署名.Text = Form1.mydname 4 Me.氏名.Text = Form2.mydname 5End Sub
### 試したこと
コード⓵のように、サブプロジェクト3のForm1内で、
Form2のインスタンスを生成して表示させることも試しましたがうまくいきませんでした。
実は不要という情報多いかもしれません。
メインプロジェクト内で、サブプロジェクトの初期画面に表示したテキストデータを、サブプロジェクト内でも共有することは不可能なんでしょうか?
以上、よろしくお願いいたします。
追記
思いついたので追記します。
現在:
メインプロジェクトで社員情報取得
Menu.vbの遷移時処理内で、各サブプロジェクトのForm1.vbのLabelに表示
↓
各サブプロジェクトのForm1.vbのLabalのテキストを取得し、Shared化
↓
各サブプロジェクトの各画面(Form2以降)において、Shared化された値をとってきて表示
案:
各サブプロジェクトのForm1.vbのコード内に、入れ物を作っておく
メインプロジェクトで社員情報取得し、Menu.vbの遷移時処理内で入れ物に格納
↓
各サブプロジェクトの全画面で、その入れ物の中の社員情報を取得し表示
入れ物はコンストラクタ、get,setメソッドのあるプロパティなど記述、をイメージしています。
これで可能でしょうか。
雑ですみません。
補足情報(FW/ツールのバージョンなど)
開発環境:Windows10、Visual Studio Community 2019
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。