我有一个子窗体的Web浏览器控件,它从显示的网页中捕获一些数据。我需要在浏览器表单中使用这些数据传递给父表单,但不必启动它的新实例,因为它已经打开。
父表单需要从浏览器接收这些数据,并使用解析页面设置的变量更新一些文本框。
我在父母表格中有这个:
private void browserToolStripMenuItem_Click(object sender, EventArgs e)
{
System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(RunBrowser));
t.SetApartmentState(ApartmentState.STA);
t.Start();
}
public static void RunBrowser()
{
Application.Run(new BrowserForm());
}
我在孩子的形式上尝试了很多东西,但我根本无法让它工作。我能得到的最好的方法是将一个变量传递给父级并通过MessageBox显示它,但它拒绝更新TextBox。
顺便说一下,我一直试图解决这个问题近12个小时,这是我在这里问的唯一原因。答案 0 :(得分:1)
我终于解决了,但不是理想的方式。
在父母中我打开它:
private void BrowserToolStripButton_Click(object sender, EventArgs e)
{
using (BrowserForm form = new BrowserForm())
{
form.ShowDialog(this);
}
}
我在Parent中也有这个方法:
public void SendStringsToParent(string s, string s2, string s3)
{
textBox.Text = s;
textBox2.Text = s2;
textBox3.Text = s3;
}
然后在Child(浏览器)表单中我有:
private void Button1_Click(object sender, EventArgs e)
{
string stringToSend = "sending these";
string stringToSend2 = "strings to the";
string stringToSend3 = "parent form";
MainForm parent = (MainForm)this.Owner;
parent.SendStringsToParent(stringToSend, stringToSend2, stringToSend3);
}
这是有效的,虽然我不得不解决它是一种模态形式的事实。如果有任何方法可以做到这一点,同时仍然完全控制两种形式,我很乐意听取某人的意见。
答案 1 :(得分:0)
请检查此方法..
但如果您传递私人数据,这将不会有所帮助。
在您的浏览器页面中:
protected void Button1_Click(object sender,EventArgs e) {
string modulename = "Agile Software Development ";
string url;
url = "page2.aspx?module=" +modulename;
Response.Redirect(url);
}
在您的父页面
string RetrievedValue; protected void Page_Load(object sender,EventArgs e) {
this.TextBox1.Text = Request.QueryString["module"];
// RetrievedValue = this.TextBox1.Text;
}