- - PR -
親フォームのpublicプロシージャー呼び出し
投稿者 | 投稿内容 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-04-26 12:03
アセンブリの参照関係を変えたくない、という意味ですか? そうであれば、 ・Form2のdllにinterfaceを定義 ・そのinterfaceを、Form1でimplementsする ・Form2は、「Form1そのもの」としてではなく、「そのinterfaceとしてのForm1」をアクセスする だったら出来そうな気がします。 それすらNGならば……キーワードも2つほど持っているけど、今のところ触れたくないです(←あきらめたほうがトラブルに遭遇しにくい)。 | ||||||||||||||||||||
|
投稿日時: 2005-04-26 12:12
とは言っても、解決するためにはある程度、呼ぶ側・呼ばれる側ともに手を入れる必要はあるんじゃないでしょうか。 他の皆さんが仰っているように、インターフェイスでメソッドを定義してインプリメントする程度なら、屋台骨ぐらつかす程の構造変更ではないと思いますけど…。 あとは、デリゲートとかイベントとかかな。 | ||||||||||||||||||||
|
投稿日時: 2005-04-26 12:17
微妙に誤解がありそうですが、参照できないのはWindowsアプリケーションだから「だけ」ではありません(エラーメッセージはそこまでしか出ないかもしれませんが)。 クラスライブラリにしても駄目ですよ。 | ||||||||||||||||||||
|
投稿日時: 2005-04-26 14:15
インターフェイスを作成してインプリメントですか?
ありがとうございます。ちょっと難しそうですけど試してみます。 | ||||||||||||||||||||
|
投稿日時: 2005-04-26 23:09
ぢゃん♪さん>
循環参照になりません? 未記入さん> > 残念ながら仕様上構造を変えることはできません。 今の構造だとできないのだから、仕様を変更するしかないのでは? まぁ、循環参照と同じで、VSが許可していないだけのようにも思いますけど。うん、そのようだ。できないことはない(ただし、できないケースの方が多い)が、やるのは避けるように、ってことですね。スタティックなmainメソッドが2つ以上できて、どちらを実行するかわからない、ってことろでしょうか。 Javaだと、「このメソッドから実行」って指定するんじゃなかったっけ?つまり、.NET Frameworkだと、実行メソッド名が固定なので、実行ファイルさえあれば実行できる(つまり、以前の実行ファイルと同じ)が、Javaはファイルがあっても実行メソッドがわからなければ実行できない。この辺のトレードの結果でしょう。
なんにしても、Form1からForm2を呼び出し、Form2からForm1を操作するのであれば、ここに参照の循環が生じます。これは設計上避けるべきです。 回避策として、 1.インターフェイスを定義する別のDLLプロジェクトを用意する 2.Form2にイベントを定義し、イベントハンドラとしてForm1のメソッドを定義する 3.デリゲートを利用する(2といっしょやん) ってところでしょうか。 > インターフェイスを作成してインプリメントですか? Javaやってんなら簡単でしょ(「Javaだと簡単に参照できるのに」に対する皮肉です)。 _________________ | ||||||||||||||||||||
|
投稿日時: 2005-04-27 08:47
工夫すれば、循環参照にならないように作れます。 (あくまでも「工夫」なので、設計として問題がないかどうかは置いといて。) 大雑把に書くと……
ポイントは、Interfaceを<仮称>Form1.exe側ではなく<仮称>Form2.dll側に持たせることです。 ……以上はあくまでも工夫であって、これとは別に。
この場合、元々は、そういうことなんですけどね。 (何か他にも設計に無理な点があるかも……。) [ メッセージ編集済み 編集者: ぢゃん♪ 編集日時 2005-04-27 08:56 ] | ||||||||||||||||||||
|
投稿日時: 2005-04-27 16:24
お勧めできないのですが...
> Form2のボタンを押下時に、Form1のpublicプロシージャーを呼び出す処理 遅延バインディングが使える可能性があります。 Option Strict Off をソースに書く。 OwnerをObject型にして、目的のメソッドを呼び出す。 これでいけるはず。 ただし、これを使うと悪い設計とされてもしょうがないものになりますよ。 ここまで意図的にだれも書かなかったんだと思う。 _________________ たつごろー codeseek こみゅぷらす | ||||||||||||||||||||
|
投稿日時: 2005-04-27 17:25
というか、パンドラの箱を開けるようなものであり「神よ万難辛苦を我に与えたまえ」なつもりで使わないといけないんですよね……。
ということです↓。
もうひとつも同類で、リ…ぁゎゎゎゎ |