C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 新しいプロジェクトを複数追加してコンボ標示されない


(過去ログ 169 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■97544 / inTopicNo.1)  新しいプロジェクトを複数追加してコンボ標示されない
  
□投稿者/ エイ (17回)-(2021/06/03(Thu) 20:33:43)

分類:[.NET 全般] 

VB.Net vistual studio 2019

新しいプロジェクトを複数追加したのですが・・・・。

図で表すと

Mainプロジェクト(スタートアップ起動時設定)
Main.vb
参照→App2.exe追加

App2プロジェクト(アプリケーションフォーム)
Form1.vb
モジュール1.vb
を追加しました。
-------------------------------------------------

疑問1
Main.vb

Button1_Click
dim Fom As new App2.Form1
Fom.show
end sub

--------------------------------------------------
App2のForm1は

Form1.vb

Private Sub Combobox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles Combobox1.SelectedIndexChanged

TextBox1.Text = Combobox1.Text

モジュール1.test'AAAと表示される

end sub

モジュール1

Public Sub Test

Form1.Combobox1.Items.Add("AAA")

end sub

・App2からのコンボボックスが表示されるはずなのにビルド→デバック開始→mainからApp2.Form1開く→コンボボックスが表示
されないです。


疑問2
・ビルドした保存場所にApp2.exeを起動するとコンボボックスが表示されています。?

・mainからApp2を開くとコンボボックスが表示されません。なぜでしょうか?

解決したい事
・Mainからapp2を開いてコンボボックスが表示させたいです。
エラーなどは問題ありません。

App2.exeを直接著起動する時はコンボ標示されるんですが・・・。
Main.exe起動後、Button1クリック→app2.exe起動→コンボボックスを見ても空白のままになっています。

何が原因でこうなるのかは分かりません。

何方が解決策教えてください。

モジュール使わないでForm1のコードに書けば問題ないんですけど。

作ったコンボアイテムが数百個ある為、モジュールの中に
Public Sub Test
〜From1.combo省略.add("AAA")’一個のみ
end sub

新しいプロジェクトを作らずにMainプロジェクトでモジュールなど追加すればいいと思ったんですけど、分けかわからなくなるので、新しいプロジェクトを作り、モジュール作りました。

長文失礼いたしました。

よろしくお願いします。












引用返信 編集キー/
■97545 / inTopicNo.2)  Re[1]: 新しいプロジェクトを複数追加してコンボ標示されない
□投稿者/ 魔界の仮面弁士 (3119回)-(2021/06/03(Thu) 20:59:47)
2021/06/03(Thu) 21:00:08 編集(投稿者)

No97544 (エイ さん) に返信
> App2.exeを直接著起動する時はコンボ標示されるんですが・・・。
標示
表示


> Mainプロジェクト(スタートアップ起動時設定)
> Main.vb
> 参照→App2.exe追加
> App2プロジェクト(アプリケーションフォーム)
> Form1.vb
> モジュール1.vb

ソリューション エクスプローラーで見ると、こういう階層ですね。

YourSolution.sln
├App1.vbproj
│└Main.vb
└App2.vbproj
 ├Form1.vb
 └モジュール1.vb


> 疑問1
> dim Fom As new App2.Form1

App2.exe を参照するのは珍しいですね。
App2.dll を参照することはよくありますが。


> Public Sub Test
> Form1.Combobox1.Items.Add("AAA")

たとえば、
 Dim f1 As New App2.Form1()
 Dim f2 As New App2.Form1()
 f1.Show()
 f2.Show()
のようにすれば、Form1 が 2 つ表示されるわけです。

モジュール1 上に書かれた Form1.ComboBox1 というコードは、
上記のように同じフォームが複数表示されていた場合に、一体
どちらのフォームの ComboBox を指していることになるでしょう?

はい、実際はどちらでもありません。

暗黙的な Form1 変数(既定のフォーム インスタンス)と
New App2.Form1() で生成したフォームは別物です。
https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/objects/my-forms-object


ですので、Form1.ComboBox1 でのアクセスは使わないようにしましょう。

暗黙的なフォームインスタンスではなく、常に
明示的なフォームインスタンスを使うようにします。
(たとえば Form1 型の変数を用意しておき、それを通じてアクセスします)


> ・mainからApp2を開くとコンボボックスが表示されません。なぜでしょうか?
開くだけなら Process.Start メソッドで App2.exe を起動する方法が使えます。


> モジュール使わないでForm1のコードに書けば問題ないんですけど。
Public Sub Test(f As Form1)
 f.ComboBox1.Items.Add("XXX")
End Sub
のようにして、呼び出し時に引数で Form1 のインスタンスを渡せば OK。

引数ではなくフィールド変数で管理しても良いですが、その場合は、
そのフォームを生成する役目を App1 / App2 のどちらに担当させるのかを
明確にしておくようにしましょう。
引用返信 編集キー/
■97546 / inTopicNo.3)  Re[2]: 新しいプロジェクトを複数追加してコンボ標示されない
□投稿者/ エイ (19回)-(2021/06/03(Thu) 22:09:53)
No97545 (魔界の仮面弁士 さん) に返信
魔界の仮面弁士 さん回答ありがとうございます。

> ソリューション エクスプローラーで見ると、こういう階層ですね。
>
> YourSolution.sln
> ├App1.vbproj
> │└Main.vb
> └App2.vbproj
>  ├Form1.vb
>  └モジュール1.vb


その通りです。


> ですので、Form1.ComboBox1 でのアクセスは使わないようにしましょう。

Form1.ComboBox1 でのアクセスは基本的に使わないで↓

> Public Sub Test(f As Form1)
>  f.ComboBox1.Items.Add("XXX")
> End Sub

↑のコード参考して作ってみます。
>>App2.dll を参照することはよくありますが。
dllの場合でも可能であれば。作り直しした方がいい気がしました。
ありがとうございました。


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -