プロが教える店舗&オフィスのセキュリティ対策術

メインのクラスAにウェブブラウザAがあります。

クラス A {

メソッドA(){
 ウェブブラウザA.Navigate(URL);


メソッドC(){
 MessageBox.Show("これは成功");



}

クラス B {
 メソッドB(ウェブブラウザA){
  ウェブブラウザA.Navigate(URL);//成功
 }


A a = new A();
a.メソッドA();//失敗
a.メソッドC();//成功

}




このようなプログラムを作っています。
クラスBをインスタンスして実行すると
クラスBのメソッドBは成功しますが、クラスAの方で宣言しているa.メソッドAは失敗します
しかし、a.メソッドC();は成功します。

これは、a.メソッドAは、その上のA a = new A();でつくられた新しいインスタンスのなかで処理がされていて起動時につくられたクラスAのインスタンスとは別のものになっているからだと思うのですが、まちがいないでしょうか?

この処理を成功させたい場合、起動時に作られたクラスAのインスタンスをメソッドBの引数に参照渡しですれば、
 メソッドB(ウェブブラウザA){
  ウェブブラウザA.Navigate(URL);//成功
  メソッドA();
 }
も可能なのではないかと考えているのですが、可能でしょうか?またそのインスタンスを引数にする方法はどのようなものでしょうか?

ちなみに、クラスBはDLLに置いてあり、メソッドAは複数のDLLで使うので毎度書くのは面倒なのでクラスAの中で呼び出して使いたいと考えています。

A 回答 (3件)

>ボタン2でも同じように表示されているウェブブラウザにGoogleを表示させたいです。

どのような方法があるでしょうか?

「void Form1::ウェブブラウザ(string URL)」を使ってという事なら

public void DLL関数2(Form1 form1)
{
form1.ウェブブラウザ("http://google.com");
}

にして、

item1.DLL関数2(this);

と、とすればいいだけだけど(interfaceは適切に変更してるとしてください)
    • good
    • 0
この回答へのお礼

おかげでできました。ありがとうございます。

お礼日時:2014/04/04 15:25

何か意味不明なC#もどき言語が書かれているので、こちらとしては説明が面倒なんですけど・・・



>これは、a.メソッドAは、その上のA a = new A();でつくられた新しいインスタンスのなかで処理がされていて起動時につくられたクラスAのインスタンスとは別のものになっているからだと思うのですが、まちがいないでしょうか?

>メソッドA(){
>  ウェブブラウザA.Navigate(URL);
>

ここで書かれている「ウェブブラウザA」というのがクラスAのインスタンス変数なら、それであっています。

>この処理を成功させたい場合、起動時に作られたクラスAのインスタンスをメソッドBの引数に参照渡しですれば、

クラスBのインスタンスメソッドBを呼び出すとき、起動時に作成したクラスAのインスタンスのウェブブラウザA(に入っているもの)を渡してるんじゃないんですか?
そのウェブブラウザA(には入っているもの)はWebBrowserクラスのインスタンスではないの?

変数という入れ物とインスタンスを区別できてなさそうな。

この回答への補足

返信遅くなってしまって申し訳ありません。
私の説明不足のようなので問題の部分のプログラムだけを抜き出したののを作ってみました。

http://1drv.ms/1krjNRG


省略ているためボタンが直接Form1にありますが、MDIの子フォームに表示させる予定です。


ボタン2でも同じように表示されているウェブブラウザにGoogleを表示させたいです。どのような方法があるでしょうか?

補足日時:2014/04/02 17:07
    • good
    • 0

以下の点、補足説明をお願いします。



「クラスAの方で宣言しているa.メソッドAは失敗します」とありますが、それはコンパイルエラーでしょうか、それとも実行時にエラー/例外が発生するのでしょうか。
また、失敗と判断するに至ったメッセージの類があれば、それをそのままの文で(できればメッセージをコピペで)呈示願います。

この回答への補足

失敗というか、変化が起こりません。実行はされているのですがモニタに表示されているウェブブラウザAには何の変化も起こらないという感じです。

補足日時:2014/03/31 23:49
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!