我正在尝试从其他类中调用类“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方法。
任何想法如何解决这个问题?
答案 0 :(得分:2)
您的WebBrowser组件不是静态的(这是一件好事),因此您无法直接从Form1引用它们,因为您的代码示例正在尝试执行此操作。您必须获取对Form1实例的引用,然后您可以调用它们上的方法,只要它们被标记为public。根据您的需要,将引用直接传递给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);
}
}
答案 1 :(得分:0)
Form1 in:
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) { ... }
但是您将无法访问此类定义的字段,除非它们也是静态的。