C# と VB.NET の質問掲示板
ASP.NET、C++/CLI、Java 何でもどうぞ
C# と VB.NET の入門サイト
Re[4]: DLLクラスからフォームに呼び出し
(過去ログ 169 を表示中)
掲示板トップ
C# と VB.NET 入門
新規作成
利用方法/規約
トピック表示
ランキング
記事検索
過去ログ
[トピック内 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
-