C# 委托(跨窗体操作控件)实例流程讲解

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

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

代码如下:

public delegate void ChangeFormColor(bool topmost);

Form2类里

代码如下:

01.public event ChangeFormColor ChangeColor;

Form2的按钮事件中调用委托

代码如下:

private void button1_Click(object sender, EventArgs e) 
        { 
            ChangeColor(true);//执行委托实例 
        }

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

代码如下:


    Form2 f = new Form2(); 
    f.ChangeColor += new ChangeFormColor(f_ChangeColor); 
    f.Show(); 
}

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

代码如下:

void f_ChangeColor(bool topmost) 
        { 
            this.BackColor = Color.LightBlue; 
            this.Text = "改变成功"; 
        }

三、完整代码

代码如下:

using System; 
using System.Drawing; 
using System.Windows.Forms;

namespace 跨窗体调用控件 

    public partial class Form1 : Form 
    { 
        public Form1() 
        { 
            InitializeComponent(); 
        } 
        private void button1_Click(object sender, EventArgs e) 
        { 
            Form2 f = new Form2(); 
            f.ChangeColor += new ChangeFormColor(f_ChangeColor); 
            f.Show(); 
        } 
        void f_ChangeColor(bool topmost) 
        { 
            this.BackColor = Color.LightBlue; 
            this.Text = "改变成功"; 
        } 
    } 
}

代码如下:

using System; 
using System.Windows.Forms;

namespace 跨窗体调用控件 

    public delegate void ChangeFormColor(bool topmost); 
    public partial class Form2 : Form 
    { 
        public Form2() 
        { 
            InitializeComponent(); 
        } 
        public event ChangeFormColor ChangeColor; 
        private void button1_Click(object sender, EventArgs e) 
        { 
            ChangeColor(true);//执行委托实例 
        } 
    } 
}

(0)

