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

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

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

[csharp] view plaincopy
  1. public delegate void ChangeFormColor(bool topmost);

Form2类里

[csharp] view plaincopy
  1. public event ChangeFormColor ChangeColor;

Form2的按钮事件中调用委托

[csharp] view plaincopy
  1. private void button1_Click(object sender, EventArgs e)
  2. {
  3. ChangeColor(true);//执行委托实例
  4. }

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

[csharp] view plaincopy
  1. {
  2. Form2 f = new Form2();
  3. f.ChangeColor += new ChangeFormColor(f_ChangeColor);
  4. f.Show();
  5. }

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

[csharp] view plaincopy
  1. void f_ChangeColor(bool topmost)
  2. {
  3. this.BackColor = Color.LightBlue;
  4. this.Text = "改变成功";
  5. }

三、完整代码

[csharp] view plaincopy
  1. using System;
  2. using System.Drawing;
  3. using System.Windows.Forms;
  4. namespace 跨窗体调用控件
  5. {
  6. public partial class Form1 : Form
  7. {
  8. public Form1()
  9. {
  10. InitializeComponent();
  11. }
  12. private void button1_Click(object sender, EventArgs e)
  13. {
  14. Form2 f = new Form2();
  15. f.ChangeColor += new ChangeFormColor(f_ChangeColor);
  16. f.Show();
  17. }
  18. void f_ChangeColor(bool topmost)
  19. {
  20. this.BackColor = Color.LightBlue;
  21. this.Text = "改变成功";
  22. }
  23. }
  24. }
[csharp] view plaincopy
  1. using System;
  2. using System.Windows.Forms;
  3. namespace 跨窗体调用控件
  4. {
  5. public delegate void ChangeFormColor(bool topmost);
  6. public partial class Form2 : Form
  7. {
  8. public Form2()
  9. {
  10. InitializeComponent();
  11. }
  12. public event ChangeFormColor ChangeColor;
  13. private void button1_Click(object sender, EventArgs e)
  14. {
  15. ChangeColor(true);//执行委托实例
  16. }
  17. }
  18. }

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

转载于:https://www.cnblogs.com/StupidsCat/archive/2012/07/19/2598993.html

C# 委托实例(跨窗体操作控件)相关推荐

  1. WinForm中新开一个线程操作窗体上的控件(跨线程操作控件)GOOD

    http://www.cnblogs.com/joey0210/p/3450379.html 最近在做一个winform的小软件(抢票的...).登录窗体要从远程web页面获取一些数据,为了不阻塞登录 ...

  2. C#跨线程操作控件的线程安全方法

    C#跨线程操作控件的线程安全方法 在C#中,经常用到这样一个场景,Windows Form程序启动一个工作者线程执行一部分工作,这样做是为了避免速度慢的工作如果直接调用会使得主Form停止响应一段时间 ...

  3. c#跨线程操作控件(有UI操作)|及多线程操作

    仅记录(好多大佬都会): 跨线程操作UI控件 ※在.NET2.0之后为了线程之间的安全,不允许跨线程操作控件,最简单的解决办法是禁止检查,但一般不猜用此方法,会造成各线程之间的混乱,可用作临时调试使用 ...

  4. C# winform跨线程操作控件

    前提:当我们使用Winform开发的时候,经常会遇到:System.InvalidOperationException:"线程间操作无效: 从不是创建控件"xxxx"的线 ...

  5. Winform中怎样跨窗体获取另一窗体的控件对象

    场景 Winform中实现跨窗体获取ZedGraph的ZedGraphControl控件对象: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/de ...

  6. C#中跨线程操作控件

    From:http://tech.ddvip.com/2008-12/122906068099474.html 一.前面的话 对于一些耗时型操作(如文件下载),让主线程去处理不是明智的选择,虽然这样做 ...

  7. C#中子线程操作主线程中窗体上控件的方法

    Demo this.listView1.Visible = true;this.listView1.BeginUpdate();this.listView1.EndUpdate(); //结束数据处理 ...

  8. python界面设计实例qt_python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例...

    在默认情况下,我们使用PyQt5创建出来的窗口和部件都是默认的样式,虽然谈不上很丑,但是也毫无美感可言.其实,在PyQt5中,我们可以有较高的自由度来自定义窗口和各种小部件的样式,通过自定义这些样式, ...

  9. 多线程总结之旅(12):跨线程调用控件的几种方式

    本来是写完线程池就结束多线程总结之旅系列的,但是想想平时在项目中用到线程仅仅不够的,为什么这么说呢?举个例子:我们有一个函数,它的功能就是加载数据,然后绑定到datagridview.现在我们开启一个 ...

最新文章

  1. Linux用户配置密码,linux用户配置文件passwd和密码配置文件shadow,用户管理,组管理...
  2. ubuntu18.04.4 pip3 换源
  3. js各种图表组件网站
  4. Exchange2010配置实验(六)部署forefront到edge服务器
  5. 霍尼韦尔epks 操作 组态 维护 使用 硬件 手册_标准四合一气体检测仪霍尼韦尔MiniMAX X4...
  6. 5G会重新定义数据中心吗?
  7. 在JAVA 中将堆与栈分开的原因
  8. 【Spring学习】使用Spring的jdbcTemplate简化JDBC操作
  9. [扮演不同的角色 知道不同的成就]2008.06.20 黄桃西米露
  10. matlab练习程序(共生矩阵)
  11. mfc编程淘汰了吗_四种基本的编程命名规范(匈牙利命名法、驼峰式命名法、帕斯卡命名法、下划线命名法)...
  12. float最大_Hard 级:二叉树中的最大路径和
  13. IIS出现server application error的解决办法
  14. L298N——真正的玄学驱动板
  15. Minecraft安装资源包
  16. jQuery(一个JavaScript库)
  17. MXNet中take函数的用法
  18. 哪一种语言最流行?VB,C++,JAVA? (转)
  19. CVPR2019文章解读 Pyramid Feature Attention Network for Saliency detection 用于显著性检测的金字塔特征注意网络
  20. windows快速回到桌面快捷键

热门文章

  1. 使用Sqlserver事务发布实现数据同步
  2. python进阶(四) windows下虚拟环境使用
  3. java web项目初始化启动一个java方法
  4. poj 3411 Paid Roads (dfs)
  5. Log4Net 使用 AdoNetAppender (log4net 1.2.10.0)
  6. axios-引入-常用语法-源码
  7. VC自定义消息postmessage用法(消息响应函数)
  8. 7-11 分段计算居民水费 (10 分)
  9. R7-8 魔法优惠券 (25 分)
  10. 7-8 菲波那契数列 (15 分)