2012-11-01 50 views
1

我想從其他類的類「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。我從webBrowser1獲取更新webBrowser2的事件。 我的問題是,我無法調用Form1以外的webbrowser2方法。

任何想法我可以如何解決這個問題?

+1

將其標記爲'公共'而不是'私人'。 –

回答

2

您的WebBrowser組件不是靜態的(這是一件好事),因此當您的代碼示例嘗試執行時,您無法直接從Form1引用它們。您必須獲取對Form1實例的引用,然後您可以調用它們上的方法,只要它們被標記爲公共。根據您的需求很可能是更好的只是沿着引用傳遞直接到你的web瀏覽器的組件

也許是這樣的:

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); 
    } 
} 
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) { ... } 

但你將無法訪問,這個類定義,除非場它們也是靜態的。

相關問題