1)有一个父窗体MainForm,两个子窗体Form1和Form2,Form1有一个textbox1控件,Form2有一个button1的控件,Form1已经打开,现打开Form2,点击Form2中的button1,然后Form1被击活(不生成新的实例),且Form1中的textbox1被赋值“123”。

解决方案 »

  1.   

    winform间传值
    public partial class Form1 : Form   
      {   
      private void button1_Click(object sender, EventArgs e)   
      {   
      Form2 frm2 = new Form2();   
      frm2.Show(this);   
      }   
      }     public partial class Form2 : Form   
      {   
      private void button1_Click(object sender, EventArgs e)   
      {   
      Form1 frm1 = (Form1)this.Owner;   
      ((TextBox)frm1.Controls["textBox1"]).Text = this.textBox2.Text;   
      this.Close();   
      }   
      }   
      

  2.   

    再说明一下,我这两个子窗体Form1和Form2都是通过父窗体MainForm打开的,所以楼上的方法可能实现不了我想要的功能
      

  3.   

    二楼的方法就可以。frm2.Show(this);  看上面代码的重点。这个问题,你在网上一搜一堆,楼主。通过类的构造函数传值。
      

  4.   

    感谢楼上给我的实例,但这不是我想要的
    我的情况如下:
    我这两个Form1和Form2都是由父窗体MainForm打开的
    public partial class MainForm : Form   
      {   
      private void button1_Click(object sender, EventArgs e)   
      {   
          Form1 frm1 = new Form1();  
          frm1.MdiParent=this;
          frm.Show();   
      }
     private void button1_Click(object sender, EventArgs e)   
      {   
          Form2 frm2 = new Form2();  
          frm2.MdiParent=this;
          frm.Show();   
      }   
      }
    然后Form2把Form1击活,并让Form1中的textbox1显示需要的值。
    所以跟本无法在Form1中用
    Form2 frm2 = new Form2();   
    frm2.Show(this);
      

  5.   

    提供一个思路,不知道是否可行
    点击Form2的button1时寻找MainForm的所有子窗体,继而找到Form1,然后再激活Form1并给TextBox赋值
      

  6.   

    窗体间的传值方式:1 构造参数/委托传值.通常这是最常见的方式,FORM2里面写个属性,然后把FORM1的对象赋给这个属性.然后在FROM2里面很自在的使用FORM1对象.从而得到FORM1里面设置的所有东东.FORM2里面定义委托和事件,在FORM1里面绑定此事件的处理程序.然后在FORM2里面触发此事件,既可把数据顺利通过参数传给FORM1.
    2 静态类这个貌似是最简单的方法,创建一个静态类,把公用的东东都放在此类的静态属性中,使用者取之既可3 应用程序进程( AppDomain)这个才是最简单的处理方式,搞的和SESSION差不多了.
    FORM1:
    AppDomain.CurrentDomain.SetData( "XXX ", XXXX);FROM2:
    AppDomain.CurrentDomain.GetData( "XXX ");
      

  7.   


    激活可以实现,但就算我把textbox设成Public都不能直接赋值,必需创建一个新的实例,这又不能实现只打开一个窗体的要求
      

  8.   

    要求: 主窗体一个文本框,然后从窗体一个label , 文本框输入文字,从窗体显示出来在label上.主从窗体互相通信的话,从窗体要显示主窗体的信息,则从窗体必须有主窗体的实例. 用主窗体在从窗体的实例调用主窗体写好的一个方法, 例如 public string getMsg()返回的值来赋给label 即可.  label.Text = mainFrm.getMsg();注意: 在主窗体必须通过按钮将主窗体的实例传给从窗体.      otfs = new otherFrm( this );