0

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

4

2 回答 2

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;
    }

然后在子(浏览器)表单中我有这个:

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

这是有效的,尽管我不得不解决它是一种模态形式的事实。如果有任何方法可以做到这一点,同时仍然可以完全控制这两种形式,我很想听听某人的意见。

于 2013-04-02T00:35:37.703 回答
0

请检查此方法..

但是,如果您要传递私人数据,这将没有帮助。

在您的浏览器页面中:

受保护的无效Button1_Click(对象发送者,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;

}

于 2013-04-01T14:31:46.640 回答