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

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

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

  1. public delegate void ChangeFormColor(bool topmost);

Form2类里

  1. 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. 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. }
  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#跨窗体操作

C# 委托实例(跨窗体操作控件)的更多相关文章

  1. Winform跨窗体操作控件(使用委托)

    Winform跨窗体操作控件是winform开发中很常见的形式,最常见且简单有效的方式便是使用委托的方式来进行操作,下面我将通过一个小实例来说明如何使用委托跨窗体实现控件操作. 实例介绍:两个窗体,F ...

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

    最近在做一个winform的小软件(抢票的...).登录窗体要从远程web页面获取一些数据,为了不阻塞登录窗体的显示,开了一个线程去加载数据远程的数据,会报一个错误"线程间操作无效: 从不是 ...

  3. C#跨窗体调用控件(委托回调函数使用例子)

    问题: 有两个窗体,FORM1(含一个label控件,一个名为显示form2的button控件)和FORM2(含一个button控件).启动时,FORM1中点击button控件显示form2使FORM ...

  4. C#跨线程操作控件的最简单实现探究

    随着程序复杂度的提高,程序不可避免会出现多个线程,此时就很可能存在跨线程操作控件的问题. 跨线程操作UI控件主要有三类方式: 1.禁止系统的线程间操作检查.(此法不建议使用) 2.使用Invoke(同 ...

  5. C# 跨线程操作控件(简洁)

                                              C# 跨线程操作控件 .net 原则上禁止跨线程访问控件,因为这样可能造成错误的发生.解决此问题的方法有两个: 第一 ...

  6. winform 跨线程操作控件

    当进行winform的开发时,经常遇到用时比较久的操作,在传统的单线程程序中,用户必须等待这个耗时操作完成以后才能进行下一步的操作,这个时候,多线程编程就派上用场了,将这个耗时的操作放到一个新的子线程 ...

  7. C#跨线程操作控件

    1.首先通过按键创建子线程: 创建子线程,子线程调用changeText方法. private void btnOK_Click(object sender, EventArgs e) { Threa ...

  8. winform 跨窗体给控件传值 分类: WinForm 2014-08-02 16:33 195人阅读 评论(0) 收藏

    两个窗体 FormA,FormB; FormA窗体中有一文本框控件:TextBox; FormB窗体中有一变量:txtJSJ 目的:把变量赋值给文本框 实现: 设置TextBox属性: Modifie ...

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

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

随机推荐

  1. 错误-spring3.2的架构在tomcat6.0中无法正常启动,抛出java.lang.NoClassDefFoundError: javax/servlet/AsyncListener

    原因分析: 1:org.springframework.web.servlet-3.2支持Servlet3.0的版本. 2:tomcat6.0只支持Servlet2.5,而tomcat7.0支持Ser ...

  2. C# Console控制命令

    参考博客:C# 控制台程序(命令行程序)设置字体颜色,窗口宽高,光标行数 禁用控制台关闭按钮,参考博客:禁用C#控制台应用程序的关闭按钮 参考博客:c# 控制台程序禁用关闭按钮完美解决 #region ...

  3. PhpStorm 4.0 & 5.0 部署本地Web应用 (转)

    1.创建新的项目(project),创建完成之后单击工具栏的应用运行/调试(Select Run/Debug Configuration)的下拉菜单弹出 Edit Cofigurations选项,单击 ...

  4. spring4 离线doc和api(自制)

    spring mvc api 文档(英文版) 链接: https://pan.baidu.com/s/1c25Ml4 密码: ufb9 spring MVC 学习文档(英文版) 链接: https:/ ...

  5. 1393: Robert Hood 旋转卡壳 凸包

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1393 http://poj.org/problem?id=2187 Beauty Contest ...

  6. 安装freetds小记

    FreeTDS的软件获取:在官网上进行下载:http://www.freetds.org/ 执行以下命令: ./configure --with-tdsver=7.1 --enable-msdblib ...

  7. python实现汉诺塔

    经典递归算法汉诺塔分析: 当A柱子只有1个盘子,直接A --> C 当A柱子上有3个盘子,A上第一个盘子 --> B, A上最后一个盘子 --> C, B上所有盘子(1个) --&g ...

  8. (三)SQL入门 数据库规格化简介

    什么是数据库的规格化呢,说白了就是为了去除数据库冗余.为了数据库更加容易管理而将大表按照逻辑划分为小表的过程. 什么是数据库的去规格化呢,就是规格化的反面.那么你可能就会问,既然上面说了数据库的规格化 ...

  9. myeclipse2014新建maven项目

    1,首先安装maven,并配置. 2,新建maven project. 3,选择maven-archetype-webapp. 4,填写afrifact ID即为项目名称. 5,finish后 bui ...

  10. CheckBox 半选中状态

    <input type='checkbox' />可以半选中,这个特性,很多浏览器都支持,包括Firefox,Chrome和IE 用 input.indeterminate 这个属性来获取 ...