Javascript 单击DotNetBrowser中的html按钮后打开第二个windows窗体
我试图打开一个带有DotNetBrowser控件的windows窗体,具体的html控件如下代码所示 单击html上的按钮后,我需要隐藏加载的表单,然后显示第二个windows表单 我使用的c#代码如下:Javascript 单击DotNetBrowser中的html按钮后打开第二个windows窗体,javascript,c#,dotnetbrowser,Javascript,C#,Dotnetbrowser,我试图打开一个带有DotNetBrowser控件的windows窗体,具体的html控件如下代码所示 单击html上的按钮后,我需要隐藏加载的表单,然后显示第二个windows表单 我使用的c#代码如下: public partial class Form1 : Form { private Browser browser; public Form1() { InitializeComponent(); browser = BrowserF
public partial class Form1 : Form
{
private Browser browser;
public Form1()
{
InitializeComponent();
browser = BrowserFactory.Create();
browser.FinishLoadingFrameEvent += delegate(object sender, FinishLoadingEventArgs e)
{
if (e.IsMainFrame)
{
JSValue value = browser.ExecuteJavaScriptAndReturnValue("window");
value.AsObject().SetProperty("Account", new Form1());
}
};
browser.LoadHTML(@"<!DOCTYPE html>
<html>
<head>
<script type='text/javascript'>
function sendFormData() {
var firstNameValue = myForm.elements['firstName'].value;
var lastNameValue = myForm.elements['lastName'].value;
// Invoke the 'save' method of the 'Account' Java object.
Account.Save(firstNameValue, lastNameValue);
}
</script>
</head>
<body>
<form name='myForm'>
First name: <input type='text' name='firstName'/>
<br/>
Last name: <input type='text' name='lastName'/>
<br/>
<input type='button' value='Save' onclick='sendFormData();'/>
</form>
</body>
</html>");
BrowserView browserView = new WinFormsBrowserView(browser);
this.Controls.Add((Control)browserView.GetComponent());
}
public void Save(String firstName, String lastName)
{
string _firstname = firstName;
this.Hide();
SecondForm frm = new SecondForm(firstName);
frm.ShowDialog();
}
公共部分类表单1:表单
{
专用浏览器;
公共表格1()
{
初始化组件();
browser=BrowserFactory.Create();
browser.FinishLoadingFrameEvent+=委托(对象发送者,FinishLoadingEventArgs e)
{
if(e.IsMainFrame)
{
JSValue=browser.executejavascriptanderturnvalue(“窗口”);
value.AsObject().SetProperty(“帐户”,新表单1());
}
};
browser.LoadHTML(@)
函数sendFormData(){
var firstNameValue=myForm.elements['firstName'].value;
var lastName value=myForm.elements['lastName'].value;
//调用“Account”Java对象的“save”方法。
Account.Save(firstNameValue、lastNameValue);
}
名字:
姓氏:
");
BrowserView BrowserView=新的WinFormsBrowserView(浏览器);
this.Controls.Add((Control)browserView.GetComponent());
}
public void Save(String firstName、String lastName)
{
字符串_firstname=firstname;
this.Hide();
SecondForm frm=新的SecondForm(名字);
frm.ShowDialog();
}
问题是,第一个表单(包含浏览器控件)没有隐藏并仍保持焦点
任何帮助都将不胜感激。要对DotNetBrowser事件执行任何与UI相关的操作,必须将执行传递给主UI线程。在其他情况下,某些方法将引发跨线程操作异常,甚至在没有任何消息的情况下失败 要从JavaScript隐藏.NET回调中的表单,需要将对其隐藏方法的调用包装到BeginInvoke()中。修改后的示例代码如下所示:
public partial class Form1 : Form
{
private Browser browser;
public Form1()
{
InitializeComponent();
browser = BrowserFactory.Create();
browser.FinishLoadingFrameEvent += delegate (object sender, FinishLoadingEventArgs e)
{
if (e.IsMainFrame)
{
JSValue value = browser.ExecuteJavaScriptAndReturnValue("window");
value.AsObject().SetProperty("Account", new Account(this));
}
};
browser.LoadHTML(@"<!DOCTYPE html>
<html>
<head>
<script type='text/javascript'>
function sendFormData() {
var firstNameValue = myForm.elements['firstName'].value;
var lastNameValue = myForm.elements['lastName'].value;
// Invoke the 'save' method of the 'Account' Java object.
Account.Save(firstNameValue, lastNameValue);
}
</script>
</head>
<body>
<form name='myForm'>
First name: <input type='text' name='firstName'/>
<br/>
Last name: <input type='text' name='lastName'/>
<br/>
<input type='button' value='Save' onclick='sendFormData();'/>
</form>
</body>
</html>");
BrowserView browserView = new WinFormsBrowserView(browser);
this.Controls.Add((Control)browserView.GetComponent());
}
public class Account
{
private Form Form;
public Account(Form form)
{
this.Form = form;
}
public void Save(String firstName, String lastName)
{
string _firstname = firstName;
Form.Invoke(new Action(() =>
{
Form.Hide();
}));
SecondForm frm = new SecondForm(firstName);
frm.ShowDialog();
}
}
}
公共部分类表单1:表单
{
专用浏览器;
公共表格1()
{
初始化组件();
browser=BrowserFactory.Create();
browser.FinishLoadingFrameEvent+=委托(对象发送者,FinishLoadingEventArgs e)
{
if(e.IsMainFrame)
{
JSValue=browser.executejavascriptanderturnvalue(“窗口”);
value.AsObject().SetProperty(“帐户”,新帐户(此));
}
};
browser.LoadHTML(@)
函数sendFormData(){
var firstNameValue=myForm.elements['firstName'].value;
var lastName value=myForm.elements['lastName'].value;
//调用“Account”Java对象的“save”方法。
Account.Save(firstNameValue、lastNameValue);
}
名字:
姓氏:
");
BrowserView BrowserView=新的WinFormsBrowserView(浏览器);
this.Controls.Add((Control)browserView.GetComponent());
}
公共类帐户
{
私人形式;
公共帐户(表格)
{
这个。形式=形式;
}
public void Save(String firstName、String lastName)
{
字符串_firstname=firstname;
Form.Invoke(新操作(()=>
{
Form.Hide();
}));
SecondForm frm=新的SecondForm(名字);
frm.ShowDialog();
}
}
}