相关推荐

  • C#编程自学之流程控制语句

    在前面的文章中我们不难看出来,我们程序的执行顺序是从上到下顺序执行的,那么有时候我们需要程序在某个条件成立时,执行指定的代码片段,那么怎么样来控制这样流程呢?这个就是我们今天这篇文章所需要讨论的.那么开始吧! 一.if esle 语句 1.关系型运算符 说到分支语句必定会牵扯到条件,例如当满足一个条件的时候去执行指定的代码段,那么如何构建条件?这个时候我们就需要先了解一下运算符中的<关系型运算符>!请看下表: 看完表格后我们来介绍下什么是关系型运算符,关系型运算符就是对我们程序中的数据进行比较

  • C#日历样式的下拉式计算器实例讲解

    本文介绍了如何在Visual Studio中创建用户控件来显示下拉式计算器,弹出效果类似于日历控件. 介绍 如果我们正在做一个类似于库存控制和计费系统的项目,有些部分可能必须手动计算数值.因此,用户就不得不使用计算器得到结果,再填入到输入字段中,或者在工作窗口上单独打开一个计算器窗口.总之,各种不便和麻烦. 这篇文章主要描述的是如何添加下拉式计算器到DataGridView单元格中,如下图: 使用代码 第一步,我们必须先创建一个函数计算器,并且能够使用控件.因此,不妨先创建一个Visual St

  • C#实现流程图设计器

    最近一个偶然的机会竟然实现了一个简单的流程图设计器(虽然其功能还有很多不完善之处,但是心中还是非常高兴,满满的成就感). 话不多说,先看一下实现的主界面效果: 左边是一个ListView(listView1),右边的画布是一个Panel(panel1).下面将主要思路介绍如下: 1)允许拖放,listView1和panel1设置其AllowDrop=true; 2)非连接线类型的图形拖放处理:左边的listView1的项目被选中后,可以获取其图形类型(是路由器.是服务器还是云等),并在全局变量中

  • C# 委托(跨窗体操作控件)实例流程讲解

    效果描述:有两个窗体,FORM1(一个名为"打开form2"的button控件)和FORM2(一个名为"改变form1颜色"的button控件).启动时,FORM1中点击button控件"打开form2""使FORM2显示出来.点击FORM2中的"改变form1颜色"后,Form1中颜色改变. 一.在Form2里面:       首先声明一个委托和委托实例Form2类外 复制代码 代码如下: public deleg

  • C#实现跨线程操作控件方法

    本文实例讲述了C#实现跨线程操作控件方法,分享给大家供大家参考.具体实现方法如下: 由于在.net平台下Winform.wpf禁止跨线程直接访问控件,因此在必须跨线程访问控件的时候采用异步方式. 1.winform项目中跨线程访问控件: 编写一个Winform小实例:在做winform项目中,有时为了将系统运行的状态实时显示到Form中,因此添加一个RichTextbox控件实时显示系统运行日志.本例实现的操作是将日志以字符串的形式写入RichTextbox控件,因为是实时显示,所以涉及到跨线程

  • C# winform跨线程操作控件的实现

    前提:当我们使用Winform开发的时候,经常会遇到:System.InvalidOperationException:“线程间操作无效: 从不是创建控件“xxxx”的线程访问它.” 原因:发生次异常的原因是因为winform在渲染UI界面和操作界面数据的时候使用的是同一个线程.当我们创建另外一个线程,去操作此线程的UI控件,会导致线程不安全.winform为了防止线程不安全,因此杜绝了这个跨线程操作,并且抛出异常. 异常举例:创建两个控件,一个是按钮控件,一个是lable控件 private

  • C#之WinForm跨线程访问控件实例

    本文实例讲述了C#中WinForm跨线程访问控件的实现方法,分享给大家供大家参考. 具体实现方法如下: 1.跨线程访问控件委托和类的定义 复制代码 代码如下: using System; using System.Windows.Forms; namespace ahwildlife.Utils {     /// <summary>     /// 跨线程访问控件的委托     /// </summary>     public delegate void InvokeDeleg

  • C#跨窗体操作(引用传递) 实例代码

    效果描述: 有三个窗体然后顺序分别是 (1)点击第一个窗体中的按钮弹出第二个窗体,隐藏第一个窗体 (2)第二个窗体到一定时间弹出第三个窗体 (3)点击第三个窗体的按钮关闭第三个和第二个窗体,弹出第一个窗体 From1 复制代码 代码如下: using System;  using System.Windows.Forms; namespace WindowsFormsApplication1  {      public partial class Form1 : Form      {    

  • iOS应用开发中的文字选中操作控件UITextView用法讲解

    1.创建并初始化 创建UITextView的文件,并在.h文件中写入如下代码: 复制代码 代码如下: #import <UIKit/UIKit.h>        @interface TextViewController : UIViewController <UITextViewDelegate>    {                  UITextView *textView;    }        @property (nonatomic, retain) UITex

  • python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例

    在默认情况下,我们使用PyQt5创建出来的窗口和部件都是默认的样式,虽然谈不上很丑,但是也毫无美感可言.其实,在PyQt5中,我们可以有较高的自由度来自定义窗口和各种小部件的样式,通过自定义这些样式,以达到美化图形界面的目的. 本篇文章中,我们就通过一个实际的例子,使用QSS和PyQt5的配置属性,实现图形用户界面的美化工作. 首先上效果图: 一.对界面进行布局和组件的布置 在图像界面编程中,一个好的布局有助于全局把控界面的形态,而在PyQt5中,有多种布局的方式供我们选择,比较常用的布局有以下

  • C#多线程异步执行和跨线程访问控件Helper

    一.工具类代码 public class TaskHelper { #region 多线程操作 /// <summary> /// 功能描述:多线程执行方法,方法无参数,无返回值 /// </summary> /// <param name="func">方法,如果方法中调用了控件,请使用 ThreadInvokerControl(() => { 您的操作})进行包括</param> /// <param name="

  • C# WinForm制作异形窗体与控件的方法

    本文实例讲述了C# WinForm制作异形窗体与控件的方法.分享给大家供大家参考,具体如下: 制作异形窗体或控件的思路一般都是想办法生成一个region,然后设置给指定的窗口或控件.生成region的方法有很多,最常用的就是从一幅图片生成,把该图片中的透明色部分"抠"掉,剩下的部分作为一个region.设置窗口或控件的region可以用SetWindowRgn API,不过.NET framework封装了这个操作,在C#中只要对窗口或控件的Region属性赋值就可以了.下面我就把我在

  • C# WinForm实现窗体上控件自由拖动功能示例

    本文实例讲述了C# WinForm实现窗体上控件自由拖动功能.分享给大家供大家参考,具体如下: 说明:首先在窗体上放一个PictrueBox控件,命名为pb1,拖动完整代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; usin

随机推荐