你的位置:首页 > ASP.net教程

[ASP.net教程]窗体间传值


Form1 窗体里面的单击按钮事件:

 private void button1_Click(object sender, EventArgs e)
        {
            //方法一 将当前窗体作为对象传递到show出的窗体
             Form frm=new Form2();
            frm.Owner = this;
            frm.Show();

        }
Form2里面的窗体load加载事件和单击按钮事件

 private void Form2_Load(object sender, EventArgs e)
        {
            Form1 frm = (Form1)Owner;
            foreach (var ff in frm.Controls)
            {
                if (ff is TextBox)
                {
                    this.textBox1.Text = (ff as TextBox).Text;
                }
            }
        }
 
 private void button1_Click(object sender, EventArgs e)
        {
            //方法一
            //接收传递过来的窗体对象,找到窗体上的控件进行赋值
            Form1 frm = (Form1)Owner;
            foreach (System.Windows.Forms.Control ff in frm.Controls)//遍历传递过来窗体的所有控件
            {
                if (ff is TextBox)//如果控件是TextBox类型
                {
                    //if (ff.Name.Equals("textBox1"))如果是多个文本框,这里还可以去name
                    (ff as TextBox).Text= this.textBox1.Text ;
                }
            }

        }
这种传递,多用于将当前窗体作为对象,传递到另个传递里面,使用当前窗体里面控件的值,在show出的Form2窗体可以直接修改Form1窗体的控件的值   
方法二:利用窗体类里面传递参数,在说show出的窗体的构造函数里面接收参数
Form1里面的单击事件

private void button1_Click(object sender, EventArgs e)
        {
            //方法二 在窗体类里面传递参数
            string txt = this.textBox1.Text;
            Form frm=new Form2(txt);
            frm.Owner = this;
            frm.Show();

        }
Form2 里面的构造函数接收参数

 
        public Form2(string txt)
        {
           this.textBox1.Text = txt;
           InitializeComponent();

        }
这种方法不用与在把值回传到第一个窗体里面
第三种方式就是写一个类,声明静态变量,然后接受再传值,这种方法比较常用,这里就不用赘述了。
第四种方式就是声明一个委托和事件
在Form2窗体声明委托和事件
public delegate void getTextdelegate(string text);//定义委托 写早class类外面,定义全局的
public static event getTextdelegate TextCool;//定义事件 写在类里,可以直接用窗体名调用

 private void button1_Click(object sender, EventArgs e)
        {
            if (TextCool != null)
            {
                TextCool(this.textBox1.Text);

            }
        }
在Form1窗体里面调用

 private void button1_Click(object sender, EventArgs e)
        {
           Form2 frm=new Form2();
           Form2.TextCool += Form2_TextCool;
           frm.Show();
        }
        void Form2_TextCool(string text)
        {
            this.textBox1.Text=text;
        }

就可以实现在Form2里面把值回传到Form1  里面了,在定义的委托里面是string类型,可以放object类型,那么就可以传我们想传的值了