窗体间参数传递的方法

站在巨人的肩膀上……

窗体间参数传递的方法有:静态成员、属性、构造函数、委托

1、静态成员

窗体1

 public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        public static string str ;           

        private void button1_Click(object sender, EventArgs e)

        {

            str = "hallo";//str在form2初始化的时候被控件调用,所以一定要在创建Form2实例前赋值

            Form2 form2 = new Form2();

            form2.Show();

        }

窗体2:

    public partial class Form2 : Form

    {

        public Form2()

        {

            InitializeComponent();

            label1.Text = Form1.str;

        }

2、构造函数

窗体1:

public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

 

        private void Form1_Load(object sender, EventArgs e)

        {

            Form2 form2 = new Form2("hallo");//创建Form2实例时给构造函数传递实参

            form2.Show();

        }

}

窗体2:

 public partial class Form2 : Form

    {

        public Form2(string i)

        {

            InitializeComponent();

            textBox1.Text = i;

        }

}

3、属性

公共类:

 public  class Class1

    {

        public int i;

       //利用property的特性(是否共用同一个实例),我们可以灵活的在form之间传递我们想变和不想变的值

        public Class1(int j)//可以在Class1的构造函数中添加形参传递 i 的值;

        {

            //i = 9;

            this.i = j;

        }

        public void modify(int u)

        {

            i = u;

        }

    }

窗体1:

  public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        private Class1 ttt;

        private void Form1_Load(object sender, EventArgs e)

        {

            ttt = new Class1(11);//i=9;

            Form2 temp = new Form2();

            temp.Change = ttt;//Form1和From2公用同一个Class1的实例,类属于引用类型因此Form1和From2公用Class1中的数据

            temp.Show();

        }

 

        private void button1_Click(object sender, EventArgs e)

        {

            textBox1.Text = ttt.i.ToString();

        }

 

        private void button2_Click(object sender, EventArgs e)

        {

            ttt.modify(44);

        }

}

窗体2:

  public partial class Form2 : Form

    {

        public Form2()

        {

            InitializeComponent();

        }

        private Class1 change;//也可以将属性设置成静态的,直接调用(不用创建实例),则两个窗体用的就是同一个变量(这种方法不知道可不可靠)

//还可以直接将Form1 设为属性,直接将Form1 传进来

        public Class1 Change

        {

            get { return change; }

            set

            {

                change = value;//直接将Form1中创建的Class1实例赋值给change,因为类为引用类型,因此change中和Form1中实际调用的是同一个Class1

                //change = new Class1(11);//重新创建一个Class1的实例,与Form1中创建的Class1实例就不是同一个了,Class1中的值也就不同享

                //change.i = value.i;

            }

        }

 

        private void Form2_Load(object sender, EventArgs e)

        {

 

        }

 

        private void button1_Click_1(object sender, EventArgs e)

        {

            textBox1.Text = change.i.ToString();

        }

 

        private void button2_Click_1(object sender, EventArgs e)

        {

            change.modify(98);

        }

    }

4、委托

窗体1:

   public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        private void button1_Click(object sender, EventArgs e)

        {

            Form2 temp = new Form2();

            temp.ReturnValue = new Form2.returnvalue(showvalue);//将委托指向showvalue方法

            temp.Show();

        }

        private void showvalue(int i)

        {

            textBox1.Text = i.ToString();

        }

窗体2:

  public partial class Form2 : Form

    {

        public Form2()

        {

            InitializeComponent();

        }

 

        public delegate void returnvalue(int i);//定义委托

        public returnvalue ReturnValue;// 创建委托的实例

        private void Form2_Load(object sender, EventArgs e)

        {

        }

 

        private void button1_Click(object sender, EventArgs e)

        {

            if (ReturnValue != null)

                ReturnValue(8);//调用方法showvalue

        }

}

5、父窗体,子窗体

父窗体:

 public partial class FMMain : Form

    {

        public FMMain()

        {

            InitializeComponent();

            label1.Text = "hallo Father";

            label1.Visible = false;

        }

        string strA;

 

        public string StrA

        {

            get { return strA; }

            set { strA = value; }

        }

 

        private void Form1_Load(object sender, EventArgs e)

        {

 

        }

 

        private void button1_Click(object sender, EventArgs e)

        {

            strA = label1.Text;

            FMChild fmchild = new FMChild();

            //fmchild.Owner = this;//声明子窗体是FMChild,就可以接收到子窗体的属性值

            fmchild.Show(this);//声明子窗体是FMChild

            //fmchild.Dispose();

            label2.Text = fmchild.StrB;

        }

}

子窗体:

 public partial class FMMain : Form

    {

        public FMMain()

        {

            InitializeComponent();

            label1.Text = "hallo Father";

            label1.Visible = false;

        }

        string strA;

 

        public string StrA

        {

            get { return strA; }

            set { strA = value; }

        }

 

        private void Form1_Load(object sender, EventArgs e)

        {

 

        }

 

        private void button1_Click(object sender, EventArgs e)

        {

            strA = label1.Text;

            FMChild fmchild = new FMChild();

            //fmchild.Owner = this;//声明子窗体是FMChild,就可以接收到子窗体的属性值

            fmchild.Show(this);//声明子窗体是FMChild

            //fmchild.Dispose();

            label2.Text = fmchild.StrB;

        }

    }

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值