WinForm中一个窗体调用另一个窗体的控件和事件的方法

您所在的位置:网站首页 随之改变的拼音怎么写的 WinForm中一个窗体调用另一个窗体的控件和事件的方法

WinForm中一个窗体调用另一个窗体的控件和事件的方法

2024-07-16 02:27| 来源: 网络整理| 查看: 265

假设现在我有一个主窗体Form1,现想在另外两个窗体Form2,Form3中运用不同的方法来实现:修改Form2,Form3中的numericUpDown的值时Form1中textbox值随之改变。

先讲第一种方法,直接将整个窗体作为参数传给另一个窗体。

这是Form1中的代码:

[csharp] view plain copy 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中代码:

[csharp] view plain copy    [csharp] view plain copy 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中代码:

[csharp] view plain copy 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();          }      }   Form3中代码:

[csharp] view plain copy 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());         }     } 


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3