窗体传值 (通过事件)

学习到一个新的窗体之间传值的方法。

好处:

省去各种变量的传递。大大减少之前传值一直习惯用的静态全局变量。

很好的封装的思想。

事件的方法:

//主窗体

//主窗体 通过button创建子窗体
namespace 事件
{
    public partial class Form1 : Form
    {
public static Form1 myf;
        public Form1()
        {
            InitializeComponent();
            myf = this;
        }
  private void button1_Click(object sender, EventArgs e)
        {
            Form2 frm = new Form2();
            frm.Show();
        }
        public void frm_eventAddress(string a)
        {
            label1.Text = a;
        }
}

子窗体:

namespace 事件
{
    public partial class Form2 : Form
    {
        //声明一个委托方法
        public delegate void addAddress(string a);
        //申明一个事件
        public event addAddress eventAddress;

        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
//添加订阅者 eventAddress += new addAddress(Form2_eventAddress); //触发事件 eventAddress(textBox1.Text); } void Form2_eventAddress(string a) { Form1.myf.frm_eventAddress(a); } } }

最近又掌握了一个简单的方法:

每个窗口都是一个类,窗口启动时,就是使用窗口类的实例。窗口里的空间默认都是窗口类的私有成员。

思路1把窗口里的控件变为public,这样任意访问。
思路2在各个窗口类建立public的函数,用函数参数传递值,函数控制控件的值。
思路3使用static成员。你可以另外声明一个类,在这里面定义public的static成员,也可以直接在窗口类中定义。也就是所谓的全局变量。

思路二:

主窗体:

   public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f = new Form2(this);
            f.Show();
        }

      public void changeTxt()
      {
        this.label1.Text = "fff";
      }

    }

子窗体:

 Form1 parentForm;
        public Form2(Form1 f)
        {
            InitializeComponent();
            parentForm = f;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            parentForm.changeTxt();
        }

  

原文地址:https://www.cnblogs.com/zhayunjia/p/4613587.html