質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

1回答

2403閲覧

<VB>1ソリューション複数プロジェクトでのプロジェクト間での値の受け渡し

urozero

総合スコア21

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2020/03/24 03:22

編集2020/03/24 07:45

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

外していたらすみません。
Shared宣言をしている変数への代入なので、下記のように書かないとだめなのではないでしょうか。

VB

1'<<<コード⓶:Form1.vbで表示されているLabelのテキストを格納し、共有化>>> 2 3Public Class Form1 4 Public Shared mydname As String '部署名を共有 5 Public Shared myname As String '氏名を共有 6 7Private Sub Form1_Load(…以下略 '画面ロード時 8 Form1.mydname= Me.部署名.Text 9 Form1.myname = Me.氏名.Text 10End Sub 11 12end Class

元のコードの書き方

VB

1Private Sub …以下略 '画面ロード時 2 Dim mydname As String = Me.部署名.Text 3 Dim myname As String = Me.氏名.Text 4End Sub

だと、ロードイベントハンドラ内のローカル変数をShared変数と別に宣言しているので、このローカル変数はイベントハンドラから出たところで破棄されます。

投稿2020/03/25 02:15

編集2020/03/25 02:18
KoichiSugiyama

総合スコア3041

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問