我现在有两个窗口,A B 
A打开后点击按钮B窗口被实例化并显示了出来 现在我通过点击 B 上的按钮去修改A的背景色,如何做呢? 如果我现在要 把B 上的一个文本域填写值,并点击确定后 A上的文本域 跟着改变成所填的值呢?]

解决方案 »

  1.   

    在Form2 中:private Form1 f1public Form2(Form1 f1)
    {
    this.f1=f1;
    }private void Button1_Click(....)
    {
    this.f1.broundColor=Colors.Red;
    }在Form1 中:Form2 f2=new Form2(this);
    f2.Show();
      

  2.   

    http://blog.csdn.net/xiaowengang/archive/2007/04/13/1563967.aspx
      

  3.   

    把窗口a的实例对象传到窗口b里
    在Form2 中:private Form1 f1public Form2(Form1 f1)
    {
    this.f1=f1;
    }private void Button1_Click(....)
    {
    this.f1.broundColor=Colors.Red;
    }在Form1 中:Form2 f2=new Form2(this);
    f2.Show();
    呵呵综合一下前面两位的。
      

  4.   

    (("formname")Application.Openform["formname"]).broundcolor
    A域的文本值也是同理。
      

  5.   

    你们就会在这里扯犊子,这样的方法可行???糊弄鬼呢啊。你去哪里给我找f1的对象去?它是在Main方法中隐式实例化的!!!!!!!!
      

  6.   

    要想让上面给出的办法真的可行需要在重载的Form2构造方法中添加这样一句InitializeComponent();
    写完整了就是:private Form1 f1;
    public Form2(Form1 f1)
    {
    this.f1 = f1;
             InitializeComponent();
    }
    然后就可以在Form2窗体中操作Form1了。并且用Show() or ShowDialog()方法显示的Form2窗体都可以操纵Form1,效果是一样的
    InitializeComponent();这是用来初始化Form2窗体的,没它你Form2什么都干不了。回帖也得有责任心。
      

  7.   

    to wangchao1982(飘零一剑) 
    你这样能在form2里操纵form1里的对象?自己试试吧。
      

  8.   

    //Form1代码
    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private void button1_Click(object sender, EventArgs e)
            {
                Form2 frm2 = new Form2();
                frm2.Show();
            }
            internal  void settext(string txt)
            {
                textBox1.Text = txt;
            }
        }
    //Form2代码
    public partial class Form2 : Form
        {
            public Form2()
            {
                ((Form1)Application.OpenForms["Form1"]).settext("aaaaa");
                InitializeComponent();
                
            }
        }
      

  9.   

    form1里所有的控件全是private,你怎么点出来?我试过你的方法,可惜点不出里面的控件。把form作为参数传送这本身就不可取。
      

  10.   

    你说的很对,这个做法的确不可以,因为这样会穿过很多无用的数据来(至少是对目前的操作来说)。用你的做法能够提高效率。
        但是f1.BackColor这个属性的确能点出来。原因很简单:因为这些属性都是共有的,你可以去msdn查一下
      

  11.   

    Application.OpenForms
    还有上面的东西是2005特有的么?为什么我在2003下点不出来呢?
      

  12.   

    openforms是05特有的,03可以用反射来做,同样不用改构造函数。
      

  13.   

    完全可以传递一个对象嘛。何必弄的这么麻烦,比如我在FORM2中定义了一个
    private TextBox t;
    public TextBox _T
    {
       set{ t = value; }
    }然后我在定义FORM2的对象后加一句
    f2._T = this.TextBox1;
    这不就可以在第二个窗体中操作1中的文本框了么?这比你说的方法性能如何呢?2005用的不是很习惯。不过好像性能还是不如你的那个,因为我传的是一个文本框的整个对象。呵呵
      

  14.   

    其实性能还是其次,主要是可以不破坏原有class的结构,对于封装性要好很多,比较符合编码规范。
      

  15.   

    先建个委托
    delegate void Updater();
    在被打开的FORM2上增加委托成员
    Updater upt;
    FORM2的构造函数传入委托
    public Form2(Updater arg):this()
    {
    upt = arg;
    }
    FORM1打开FORM2时就写个匿名函数上去
    Form2 f2 = new Form2(
    void delegate()
    {
    this.backColor = Color.Black;
    }
    );要传文字也是相同的方法,委托变成void delegate (string str)这样就行了
      

  16.   

    可以用属性传值的方法啊
    把Form1中的值通过属性传到Form2中啊