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

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

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

这是Form1中的代码:

[csharp] view plain copy
  1. public partial class Form1 : Form  
  2.    {  
  3.   
  4.        public Form1()  
  5.        {  
  6.            InitializeComponent();  
  7.        }  
  8.   
  9.        //第一种方法示例事件  
  10.        public void changetext(string s)  
  11.        {  
  12.            this.textBox1.Text = s;  
  13.        }  
  14.   
  15.        //第一种方法  
  16.        private void button1_Click(object sender, EventArgs e)  
  17.        {  
  18.            //将整个窗体作为值传给Form2  
  19.            var frm2 = new Form2(this);  
  20.            frm2.ShowDialog();  
  21.        }  
  22.   
  23.        private void Form1_Load(object sender, EventArgs e)  
  24.        {  
  25.   
  26.        }  
  27.   
  28.   }  

这是Form2中代码:

[csharp] view plain copy
  1.   
[csharp] view plain copy
  1. public partial class Form2 : Form  
  2.     {  
  3.         //这是第一种方法  
  4.         private Form1 f1;  
  5.         public Form2()  
  6.         {  
  7.             InitializeComponent();  
  8.         }  
  9.   
  10.         public Form2(Form1 frm1)  
  11.         {  
  12.             InitializeComponent();  
  13.             f1 = frm1;//将传过来的Form1全部赋值给f1,这样就可以在这边调用Form1了  
  14.         }  
  15.   
  16.         private void Form2_Load(object sender, EventArgs e)  
  17.         {  
  18.   
  19.         }  
  20.   
  21.         private void numericUpDown1_ValueChanged(object sender, EventArgs e)  
  22.         {  
  23.             //这是第一种方法  
  24.             //调用Form1中的changetext事件  
  25.             f1.changetext(numericUpDown1.Value.ToString());  
  26.         }  
  27.           
  28.     }  
第二种方法,使用委托与事件(推荐)

委托与事件的概念这里就不讲了,如果有兴趣,大家可以去看看张子阳的博客,博客地址

Form1中代码:

[csharp] view plain copy
  1. public partial class Form1 : Form  
  2.     {  
  3.   
  4.         public Form1()  
  5.         {  
  6.             InitializeComponent();  
  7.         }  
  8.   
  9.         private void Form1_Load(object sender, EventArgs e)  
  10.         {  
  11.   
  12.         }  
  13.   
  14.         //改变值的事件  
  15.         private void frm2_changed(string s)  
  16.         {  
  17.             //此处是给原有窗体中控件赋值  
  18.             this.textBox1.Text = s + s;  
  19.         }  
  20.   
  21.         //清空值的事件  
  22.         private void frm3_empty(string s)  
  23.         {  
  24.             this.textBox1.Text = "";  
  25.         }  
  26.   
  27.         private void button2_Click(object sender, EventArgs e)  
  28.         {  
  29.             var frm3 = new Form3();  
  30.             //这是委托与事件的第二步,  
  31.             //写到+=时,按两次Tab键会自动生成frm2_changed,frm3_empty两个事件  
  32.             frm3.changed += new Form3.Form2Handle(frm2_changed);//改变值的事件  
  33.             frm3.empty += new Form3.Form2Handle(frm3_empty);//清空值的事件  
  34.             frm3.ShowDialog();  
  35.         }  
  36.     }  
Form3中代码:

[csharp] view plain copy
  1. public partial class Form3 : Form  
  2.    {  
  3.        //定义带参数的委托与两个事件  
  4.        //这是委托与事件的第一步  
  5.        public delegate void Form2Handle(string s);  
  6.        public event Form2Handle changed;  
  7.        public event Form2Handle empty;  
  8.   
  9.        public Form3()  
  10.        {  
  11.            InitializeComponent();  
  12.        }  
  13.   
  14.        private void Form3_Load(object sender, EventArgs e)  
  15.        {  
  16.   
  17.        }  
  18.   
  19.        private void numericUpDown1_ValueChanged(object sender, EventArgs e)  
  20.        {  
  21.            //这是委托与事件的第三步  
  22.            //传值  
  23.            changed(numericUpDown1.Value.ToString());  
  24.        }  
  25.   
  26.        private void button1_Click(object sender, EventArgs e)  
  27.        {  
  28.            empty(numericUpDown1.Value.ToString());  
  29.        }  
  30.    } 
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页