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

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

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

Re[2]: リンクとして追加されている別名前空間のフォームからの処理


(過去ログ 114 を表示中)

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

■67617 / inTopicNo.1)  リンクとして追加されている別名前空間のフォームからの処理
  
□投稿者/ ゆる (1回)-(2013/08/16(Fri) 11:43:22)

分類:[C#] 

<環境>
Windows7 64bit
VisualStudio2008 C#


<現状>
1つのソリューションに複数のプロジェクト(A、B、C、Common)があります。
それぞれWidowsフォームアプリケーションです。
プロジェクトA、B、Cで共通して使いまわすフォームやメソッドをCommonプロジェクトに配置しています。
各プロジェクトA、B、CでCommonプロジェクトのクラスやフォームを「リンクとして追加」して、
各プロジェクトで利用しています。


<困っていること>
Commonプロジェクトの中にフォームhogeがあり、プロジェクトAでは「リンクとして追加」されています。
プロジェクトAで、フォームfrmXのMDI子フォームとしてhogeを配置しています。
hogeで行われた操作のイベントで、MDI親フォームに対して処理を行おうとしているのですがうまくいきません。
(MDI子フォームhogeで条件が変更されるとMDI親フォームXに書いてるメソッドを実行する、といったイメージ)

hogeの条件変更時に、
親フォーム名を取得して条件分岐した後に
((A.frmX)MdiParent).メソッド名(引数);

と記述すると、
「型または名前空間名'A'がみつかりませんでした。
 usingディレクティブまたはアセンブリ参照が不足しています。」
となりビルドが通りません。

Using A;
と書いても症状は変わりません。

プロジェクトA、B、Cそれぞれにhogeを作るのはできれば避けたいと思っていて、
上記のようなことを実現するにはどうしたら良いでしょうか?


基本的な部分が理解できていないように感じていますが、どうかよろしくお願いいたします。


引用返信 編集キー/
■67618 / inTopicNo.2)  Re[1]: リンクとして追加されている別名前空間のフォームからの処理
□投稿者/ Azulean (198回)-(2013/08/16(Fri) 11:49:46)
No67617 (ゆる さん) に返信
> hogeの条件変更時に、
> 親フォーム名を取得して条件分岐した後に
> ((A.frmX)MdiParent).メソッド名(引数);
(略)
> プロジェクトA、B、Cそれぞれにhogeを作るのはできれば避けたいと思っていて、
> 上記のようなことを実現するにはどうしたら良いでしょうか?

こういった設計・実装をしてしまうと、B と C のプロジェクトでも A が必要になり、収集がつかなくなります。
「hoge が主体的に処理をする」ではなく、「hoge はイベントとして何かを通知し、それを受けとった A.frmX が処理をする」という風に考え方を改めて見ませんか?

参考:http://dobon.net/vb/dotnet/vb2cs/event.html


> Commonプロジェクトの中にフォームhogeがあり、プロジェクトAでは「リンクとして追加」されています。
> プロジェクトAで、フォームfrmXのMDI子フォームとしてhogeを配置しています。

前述のように、依存関係を一方向だけにできれば、別に「リンクとして追加」しなくとも、「参照の追加」(プロジェクトを参照する)形にでき、わざわざ1ファイルずつリンクとして追加する必要はなくなります。
(別のアセンブリになってしまうので、配布する DLL が増えるという面はデメリットかもしれませんが)
引用返信 編集キー/
■67619 / inTopicNo.3)  Re[2]: リンクとして追加されている別名前空間のフォームからの処理
□投稿者/ ゆる (2回)-(2013/08/16(Fri) 14:01:41)
Azuleanさま

ご提示頂いたやり方でうまく出来そうです。
大変勉強になりました!

ありがとうございました。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -