回答編集履歴
1
追記
answer
CHANGED
@@ -1,1 +1,98 @@
|
|
1
|
-
各ライブラリで終わる時にイベントを発生させて、メイン側でそれを処理すればいいのではないでしょうか。
|
1
|
+
各ライブラリで終わる時にイベントを発生させて、メイン側でそれを処理すればいいのではないでしょうか。
|
2
|
+
|
3
|
+
|
4
|
+
### 追記
|
5
|
+
微妙に違います。
|
6
|
+
|
7
|
+
DLL側で適切なところで下記のようにイベントを定義して
|
8
|
+
```VBNET
|
9
|
+
Public Event SubProjectEnd(sender As Object, e As EventArgs)
|
10
|
+
```
|
11
|
+
終了する時に下記のようにイベントを発生させます。
|
12
|
+
```VBNET
|
13
|
+
Private Sub CloseButton_Click(sender As Object, e As EventArgs) Handles CloseButton.Click
|
14
|
+
Me.Close()
|
15
|
+
RaiseEvent SubProjectEnd(Me, EventArgs.Empty)
|
16
|
+
End Sub
|
17
|
+
```
|
18
|
+
|
19
|
+
メイン側では
|
20
|
+
```VBNET
|
21
|
+
Private SubProjectInstance1 As SubProject.Form1
|
22
|
+
|
23
|
+
Private Sub Button1 click …以下略
|
24
|
+
'サブプロジェクト3の初期フォームインスタンスを生成
|
25
|
+
Me.SubProjectInstance1 = New SubProject.Form1
|
26
|
+
'イベントハンドラを設定
|
27
|
+
AddHandler SubProjectInstance1.SubProjectEnd, AddressOf SubProject_SubProjectEnd
|
28
|
+
|
29
|
+
'画面に表示
|
30
|
+
Me.SubProjectInstance1.show()
|
31
|
+
'ログイン情報を設定
|
32
|
+
Me.SubProjectInstance1.部署名.Text = Login.Syain.Dname
|
33
|
+
Me.SubProjectInstance1.氏名.Text = Login.Syain.Name
|
34
|
+
End Sub
|
35
|
+
|
36
|
+
Private Sub SubProject_SubProjectEnd(sender As Object, e As EventArgs)
|
37
|
+
'イベントハンドラを削除
|
38
|
+
RemoveHandler SubProjectInstance1.SubProjectEnd, AddressOf SubProject_SubProjectEnd
|
39
|
+
|
40
|
+
'処理が終わったのでLoginフォームを表示
|
41
|
+
End Sub
|
42
|
+
```
|
43
|
+
|
44
|
+
といった感じで各ライブラリからの終了イベントを受け取って、希望の処理を行うようにするということです。
|
45
|
+
|
46
|
+
---
|
47
|
+
P.S.
|
48
|
+
各ライブラリのインターフェースを考え直したほうが良さそうに思えます。
|
49
|
+
質問に提示された部分ですと
|
50
|
+
ライブラリ側を
|
51
|
+
```VBNET
|
52
|
+
Public Class SubProject
|
53
|
+
Public Property 部署名 As String
|
54
|
+
Public Property 氏名 As String
|
55
|
+
|
56
|
+
Public Event SubProjectEnd(sender As Object, e As EventArgs)
|
57
|
+
|
58
|
+
Public Sub ShowForm()
|
59
|
+
Form1.部署名.Text = 部署名
|
60
|
+
Form1.氏名.Text = 氏名
|
61
|
+
Form1.Show()
|
62
|
+
End Sub
|
63
|
+
|
64
|
+
' 処理が終わったら、このメソッドを呼び出して終了を通知する
|
65
|
+
Friend Sub ProjectEnd()
|
66
|
+
RaiseEvent SubProjectEnd(Me, EventArgs.Empty)
|
67
|
+
End Sub
|
68
|
+
End Class
|
69
|
+
```
|
70
|
+
メイン側を
|
71
|
+
```VBNET
|
72
|
+
Private SubProjectInstance1 As SubProject
|
73
|
+
|
74
|
+
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
|
75
|
+
'サブプロジェクト1のインスタンスを生成
|
76
|
+
Me.SubProjectInstance1 = New SubProject
|
77
|
+
|
78
|
+
'イベントハンドラを設定
|
79
|
+
AddHandler SubProjectInstance1.SubProjectEnd, AddressOf SubProject_SubProjectEnd
|
80
|
+
|
81
|
+
'ログイン情報を設定
|
82
|
+
Me.SubProjectInstance1.部署名 = Login.Syain.Dname
|
83
|
+
Me.SubProjectInstance1.氏名 = Login.Syain.Name
|
84
|
+
|
85
|
+
'画面を表示
|
86
|
+
Me.SubProjectInstance1.ShowForm()
|
87
|
+
End Sub
|
88
|
+
|
89
|
+
Private Sub SubProject_SubProjectEnd(sender As Object, e As EventArgs)
|
90
|
+
'イベントハンドラを削除
|
91
|
+
RemoveHandler SubProjectInstance1.SubProjectEnd, AddressOf SubProject_SubProjectEnd
|
92
|
+
|
93
|
+
'処理が終わったのでLoginフォームを表示
|
94
|
+
End Sub
|
95
|
+
```
|
96
|
+
といった感じでメイン側に公開すべき情報、公開しない情報を整理し適切なプロパティ、メソッドを作成するようにしたほうがよろしいかと思います。
|
97
|
+
上記の例ですと、メイン側はサブロジェクト側へは「部署名」というテキストデータを設定する必要がありますが、このテキストデータの設定先がTextBoxでありそのTextプロパティに設定するということは知らなくてよいこととなります。
|
98
|
+
ですので、`Form1.部署名`とアクセスさせるのではなくプロパティを作成し、そこに情報をセットさせるという具合になります。
|