建了两个Form: Form1 和 Form2,然后在这两个Form中各建了一个comoBox并分别命名为:comoBox_Form1 和 comoBox_Form2,然后我又在Form1里边创建了一个按钮button1.最后我给comoBox_Form1设定了1、2、3、4、5五个数可供选择,并且在属性里边设定Text为3。 我的目的是当我改变了comoBox_Form1的数值之后,点击button1,然后显示Form2并且给Form2里的comoBox_Form2赋予comoBox_Form1的数值。我试着这么编了一下,但是只能把提前设定给comoBox_Form1的值(在属性里边设定的)赋给comoBox_Form2,无论我怎么改变comoBox_Form1的值,都是只能得到提前设定的值。而我想要的是当我改变comoBox_Form1的值后,comoBox_Form2也跟着变。 以下是我的代码,各位热心人请帮忙更正一下啊! Form1的代码: namespace Test 

    public partial class Form1 : Form 
    { 
        public Form1() 
        { 
            InitializeComponent(); 
        }         public string str 
        { 
            get { return comboBox_Form1.Text; } 
            set { comboBox_Form1.Text = value; } 
        }         private void button1_Click(object sender, EventArgs e) 
        { 
            Form2 form = new Form2(); 
            form.Show(); 
        } 
    } 
} Form2的代码: namespace Test 

    public partial class Form2 : Form 
    { 
        public Form2() 
        { 
            InitializeComponent(); 
        }         Form1 Practice_design;         private void Form2_Load(object sender, EventArgs e) 
        { 
            Practice_design = new Form1(); 
            comboBox_Form2.Text = Convert.ToString (Practice_design.str); 
        } 
    } 
}

解决方案 »

  1.   

    定義一個靜態的全局變量來傳遞窗體間的值
    public static string AAA;
      

  2.   


    我的目的是在Form1中定义全局变量,然后在Form1里改变全局变量的值,然后将改变了的值赋到Form2里边。
      

  3.   

           private void button1_Click(object sender, EventArgs e) 
            { 
                Form2 form = new Form2(); 
                //应该在这儿给Form2的comboBox_Form2赋值
                  comboBox_Form2.Text=comboBox_Form1.Text ;
                form.Show(); 
            }
      

  4.   

    Practice_design = new Form1(); 
    因为你这里重新实例化了Form1,所以它肯定是默认值的
    你可以选择使用参数的形式传值,也可以用静态变量        public static string strMyValue = "";
    private void button1_Click(object sender, EventArgs e) 
            { 
                strMyValue = comboBox_Form1.Text
                Form2 form = new Form2(); 
                form.Show(); 
            } private void Form2_Load(object sender, EventArgs e) 
            { 
                comboBox_Form2.Text = Form1.MyValue; 
            } 
      

  5.   

    1、在Form1中定义一个静态变量,在你改变了 的时候给这个变量赋值。
    2、在Form2中同样定义一个变量,并增加一个带参数的构造函数,参数就是你定义的变量。
    3、在Form1中new Form2时,使用参数的构造方法。如:Form2 f2 = new Form2(****);
    4、在Form2的load事件中通过之前定义参数,先给 comboBox_Form2 赋值。
      

  6.   

    在form1中用show(this)应该就可以了吧。在form2中就直接可以访问textBox_form1中的成员,属性应该也可以的。
      

  7.   

    我有一篇博客,csdn上的,自己总结了三四种(有代码)form之间的传值问题,都经过测试,算是自己的笔记吧。
      

  8.   

    参考5楼 和4 楼的方法;5楼说的很对, 你重新实例化了,所以值实际上没有传个form2;
    4楼的方法比较常用,你用这个就行;
      

  9.   

    1,在form1中,把form1的对象传给form2
       Form2 newfm = new Form2();
       newfm.fa = this;
       newfm.ShowDialog();
    2,在form2中,用这个fa可以取得form1的控件,读取或设置form1控件的值
        System.Windows.Forms.Control[] ctrltxt = fa.Controls.Find("textBox1",true);
       System.Windows.Forms.TextBox txt = (System.Windows.Forms.TextBox)ctrltxt[0];
       this.textBox1.Text = txt.Text;
      

  10.   

    如果仅仅是要给form2的控件赋个初值,那还是用带参数的构造函数比较方便;
    或者在show之前给控件赋值也很方便。