本人不才,这个问题在csdn问了一个星期,发了两次贴,还没有解决。可能是高手们不屑详解,也可能是在下理解力不济。望大侠们多多指教,指导性的意见就免了吧,最好给代码,不胜感激!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    补充:
    总的要求是:
    form1与form2是两个窗体实例,我的程序大部分都在form1里,但是form1里一些值发生变化时要实时传给form2,让form2来显示这些值的变化。
      

  2.   

    Form1的代码,里面有个文本框(textbox1)       
            private void textBox1_TextChanged(object sender, EventArgs e)
            {                 
                Form2 form2 = new Form2();
                form2.getForm1Change(textBox1.Text);
                form2.Show();
            }
    Form2的代码,里面也有个textbox1
            public void getForm1Change(string content)
            {
                textBox1.Text = content;
            }
    Form1的textbox1值一变化,form2就会显示出来这个值,不知道是不是这个意思
      

  3.   

    首先说明一下Form2是启动窗体
    namespace FormDemo
    {
        public partial class Form2 : Form
        {
            string _loginName;        public string LoginName
            {
                get { return _loginName; }
                set { _loginName = value; }
            }        public Form2()
            {
                InitializeComponent();
            }        private void Form2_Load(object sender, EventArgs e)
            {
                Form1 f1 = new Form1(this);
                f1.ShowDialog();            this.Text = this.LoginName;
            }
        }
    }Form1代码:
    namespace FormDemo
    {
        public partial class Form1 : Form
        {
            Form2 _f2;        public Form1()
            {
                InitializeComponent();
            }        public Form1(Form2 f2)
            {
                InitializeComponent();
                this._f2 = f2;
            }        private void btnLogin_Click(object sender, EventArgs e)
            {
                string loginName = txtLoginName.Text.Trim();
                _f2.LoginName = loginName;
                this.Close();
            }
        }
    }这是两个没有父窗体和子窗体关系的做法,父窗体和子窗体之间可以直接重新构造一个窗体函数,创建窗体时就可以传数据
      

  4.   

    从Form1中得到Form2的数据
    Class Form1
    {
          pubic string num1;
          private void button7_Click(object sender, EventArgs e)
            {
                Form2 input = new Form2(this);
                input.ShowDialog();
                sting n= input.num2; 这里得到了Form2的 num2的数据!        }}
    Class Form2
    {
           public string num2;
           public Form2()
            {
                InitializeComponent();
            }
            public Form2(Form1 form1)
            {
                InitializeComponent();
            }
         
         string temp2=form1.num1;//这里就是从Form1中得到了num1的数据!是同时Form2的重载传过来的!当然num1是public的才能行;}
      

  5.   

    方法一:
    form1中的代码namespace CurrentChange
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            Form2 f;
            private void textBox1_TextChanged(object sender, EventArgs e)
            {
                if (f == null)
                {
                    f = new Form2();
                    f.GetChangeValue(textBox1.Text);
                    f.Show();
                }
                else
                {
                    f.GetChangeValue(textBox1.Text);
                }
            }
        }
    }
    form2中的代码:namespace CurrentChange
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }        private void Form2_Load(object sender, EventArgs e)
            {
                
            }        public void GetChangeValue(string content)
            {
                this.textBox1.Text = content;
            }
        }
    }
      

  6.   

    方法一:把Form1传给Form2将Form1中的TextBox1的Modifiers属性设为InternalForm2的构造函数:
    Form1 form1;
    public Form2(Form1 form)
    {
       InitializeComponent();   form1 = form;
       form1.textBox1.TextChanged += delegate//订阅Form1的TextBox1的TextChanged事件
       {
           this.textBox1.Text = form1.textBox1.Text;//把Form2的TextBox1.Text设成和Form1相同的
       };
    }在Form1显示Form2:
    Form2 form = new Form2(this);
    form.Show();方法二:利用事件在Form1声明事件:
    public delegate void ValueChangedHandler(string value);
    public static event ValueChangedHandler ValueChanged;Form1的TextBox1的文本改变时,引发这个事件:
    if (ValueChanged != null)
       ValueChanged(this.textBox1.Text);Form2订阅这个事件:
    public Form2()
    {
        InitializeComponent();    Form1.ValueChanged += delegate(string value)
        {
            this.textBox1.Text = value;
        };
    }在Form1显示Form2:
    Form2 form = new Form2();
    form.Show();
      

  7.   

    继承  在FORM1中公开几个需要用于数据传递的属性
    form1作为父类
    form2来继承 form1中的属性
      

  8.   

    无论是谁先启动还是谁后启动。
    在form1中定义static的event。
    在form2中为这个event指定执行函数。
    例如
    namespace 1
    {
       public delegate void SomeFunction(string chg_value);
       class form1
       {
         public static event void SomeFunction somefun;     //当form1中的变量变化的时候,调用
         somefun( //你的变量的值 );
       }   class form2
       {
         form1.somefun += new delegate(funproc);     void funproc(string chg_value)
         {
            //chg_value就是你在form1中传过来的值
         }
       }
    }以上只是伪代码因为我这边没有装VS。但是基本思想就是这样的,LZ可以去看看委托和事件。
      

  9.   

    我知道的有一下几种传递参数:
    一:可以用Response.redirect("form2.aspx?name="+textbox1.text+"&sex='男'");此种方式可以进行传递少量的数据传送的数据以“?”号的形式附加在要导向的网页后面传递多个参数用“&”隔开
    二:可以用session来保存要传递的数据,在第二个页面中 直接使用就可以
    三:可以用cookie来保存
    四:Server.transfer  传递大量的数据通常用这种
      form1 页面代码::
                  public string name
    {
    get
    {
    return TxtUserName.Text ;//穿件返回值的get属性  返回字符串
    }
    }
    public DropDownList xiala
    {
    get
    {
    return DDL1;//(DropDownList1)职业 返回类 (下拉列表框,单选按钮组等需要返回类,不然要是用户没有选择 则会出错
    }
    }
    private void Button1_Click(object sender, System.EventArgs e)//导向的按钮
    {
                     Server.Transfer("Form2.aspx") ;//导向另一个页面
    }
    form2进行接收form1传递过来的数据  代码如下:
      public WebForm1 Userform1;//定义form1的对象
    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    if(!IsPostBack)
    {
    Userform1=(WebForm1) Context.Handler ;
    }
                      
                          string str1;//定义接收数据的字符串
    str1="";
    str1=str1+"姓名:"+Userform1.name+"<br>";//好了下面就可以直接用uerform1 调用传递过来的参数了,若是值则直接加传递过来的值的名字,若是类名则
    str1=str1+"职业:"+Userform1.xiala..SelectedValue ;
                             Response.Write (str1);//显示
                           }我以前做过的小例子,希望对你有所帮助!
      

  10.   

    简单的实现把传递的数据定义为引用类型,传递值的方式至少有5种,下面是我以前写的关于这方面的两篇文章,提供实例代码和描述,建立楼主参考一下,
    Windows窗体间的数据交互
    http://blog.csdn.net/zhzuo/archive/2004/04/05/22027.aspx
    窗体的参数传递
    http://blog.csdn.net/zhzuo/archive/2006/05/05/708941.aspx#sec5
      

  11.   

    这个很简单啦,http://blog.csdn.net/zhzuo/archive/2004/04/05/22027.aspx
      

  12.   

    再顶一下,主要是为了联系发超链接,呵呵http://blog.csdn.net/zhzuo/archive/2006/05/05/708941.aspx#sec5