我要在一个窗体里访问另一个窗体里的控件,所以在控件属性窗口里设置了public , 在定义代码里又加了 static 
如 public static System.Windows.Forms.ComboBox cbSx1;
但是当我在该窗口里稍微设置了其他控件的属性,这行里的static 就没了,而且cbSx1 都变成了 this.cbSx1 , 导致程序出错,请教下该如何解决? static该写到哪里?

解决方案 »

  1.   

    不要这样把控件外露,要给其他窗体访问就用属性如
    public ComboBox CbSx1
    {
      get{return cbSx1;}
    }
    //其他传统调用就
    class1 c1=new class1();
    ComboBox comboBox1 = c1.CbSx1;
      

  2.   

    要 static 干什么,只要是public 就行了
      

  3.   

    To freeboy827:不要static的话会提示"非静态的字段、方法或属性“Lot.MainForm.cbSx1”要求对象引用"的错误,我在form1里的对form2里的textbox写数据,不加static 的话有其他方法吗?
      

  4.   

    我在别的窗口里对MainForm窗口里的cbSx1写数据,我对cbSx1设置了public static 后,用下面的代码操作,如果没有static ,系统编译出错,不用static怎么办呢?namespace Lot
    {
    ...
    private void btnAdd_Click(object sender, EventArgs e)
    {
    MainForm.cbSx1.text = this.textBox1.text;
    }
    ...
    }
      

  5.   


    //下面的代码是在别的窗体中调用Form3的ComboBox1控件
    Form3 f3 = new Form3();
                f3.ComboBox1.Items.Add("XXX");
                f3.Show();//下面的代码是Form3 这个类
    public partial class Form3 : Form
        {
            ComboBox comboBox1 = null;
            public Form3()
            {
                InitializeComponent();            comboBox1 = new ComboBox();
                comboBox1.FormattingEnabled = true;
                comboBox1.Location = new System.Drawing.Point(209, 84);
                comboBox1.Name = "comboBox1";
                comboBox1.Size = new System.Drawing.Size(121, 20);
                this.Controls.Add(comboBox1);
            }        public ComboBox ComboBox1
            {
                get { return comboBox1; }
            }
        }
      

  6.   

    TO jishengzu :我简要描述下问题吧~~我是C#新手,呵呵。
    form1里有个textBox1控件,form2里有个按钮btnOK和textBox2 , 在form1里的textBox1控件的双击事件里弹出form2,并在form2里修改textBox2的text,点击btnOK按钮后,form1里的textBox1的text就和form2里textBox2修改后的text相同。
    用你的方法,创建一个form1的时候,textBox1的text就固定不变了。我将form1的textBox1的属性设置成public static后,稍微改下其他控件的属性,在MainForm.Designer.cs文件里textBox1的public static 就变成 public 了咋办呀~~~??
      

  7.   

    不要用static控件,这样所有的该窗体对象的该控件都会指向同一个内存地址。你说的调整了其它控件后该static关键字没有了,这应该是ide自己改掉的。MainForm.cbSx1.text = this.textBox1.text;
    这行编译错误是因为MainForm是一个类,而你将它当作对象去访问它的一个属性,建议在看看面向对象基础。你可以将form1对象作为参数传给form2,这样在from2里就可以访问form1的控件了,比如:
    Form2 : Form
    {
       private form1;
       public form2(Form1 form1)
       {
          this.form1 = form1;
       }   private void btnAdd_Click(object sender, EventArgs e)
       {
        form1.cbSx1.text = this.textBox1.text;
       }}static void Main()
    {
    ......
    MainForm form1 = new MainForm();
    .......
    Form2 form2 = new Form2(form1);
    ........
    }
      

  8.   

    上边几种方法我试了还是不行
    假设将form1里的textBox1的text = wang 修改为 zhang 后放到弹出的form2里的textBox2里呢?即双击form1里的textBox1后,弹出的form2里的textBox2与textBox1的text相同,注意:修改后的text!!
      

  9.   

    Form1:
    Form2 f2=new Form2();
    this.textBox1.text=f2.textBox2.text;
    //这样textBox2的内容就赋值给textBox1了吧!
      

  10.   

    TO cl61917380 :这样不行的,你自己可以验证下。
    这段代码:
            public ComboBox ComboBox1
            {
                get { return comboBox1; }
            }
    应该是是写在Form1.Designer.cs文件里的吧?但是好像还缺个set方法
      

  11.   

    static怎么可以用this访问呢,static是静态成员,实例是无法访问的,应该传入窗体实例访问