■97545 / ) |
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 のどちらに担当させるのかを 明確にしておくようにしましょう。
|
|