学习到一个新的窗体之间传值的方法。
好处:
省去各种变量的传递。大大减少之前传值一直习惯用的静态全局变量。
很好的封装的思想。
事件的方法:
//主窗体
//主窗体 通过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(); }