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

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

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

Re[4]: DLLクラスからフォームに呼び出し


(過去ログ 169 を表示中)

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

■97501 / inTopicNo.1)  DLLクラスからフォームに呼び出し
  
□投稿者/ omon (1回)-(2021/05/28(Fri) 23:57:40)

分類:[.NET 全般] 

ご質問があります。

VB.NETでクラスDLLを作成し、Form1がメインでクラスDLLを作りました。

クラスDLLをForm1に参照して入れています。

クラスDLLプロジェクトにモジュールを追加しました。

モジュールに

Public Module Crass1

Sub test()

If Form1.combobox1.selectedIndex=0 Then

End If
End Sub

と記入したのですが、エラーが出ます
***はメンバーではありません。
と出てしまいます。

From1プロジェクトにモジュールにいれれば出来るんですが。

フォームの一番上に
Imports Test'入れています。

DLLクラスプロジェクトに↑のコードのようにしたい場合はどのようにしたら出来ますでしょうか?

教えてください。お願いします。

環境はVistual Studio 2019 VB.NET Frameworck 4.7.2

引用返信 編集キー/
■97502 / inTopicNo.2)  Re[1]: DLLクラスからフォームに呼び出し
□投稿者/ 魔界の仮面弁士 (3109回)-(2021/05/29(Sat) 09:20:37)
No97501 (omon さん) に返信
> Public Module Crass1
crass [形容詞] ひどい、愚かな


> VB.NETでクラスDLLを作成し、Form1がメインでクラスDLLを作りました。

App1.dll を作成し、
Form1 を含む App2.DLL を作成した…?

で、それを App3.EXE から呼んでいる?


> Public Module Crass1
> Sub test()
> If Form1.combobox1.selectedIndex=0 Then

この Form1 は、どこで定義されていますか?
 (1) 自プロジェクト内で定義されている
 (2) このプロジェクトが参照している DLL で定義されている
 (3) このプロジェクトを参照している先のアプリで定義されている

1 や 2 であれば Form1 を呼ぶ方法もありますが、
3 の場合は直接呼び出すことはできません。

MessageBox.Show する際に、MessageBox クラスに Label1.Text の情報を渡すことはできますが、
MessageBox クラス自身が、内部で Label1 を参照することはできませんよね。それと同じこと。


たとえばこれを
 Sub test(combo As ComboBox)
  If combo.SelectedIndex = 0 Then
のような記述に変えてやれば、呼び出し側で
  〜.test(Form1.ComboBox1)
のようにすることは可能です。


> フォームの一番上に
> Imports Test'入れています。
唐突に Test 名前空間というものが現れましたが、
Test とはどのプロジェクトを指しているのでしょうか。
引用返信 編集キー/
■97506 / inTopicNo.3)  Re[2]: DLLクラスからフォームに呼び出し
□投稿者/ omon (2回)-(2021/05/29(Sat) 19:19:25)
魔界の仮面弁士さん回答ありがとうございます。

> App1.dll を作成し、
> Form1 を含む App2.DLL を作成した…?
>
> で、それを App3.EXE から呼んでいる?

クラスDLLは新しいプロジェクト名で1個作成し、Form1のみです。

ソリューション図
プロジェクト名
DLLプロジェクト名Test(test.dll)
-crass1.vb
From1プロジェクト名(winapp)
-Form1.vb
参照の中にtest.dllを追加している状態です。

test.dllからFrom1に呼び出ししているはずなのですが??


>>Public Module Crass1
>> Sub test()
>> If Form1.combobox1.selectedIndex=0 Then
>
> この Form1 は、どこで定義されていますか?
>  (1) 自プロジェクト内で定義されている
>  (2) このプロジェクトが参照している DLL で定義されている
>  (3) このプロジェクトを参照している先のアプリで定義されている
>
> 1 や 2 であれば Form1 を呼ぶ方法もありますが、
> 3 の場合は直接呼び出すことはできません。
>
> MessageBox.Show する際に、MessageBox クラスに Label1.Text の情報を渡すことはできますが、
> MessageBox クラス自身が、内部で Label1 を参照することはできませんよね。それと同じこと。

(2)です。


引用返信 編集キー/
■97507 / inTopicNo.4)  Re[3]: DLLクラスからフォームに呼び出し
□投稿者/ Azulean (1192回)-(2021/05/29(Sat) 21:12:37)
No97506 (omon さん) に返信
> ソリューション図
> プロジェクト名
> DLLプロジェクト名Test(test.dll)
> -crass1.vb
> From1プロジェクト名(winapp)
> -Form1.vb
> 参照の中にtest.dllを追加している状態です。
>
> test.dllからFrom1に呼び出ししているはずなのですが??

基本的に、参照は一方向にしか設定できません。
winapp が test.dll を参照する(Form1.vb から class1.vb を使っている)なら、
test.dll から winapp にあるものを使うこと(class1.vb が form1.vb を使うこと)はできません。


> (2)です。

前述の説明が正しいなら、(3) ですよ。

-----
解決方法はすでに魔界の仮面弁士さんが示されている「Sub test(combo As ComboBox)」のように、Form1 を使うのではなく、
ComboBox など winapp からも test.dll からも見える「共通の型」でやりとりすることです。
引用返信 編集キー/
■97512 / inTopicNo.5)  Re[4]: DLLクラスからフォームに呼び出し
□投稿者/ omon (3回)-(2021/05/31(Mon) 23:24:15)
ありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -