C# 委托实例(跨窗体操作控件)

今天研究了一下,在C#里面却是可以不用自定义消息这么复杂的方法来实现跨窗体调用控件,C#有更好的办法就是委托。

效果描述:有两个窗体,FORM1(一个名为“打开form2”的button控件)和FORM2(一个名为“改变form1颜色“的button控件)。启动时,FORM1中点击button控件“打开form2””使FORM2显示出来。点击FORM2中的“改变form1颜色”后,Form1中颜色改变。

一、在Form2里面:
       首先声明一个委托和委托实例
Form2类外

public delegate void ChangeFormColor(bool topmost);

Form2类里

public event ChangeFormColor ChangeColor;

Form2的按钮事件中调用委托

 
  1. private void button1_Click(object sender, EventArgs e)

  2. {

  3. ChangeColor(true);//执行委托实例

  4. }


二、在Form1里面:
button控件“打开form2“的click事件中有下面的代码:

 
  1. {

  2. Form2 f = new Form2();

  3. f.ChangeColor += new ChangeFormColor(f_ChangeColor);

  4. f.Show();

  5. }

f.ChangeColor += new ChangeFormColor(f_ChangeColor);
这句最关键,你输入到+=之后,按两下Tab,他会自动给你生成回调函数,如下:

 
  1. void f_ChangeColor(bool topmost)

  2. {

  3. this.BackColor = Color.LightBlue;

  4. this.Text = "改变成功";

  5. }



 三、完整代码

 
  1. using System;

  2. using System.Drawing;

  3. using System.Windows.Forms;

  4.  
  5. namespace 跨窗体调用控件

  6. {

  7. public partial class Form1 : Form

  8. {

  9. public Form1()

  10. {

  11. InitializeComponent();

  12. }

  13. private void button1_Click(object sender, EventArgs e)

  14. {

  15. Form2 f = new Form2();

  16. f.ChangeColor += new ChangeFormColor(f_ChangeColor);

  17. f.Show();

  18. }

  19. void f_ChangeColor(bool topmost)

  20. {

  21. this.BackColor = Color.LightBlue;

  22. this.Text = "改变成功";

  23. }

  24. }

  25. }


 

 
  1. using System;

  2. using System.Windows.Forms;

  3.  
  4. namespace 跨窗体调用控件

  5. {

  6. public delegate void ChangeFormColor(bool topmost);

  7. public partial class Form2 : Form

  8. {

  9. public Form2()

  10. {

  11. InitializeComponent();

  12. }

  13. public event ChangeFormColor ChangeColor;

  14. private void button1_Click(object sender, EventArgs e)

  15. {

  16. ChangeColor(true);//执行委托实例

  17. }

  18. }

  19. }

 

最后再给大家介绍一种最简单的C#跨窗体操作


本文转载自:https://blog.csdn.net/bdstjk/article/details/7004035

有个疑问,文中的ChangFormColor委托传入了一个bool参数是做什么的,我将它去掉和保留都没有影响程序的运行。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值