我在子窗体中调用父窗体中的combox1控件,在子窗体中定义如下:Form1 form = new Form1();  //Form1是主窗体的名称,实例化一个主窗体public string portname;    //定义一个公共的字符串变量public void  setSerialport()
        {
             
             portname = Convert.ToString(form.comboBox1.SelectedItem);    //将主窗体中的combox1的内容取出来。        }问题如下:主窗体中的combox1在不做选择情况下的内容为com1,可以选择com2,com3,com4.但是我无论选择什么,子窗体中的值始终为com1,不会随着他的变化而变化,他只认默认的那个值。请问大家怎么解决?
我如果将combox1的默认值改为com2,那他读出来的就是com2,其他的就不认了。如果默认变成空,无论你选什么,读出来的就是空。

解决方案 »

  1.   

    Form1 form = new Form1();  你new了一个新的窗体出来,上面的所有东西都已经不是你原来的主窗体了,怎么可能改变得了主窗体呢?
      

  2.   

    使用parent或owner之类的属性,直接访问主窗体即可
      

  3.   

    如:
    Form1 fm = (Form1)this.ParentForm;
    this.comboBox1.Selectedndex = fm.comboBox1.Selectedndex;也可以遍历找到主窗体,同样转换一下,即可访问
      

  4.   

    支持1楼。。不过LZ的说法是根据父窗体的选择改变子窗体的显示。所以LS的用法就不对了。在父窗体里使用一个子窗体变量来保存打开的子窗体的实例。然后子窗体里建立一个改变显示的public函数,然后使用该子窗体变量来访问该函数,改变子窗体的显示。
      

  5.   

    Form2 form2=null;父窗体Form1里New一个子窗体 form2=new Form2;在comboBox1的selectedchanged事件里调用:fomr2.ChangeView(this.combobox1.selectedvalue);
      

  6.   

    使用窗体间传值
      此操作在第一个窗体中发生
      //有一个按钮事件   把第一个窗体传到第二个窗体中去this代表第一个窗体
       Form2 form2 = new Form2(this);
      //show第二个窗体出来
       form2.Show();
       comboBox1 必须设为public 
       
      此操作第二个窗体间的发生 同样有一个按钮事件
      //先把第一个窗体new出来
       Form1 form1 = new Form1();
      //赋值
      string portname= form1.comboBox1.text;
      
      还有Form2构造函数要修改一下
            //定义一个Form1 
             private Form1 form1;
            public Form2(Form1 form1)
            {
                this.form1 = form1;
                InitializeComponent();
            }
      以上操作即可搞定
      

  7.   

    谢谢大家,已经解决了,可惜大家的答案没有一个全对的。xwdd129没有理解错我的意思,结贴!
      

  8.   

    在你的主窗体里写个属性,,选择的时候赋值给属性,然后把主窗体传给子窗体,,
    直接在子窗体访问属性的值就OK了,别把主的给new了就行,,即from1 fm1=new form1肯定错。
      

  9.   

    你说的很对,呵呵,不能new,new就错了,可惜晚了几秒,我已经结贴了,也没法给你分了