假设现在我有一个主窗体Form1,现想在另外两个窗体Form2,Form3中运用不同的方法来实现:修改Form2,Form3中的numericUpDown的值时Form1中textbox值随之改变。
第二种方法,使用委托与事件(推荐)
Form3中代码:
先讲第一种方法,直接将整个窗体作为参数传给另一个窗体。
这是Form1中的代码:
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- //第一种方法示例事件
- public void changetext(string s)
- {
- this.textBox1.Text = s;
- }
- //第一种方法
- private void button1_Click(object sender, EventArgs e)
- {
- //将整个窗体作为值传给Form2
- var frm2 = new Form2(this);
- frm2.ShowDialog();
- }
- private void Form1_Load(object sender, EventArgs e)
- {
- }
- }
这是Form2中代码:
- public partial class Form2 : Form
- {
- //这是第一种方法
- private Form1 f1;
- public Form2()
- {
- InitializeComponent();
- }
- public Form2(Form1 frm1)
- {
- InitializeComponent();
- f1 = frm1;//将传过来的Form1全部赋值给f1,这样就可以在这边调用Form1了
- }
- private void Form2_Load(object sender, EventArgs e)
- {
- }
- private void numericUpDown1_ValueChanged(object sender, EventArgs e)
- {
- //这是第一种方法
- //调用Form1中的changetext事件
- f1.changetext(numericUpDown1.Value.ToString());
- }
- }
委托与事件的概念这里就不讲了,如果有兴趣,大家可以去看看张子阳的博客,博客地址。
Form1中代码:
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- private void Form1_Load(object sender, EventArgs e)
- {
- }
- //改变值的事件
- private void frm2_changed(string s)
- {
- //此处是给原有窗体中控件赋值
- this.textBox1.Text = s + s;
- }
- //清空值的事件
- private void frm3_empty(string s)
- {
- this.textBox1.Text = "";
- }
- private void button2_Click(object sender, EventArgs e)
- {
- var frm3 = new Form3();
- //这是委托与事件的第二步,
- //写到+=时,按两次Tab键会自动生成frm2_changed,frm3_empty两个事件
- frm3.changed += new Form3.Form2Handle(frm2_changed);//改变值的事件
- frm3.empty += new Form3.Form2Handle(frm3_empty);//清空值的事件
- frm3.ShowDialog();
- }
- }
- public partial class Form3 : Form
- {
- //定义带参数的委托与两个事件
- //这是委托与事件的第一步
- public delegate void Form2Handle(string s);
- public event Form2Handle changed;
- public event Form2Handle empty;
- public Form3()
- {
- InitializeComponent();
- }
- private void Form3_Load(object sender, EventArgs e)
- {
- }
- private void numericUpDown1_ValueChanged(object sender, EventArgs e)
- {
- //这是委托与事件的第三步
- //传值
- changed(numericUpDown1.Value.ToString());
- }
- private void button1_Click(object sender, EventArgs e)
- {
- empty(numericUpDown1.Value.ToString());
- }
- }