- PR -

動的にCreateされた子フォームへのイベントの追加

1
投稿者投稿内容
CACA
会議室デビュー日: 2008/06/03
投稿数: 8
投稿日時: 2008-11-14 14:06
いつも参考にさせていただいております。

早速質問なのですが、
子フォームを3つ持つMDIアプリケーションとフォームをもつDLLがあるとします。
DLLには子フォームがクリックされたときにDLLで設定してあるフォームを表示するという処理が入っています。
アプリケーション起動時に生成される子フォームについては、DLLロード時に全ての子フォームに
「子フォーム.MouseDownEvent += DLL.MouseDownEvent;」
として、イベントを追加することで可能なのですが。
この処理がDLLロード時にのみにしか行なっていないため、新たにCreateされた子フォームでは当然DLLのイベントは起こりません。

そこで、新たにCreateされた子フォームへDLLのイベントを追加したいのですが、どのようにしたらよいのか詰まってしまいました。
また、DLLから親フォームを参照できますが、親フォームからDLLを参照しないという仕様になっています。

DLL側で子フォームがCreateされたということをキャッチしたいのですが、可能でしょうか?

どなたか参考になるヒント、アドバイス、記事等ありましたらよろしくお願いいたします。
なかむら
ベテラン
会議室デビュー日: 2008/11/11
投稿数: 67
お住まい・勤務地: 福岡
投稿日時: 2008-11-14 14:37
MDI 子フォームを新しく追加するコードは修正できないんですか?
「DLL」とあるから、手元にあるのはアセンブリだけなんでしょうか?
_________________
Nakamura Blog
CACA
会議室デビュー日: 2008/06/03
投稿数: 8
投稿日時: 2008-11-14 14:46
レスありがとうございます。

どちらもコードの修正は可能です。
なかむら
ベテラン
会議室デビュー日: 2008/11/11
投稿数: 67
お住まい・勤務地: 福岡
投稿日時: 2008-11-14 15:09
MDI 子フォームを追加するときは

コード:

Form child = new Form();
child.MdiParent = parent; // MDI 親フォームを指定
child.Show();



といったコードを書くと思うので、
この部分を修正してイベントハンドラを登録すればいいと思うんですが。

[ メッセージ編集済み 編集者: なかむら 編集日時 2008-11-14 15:13 ]
CACA
会議室デビュー日: 2008/06/03
投稿数: 8
投稿日時: 2008-11-14 15:53
子フォームを追加する処理はEXE本体(この言い方でよいのかな?)にあり、
イベントに追加する処理はDLLにあります。

EXE本体がDLLを参照しないため、EXE本体はDLLのイベントハンドラを認識できないという状況にあります。

イベントハンドラ登録をDLLで行いたいのですが無理なのでしょうか?
なかむら
ベテラン
会議室デビュー日: 2008/11/11
投稿数: 67
お住まい・勤務地: 福岡
投稿日時: 2008-11-14 16:30
引用:

DLLから親フォームを参照できますが、親フォームからDLLを参照しないという仕様になっています。



引用:

子フォームを追加する処理はEXE本体(この言い方でよいのかな?)にあり、
イベントに追加する処理はDLLにあります。



「DLL が EXE を参照してる」ということですか?
もしそうなら、親フォームに MdiChildAdded みたいなイベントを自分で追加すればいいと思います。


_________________
Nakamura Blog

[ メッセージ編集済み 編集者: なかむら 編集日時 2008-11-14 16:32 ]
CACA
会議室デビュー日: 2008/06/03
投稿数: 8
投稿日時: 2008-11-17 15:19
ありがとうございます。

なかむらさんの方法で解決できました。
1

スキルアップ/キャリアアップ(JOB@IT)