- - PR -
[VB.NET]MDI形式でDLLを呼び出すには
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-04-04 23:50
MDI形式で子フォームがDLLのWindowsアプリについての質問です。
MDIの親フォームと、DLLで作成した子フォームでデータの受け渡しを行いたいのですがうまくいかず困っています。 同会議室の「C#: MDI子フォームから親フォームへのアクセス方法」を参考に 親フォームでインターフェースをインプリメントして、 子フォームで親インスタンスを型変換するところでエラーが発生します。 開発言語はVB.NETです。 よろしくお願いします。 [親フォーム] Public Class MainWindow Inherits System.Windows.Forms.Form Implements ITest.IFormParent Private Sub Main() Dim b As New ChildForm.Form1 b.MdiParent = Me b.Show() End Sub End Class [子フォーム] Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim a As IFormParent a = CType(Me.ParentForm, IFormParent) ←ここでエラー End Sub | ||||
|
投稿日時: 2006-04-05 00:25
設定してるものと同じものを使ってください。 _________________ 囚人のジレンマな日々 | ||||
|
投稿日時: 2006-04-05 07:14
だったら、子から親をどうこうするのは止めたほうが良いですね。 親から自発的に回収させるべきです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-04-05 09:39
お返事ありがとうございます。
>>囚人様 >>a = CType(Me.MdiParent, IFormParent) 試してみましたが同じエラーが出ました。 >>設定してるものと同じものを使ってください。 設定しているものとはどこの設定でしょうか? ここでは親がインプリメントしているインタフェースを 子で取り出して型変換すれば、親からデータを自由にやり取りできると思ったのですが。 >>だったら、子から親をどうこうするのは止めたほうが良いですね。 >>親から自発的に回収させるべきです。 親から回収、とは親に実装しているインタフェースに子から値を保存して、 親からその保存した値を利用するってことですよね? >>a = CType(Me.ParentForm, IFormParent) このようにして、親のインスタンスを型変換すれば インターフェースが利用できると思ったのですが、 考え方が間違ってますでしょうか? 前スレの渋木様が示されてます、「親フォームへのアクセスを確保」の箇所 >>IFormParent parent = (IFormParent) this.Parent; これをVB.NETで置き換えるのにCTypeで型変換しました。 | ||||
|
投稿日時: 2006-04-05 10:40
おそらく、キャストミス系の例外だと思いますが、 キャストミスの場合は、とりあえず GetType メソッドで実際の型を調べるのが基本です。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-04-05 11:02
失敬。
と書かれていますが、実際は「子フォーム」に書いているイベントハンドラではないのではないですか? 「Me」が一体誰なのか、よく調べてみてください。 _________________ 囚人のジレンマな日々 | ||||
|
投稿日時: 2006-04-05 18:41
回答ありがとうございます。
>>a = CType(Me.MdiParent, IFormParent) Me.MdiParentはGetTypeでみると、BaseTypeは親クラスのフォームでした。 Meは子クラスのフォームでした。 親クラスでインターフェースをインプリメントしているから、 CTypeで変換できると思ったのですが、 もしかしてインターフェースへの型変換はできないのでしょうか? | ||||
|
投稿日時: 2006-04-05 18:53
いえ、いけます。
ところで、親フォームは子フォームの DLL を参照しているわけですが、IFormParent はどこのアセンブリに定義しているのでしょうか。 親フォームも子フォームも IFormParent を参照していますね。 _________________ 囚人のジレンマな日々 |