2

他のクラスのクラス「Form1」からメソッドを呼び出そうとしています。これが私のコードです

namespace WindowsFormsApplication1
{

    public partial  class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            MessageBox.Show("loaded");
            orders.ObjectForScripting = new ScriptInterface();
        }

        private void webBrowser2_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { }
        private void button1_Click_1(object sender, EventArgs e) { }

    }

    [System.Runtime.InteropServices.ComVisibleAttribute(true)]
    public class ScriptInterface
    {
        public void callMe(string currid)
        {
            MessageBox.Show(currid);
            // the following throws security error
            Form1.webBrowser2.Navigate("http://www.mywebpage.com/client/index.php?id="+currid);
        }
    }

}

情報:2つのWebBorwsersがあります。webBrowser2を更新するためにwebBrowser1からイベントをキャッチしています。私の問題は、Form1の外部でwebbrowser2メソッドを呼び出せないことです。

この問題をどのように解決できるかについてのアイデアはありますか?

4

2 に答える 2

2

WebBrowserコンポーネントは静的ではないため(これは良いことです)、コードサンプルが実行しようとしているときに、Form1から直接参照することはできません。Form1インスタンスへの参照を取得する必要があります。そうすれば、パブリックとしてマークされている限り、それらのメソッドを呼び出すことができます。ニーズによっては、参照をWebBrowserコンポーネントに直接渡す方がおそらくさらに良いでしょう。

おそらくこのようなもの:

orders.ObjectForScripting = new ScriptInterface(this.webBrowser2);

..。

public class ScriptInterface
{
    private WebBrowser _browser;

    public ScriptInterface(WebBrowser browser)
    {
        _browser = browser;
    }
    public void callMe(string currid)
    {
        _browser.Navigate("http://www.mywebpage.com/client/index.php?id="+currid);
    }
}
于 2012-11-01T21:48:44.353 に答える
0

Form1の:

Form1.webBrowser2.Navigate(...)

オブジェクトではありませんが、それはあなたのタイプです。クラスのインスタンスを作成する必要があります。または、必要に応じて、そのメソッドを呼び出せるようにオブジェクトを作成する必要があります。

Form1 form = new Form1();
form.webBrowser2.Navigate(...)

その上、メソッドにはフラグが付けられprivateています。つまり、インスタンス内からのみ呼び出すことができます。public他のオブジェクトがそれらを呼び出せるようにする場合は、それらにフラグを立てる必要があります。

public void webBrowser2_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { ... }

または、インスタンスを作成したくない場合は、このメソッドを次のように宣言できますstatic

public static void webBrowser2_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { ... }

ただし、静的でない限り、このクラスが定義するフィールドにアクセスすることはできません。

于 2012-11-01T21:41:23.590 に答える