比如模态对话框有几个textbox控件,上面填的东西我要传递给主窗体,有没有什么比较专业的方法?以前我都是把模态对话框的textbox 改成public,这样显然不安全Form2 f2=new Form2();
if(f2.ShowDialog()==DialogResult.Ok)
{
   String str=f2.textBox1.Text;//这时的f2已经关闭了,系统也可能正在回收,我觉得应该不安全吧?
}有什么专业的方法吗?特别是如果f2上的控件很多的话。。

解决方案 »

  1.   

    关闭了之后访问窗口应该还是安全的,窗口需要垃圾回收或者调用Dispose方法才会被回收。
    控件很多的话可以通过属性或者方法把需要的数据封装一下,就不用直接访问控件了。一般只是需要数据,而不是控制控件。
      

  2.   

    这是一种简单的方法:
    TextBox tb = Application.OpenForms["Form1"].Controls["textBox1"] as TextBox;
    tb.Text = "121211";另外可以通过委托+事件的方法来实现.
      

  3.   

    如果设置了父窗口就简单了
    form1:
    ...
    Form2 f2=new Form2(this);
    ...form2 closed:
    ((TextBox)this.Owner.Controls["textBox1"]).Text="传给form1的textbox1"; 
      

  4.   

    你使用event 实现,在模态对话框触发event ,父form得到event 的结果
      

  5.   

    在对话框类中增加public property,在对话框确认代码中给它赋值,主窗体通过此属性获得数据。
      

  6.   

    这个可以用委托来实现模态窗体 F1 
    父窗体 F
    在F1 中public event del chuanzhi;
    public deleagate void del(string name);private btn_click( object sender, EventArgs e)
    {
      chuanzhi(Text1.text);
      this.clsoe();
    }在父窗体中private btn_click(object sender EventArgs e)
    {
     F f=new F();
     f.chuanzhi+=new F.del(getvalue);
     f.showDialog();
    }
     void getvalue( string a)
    {
      Textbox1.text=a;
    }
      

  7.   

    这个可以用委托来实现模态窗体 F1 
    父窗体 F
    在F1 中public event del chuanzhi;
    public deleagate void del(string name);private btn_click( object sender, EventArgs e)
    {
      chuanzhi(Text1.text);
      this.clsoe();
    }在父窗体中private btn_click(object sender EventArgs e)
    {
     F f=new F();
     f.chuanzhi+=new F.del(getvalue);
     f.showDialog();
    }
     void getvalue( string a)
    {
      Textbox1.text=a;
    }