- - PR -
インスタンスの上書き
投稿者 | 投稿内容 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-04-21 18:31
諸農です。
良く似た意味のコードで試してみましたが、 そのような現象は発生しませんでした。 ただどうしても次のコードが解せないんですよね。。。 なぜメソッドの解決が出来るのだろう。。
こちらで試したコードです。 呼び出し側プロジェクトの参照に呼び出されるアセンブリの追加はしていません。 呼び出し側(MDI親)
呼ばれる側(クラスライブラリ)
呼ばれるフォーム(MDI子フォーム)の ボタンクリックイベントハンドラ
_________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||||||||||||||||||
|
投稿日時: 2004-04-21 19:05
これは、VB.NETの機能ですね。C#ではできません。 VB.NETでコンパイルする際に Option Strict Off という設定になっていると、厳密な型チェックが行われなくなります。 そのため、型を明示的に指定しなくてもメンバを呼び出す機能が必要なんですね。 で、この場合完全な動的バインディングが行われ、実行時にメンバが解決されます。 内部ではリフレクション経由ということになるでしょう。 この機能、タイプライブラリを参照せずに動的バインディングを行いたい場合などには非常に便利(C#だとリフレクションの嵐)なのですが、静的な型チェックができないのは弊害が多すぎます。そのため、私は特殊なとき(まあ、つまりは上記のような場合)にしか使いません。 ※幸いファイル単位で設定できるので 通常、自分で作成したライブラリを使用するときなどは、Option Strint On でコーディングすることをお奨めします→元質問者の方。 でないと、原因不明のバグに悩まされる可能性が高まります。 ※今回の問題とは特に関係はないと思いますが。 --引用ミスを修正 [ メッセージ編集済み 編集者: なちゃ 編集日時 2004-04-21 19:06 ] | ||||||||||||||||||||
|
投稿日時: 2004-04-21 22:45
諸農です。
そ、そうなんですか。。 あの手この手で同じようなコーディングが出来ないかと C#で試しに試しまくったんですが、無理だったんですね。。 私はVB.NET(VBも含めて)のことを全然知らないですし、 コーディングのスタイルもよくわからないので、 (メソッドの引数を指定するのに括弧を使わないとか。。) 自ら進んで触れようとはしていないんです。。 VB派の方、ごめんなさいm(__)m ---編集追加--- なちゃさん、詳しい説明ありがとうございました。 あまりの衝撃に、お礼を書くのを忘れていました(^^; _________________ 諸農和岳 Powered by Borland Delphi/C++Builder & Microsoft VS.NET [ メッセージ編集済み 編集者: Jubei 編集日時 2004-04-21 22:47 ] | ||||||||||||||||||||
|
投稿日時: 2004-04-22 08:52
チェックして色を変える、ところはどうなってます? | ||||||||||||||||||||
|
投稿日時: 2004-04-22 09:23
そうですね。。 本来ならそうするのが筋ですが、今回はメニューを動的に変えたいために このようなコーディングになっています。 しかも、同じ画面が立ち上がってもよいという仕様なので。
普通のチェックしか行っていないですが、簡略化したものを載せておきます。 btnOK_Click イベント If Me.TextBox1.Text = Nothing Then Me.TextBox1.BackColor=Color.Red Else Me.TextBox1.BackColor=Color.White End If | ||||||||||||||||||||
|
投稿日時: 2004-04-22 09:41
諸農です。
以下は興味本位の疑問ですので、その気になったときにでも試してください。 リフレクションなどを使わずに、該当のDLLアセンブリを参照設定して フォームの動的生成を行っても同じ現象になりますか? _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||||||||||||||||||
|
投稿日時: 2004-04-22 10:16
ふつうに考えると、イベントハンドラの結びつきがおかしくなっている?と感じられるんですが、普通に作っているとそんなことって起きないですよね…
質問ですが、チェック等のイベントハンドラは、通常のVBのように、ハンドラのメソッドにHandles句で書かれていますか?特に、ハンドラの結び付けをコードで動的にやったりとかはしてないですか? もう一つ、イベントハンドラが呼ばれた際に、ハンドラのsender引数に入っているコントロールへの参照と、Me.TextBox1(だっけか?要はイベントを発生させているコントロール)に入っている参照が同じか異なるかを確認してみてください。 | ||||||||||||||||||||
|
投稿日時: 2004-04-22 12:07
あ、いや、宣言部分が知りたかったのだが・・・Handlesか、AddHandlerか、そこらあたりと。 |