C# Winform中的窗体传值

关于C#winform窗体之间的传值有以下几种做法

    1 通过构造函数传值

    2 属性传值

    以上两种方法不早详细介绍。

 

    3 通过事件传值,委托传值

       首先看一下通过委托传值吧。

          1,创建两个窗体,分别是Form1和Form2

               在Form1中添加一个Button按钮和一个TextBox控件,当单击button控件的时候new一个Form2对象,并且弹出窗体2

               因此给button添加一个Click事件

          2,在Form1窗体中,添加一个ShowText方法,用于给Form1中TextBox控件赋值

          3,在项目中添加一个声明一个委托变量,没有返回值,并且有个参数MyDelText(string str)

          4,在Form2窗体中添加一个button按钮和一个TextBox文本框,当单机Button按钮时,将文本框中的值传给Form1,在Form1

               中的文本框中显示

              给button添加一个click事件用于传值,并且在form2类中添加一个MyDelText类型的字段

          5,在Form1单击事件中,通过声明的Form2对象,调用MyDelText类型的字段,给其注册方法

          6,在Form2单击事件中执行委托

 

   代码如下

     1,准备Form1

using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 窗体之间传值委托事件
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.Show();
            //注册方法
            f2.deltxt = ShowTxt;
        }
        //准备方法
        public void ShowTxt(string str)
        {
            txt1.Text = str;
        }
    }
}

    2,声明一个没有返回值,但是有一个参数的委托类型MyDelText.cs

   

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 窗体之间传值委托事件
{
    public delegate void MyDelText(string str);
}

    3,准备Form2

    

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 窗体之间传值委托事件
{
    public partial class Form2 : Form
    {
        //创建委托变量
        public MyDelText deltxt;
        public Form2()
        {
            InitializeComponent();
        }

        private void btn2_Click(object sender, EventArgs e)
        {
            //执行方法
            deltxt(txt2.Text);
        }
    }
}

以上便是通过委托进行窗体之间的传值,其实最主要的思想就是,把方法当做变量进行传递,在form1中给委托注册方法,在form2中调用通过委托变量调用方法。

 

但是上面这种通过委托进行传值存在的弊端就是,存在多播委托的弊端,还有就是存在盗用问题,在form1中进行注册完方法,还可以继续注册一个方法,把刚刚注册的方法

覆盖掉,或者注册完方法,在form1中直接执行,因此产生了事件,将在form2中声明的委托字段,变成public event MyDelText del;就OK了

 

总结:

  事件就是阉割后的委托变量,事件的订阅者只能订阅,播放者才有权利执行

posted @ 2016-02-24 16:36  米其林5212  阅读(286)  评论(0编辑  收藏  举报