将数据从子表单传递到父表单

时间:2013-04-01 13:24:41

标签: c# multithreading webbrowser-control

我有一个子窗体的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个小时,这是我在这里问的唯一原因。

2 个答案:

答案 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;

}