有一个窗口Form1,单击一下Form1上的button1,弹出Form2
private void button1_Click(object sender, System.EventArgs e)
{
Form2 f2 = new Form2();
f2.tblname = thistable;
f2.Show();                   }
此时Form1还在,没有Close.
如上所示,Form1向Form2传递参数时候,我是通过给Form2增加一个共有内部成员来实现的。
但是Form2向Form1传递参数却不知道怎么实现,因为此时Form1还存在,无法使用上面的方法。
请教高手。

解决方案 »

  1.   

    简单点就让form1读取form2的一个public变量
      

  2.   

    Form2(System.Windows.Forms.Form form)
    {
         this._parentForm=form;
    }
    Form2 f2 = new Form2(form1);
      

  3.   

    对不起,我还没说清楚,Form2向Form1传递参数的时候,Form2本身已经关闭了。
    我的意思是单击From2上的一个按钮,From2本身就关闭了,同时有一个参数要想Form1传递。
      

  4.   

    像这种窗体应用程序是需要单独定义一个应用程序类的,该类有一个参数包结构,便于对所有应用中窗体间参数传递等此类全局需求提供支持,形如如下定义:
    public class AppParam
    {
      public AppParam(){lists = new ArrayList();}
      protected ArrayList lists;public ArrayList Lists{get{;}set{;}}
    }
    public class App
    {
      protected static AppParams[] parmas = new AppParam[10];
      public static AppParam Parameters{get{;}set{;}}
    }
    这样,应用程序就可以通过App类进行参数传递了.
      

  5.   

    其实,App类完全可以作为你整个应用程序的启动托管类,有很多东西可以通过它进行控制,当然,这样并不是说要把App类构造成为一个万能类,你自己权衡着解决吧,任何东西都有两面性的!
      

  6.   

    委托吧,再form1中定义变量,当form2关闭时调用委托将form2的值传到form1
      

  7.   

    form2关闭,但form2的对像还在~~ 
    直接调用其内的变量值即可
      

  8.   

    Form2中
    public delegate void ChangeDataDelegate(string data);//定义委托private event ChangeDataDelegate ChangeDataEvent;//定义事件
    private void button1_Click(object sender, System.EventArgs e)
    {
        ChangeDataEvent(this.textBox1.Text);激发事件,写在你想要的地方
    }
    Form1中
    private void button1_Click(object sender,System.EventArgs e)
    {
        Form2 f = new Form2();
        f.ChangeDataEvent+=new ChangeDataDelegate(this.ChangeData); //绑定事件
    }
    public void ChangeData(string data)
    {
        this.textBox1.Text=data;//做你想要的操作
    }
      

  9.   

    还可以在Form2的构造函数中加一个引用或传出参数
    在Form1中调用那个构造函数
      

  10.   

    在Form2中加一个Public变量,如果Form2关闭,就把那个Public变量的值附上,然后Form1就取那个Public变量的值就可以了。
      

  11.   

    太多方法了,最方便就是把form1的引用传过去,这样跟用私有对象一样方便了,
    private void button1_Click(object sender, System.EventArgs e)
    {
    Form2 f2 = new Form2(Form1);
    f2.tblname = thistable;
    f2.Show();                   }
    当然这里要稍稍改一下Form2的构造
      

  12.   

    窗体之间传值,可以用构造函数。窗体Fr_zspzd:
    private void button7_Click(object sender, System.EventArgs e)
    {
    Fr_zspzd zspzd=new Fr_zspzd(this.dataSet11,this.myToolbar1);
    zspzd.Show();
    }窗体Fr_zspzd:
    public class Fr_zspzd : System.Windows.Forms.Form
    {
    DataSet ds1=null;
    myBaseForm.myToolbar myToolbar1;
                      ...........
              public Fr_zspzd(DataSet ds,myBaseForm.myToolbar myToolbar)  //构造函数
    {
    ds1=ds;
    myToolbar1=myToolbar;   //把传递的信息保存下来
                                ........
                       }
              private void Fr_zspzd_Load(object sender, System.EventArgs e)
    {
                                //函数中就可以使用了
                                //传递的值是和第一个页面是同步的
                       }也可以用属性传:
    private void button5_Click(object sender, System.EventArgs e)
    {
    WindowsApplication1.Form2 f2 = new Form2();
    f2.MdiParent=this;
    f2.Show();
    }//-----------------------------------------------
    public class Form2 : System.Windows.Forms.Form
    {
    private Form1 fm1;
    public Form1 Fm1
    {
    get{return fm1;}
    set{fm1=value;}
    }
      

  13.   

    Form2先把数据传给Form1,再把自己关闭,可以吧?