老鸟路线:

无返回值:   Control  控件父类

namespace System
{[__DynamicallyInvokable]public delegate void Action<in T>(T obj);
}
// 方法原型,方法参数
textBox1.Invoke(new Action<string>(str => { textBox1.Text = str; }),"str是参数的名字");

字符串会代入str

这是3个参数的无返回值方法

有返回值

public object Invoke(Delegate method)
{return Invoke(method, null);
}

无参有返回

namespace System
{[TypeForwardedFrom("System.Core, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089")][__DynamicallyInvokable]public delegate TResult Func<in T, out TResult>(T arg);
}

< >内是类型占位符, 最后一个是返回值的类型。 只有1个参数时,括号可不写,直接写参数名字,比如 x

textBox1.Invoke(new Func<string, string>(x => textBox1.Text = x.ToString()),"x是参数名字"); 

第2个string是返回值的类型。

新手路线:

问题出在哪:在类A内,新建类B,类A是可以调用B的属性和方法,但是B的方法体内,不能调用A的方法。

场景:主窗体内新建了子窗体,主窗体可以调用子窗体所有的属性和方法。但是子窗体方法内不能调用主窗体的方法》最大化,最小化等等方法。

切入点:在学C语言的时候,如果函数体main方法后面,那main的前面必须写函数声明。

C#也是如此。类A 内 using引用了   类B   命名空间,那这个命名空间就相当于全局变量区。(A和B都访问的到) 在类B命名空间下   delegate方法声明。

主窗体是可以访问子窗体属性的,所以把 delegate定义成子窗体的属性(中介)。子窗体当然可以使用自己的属性。子窗体的方法内调用自己的属性。

主窗体把自己的方法绑定给子窗体的属性(中介)。这样子窗体调用的时候间接的调用主窗体的方法。

主窗体程序:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;/// <summary>
/// qq750273008,委托测试
/// </summary>
namespace delegateTest
{//【1】第1步:声明委托(公共区)public delegate void WT子呼叫(string str, string str2);//子窗体用public delegate void WT主广播(string str ,string str2);// 主窗使用 (加载所有子窗的方法)方便统一管理//主窗体public partial class Form1 : Form{#region 全局变量UInt16 fromNum = 1;//子窗体编号WT主广播 wt主广播;//主窗的.属性(用于加载子窗的方法)private List<Form> forms = new List<Form>();//子窗集合管理对象#endregion#region 窗体构造public Form1(){InitializeComponent();}#endregion#region 钮_创建子窗体private void btn1_创建子窗体(object sender, EventArgs e){//创建子窗体for (int i = 0; i < 3; i++)//每次创建3个窗口{Form2 form子窗 = new Form2("子窗体", $"子窗体:{fromNum++}");form子窗.Show();//===========================//【4】第4步:将委托变量和具体方法关联(使用=和+=是一样的效果)form子窗.wt子呼叫 += x显示子消息;//子窗体 呼叫 主窗体//===========================this.wt主广播 += form子窗.父消息;//调用子窗体方法forms.Add(form子窗);//加入到集合,方便控制}}#endregion#region 显示消息//【2】第2步:根据委托编写具体方法private void x显示子消息(string str, string str2){string str3 = ("来自" + str + " 的消息:" + str2 + "\r\n");textBox1.AppendText(str3);}#endregion#region 广播private void btn4_广播(object sender, EventArgs e){try{wt主广播("主广播:", textBox2.Text);//wt广播A}catch (Exception ex){MessageBox.Show("没有子窗体,无法发送", "失败");MessageBox.Show(ex.Message);// throw;}}#endregion#region 清空private void btn2_清空(object sender, EventArgs e){textBox1.Text = string.Empty;}#endregion#region 关闭子窗体private void btn3_关闭子窗体(object sender, EventArgs e){//关闭窗口foreach (var item in forms){item.Close();}fromNum = 1;//子窗体编号复位}#endregion}
}

子窗体程序:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace delegateTest
{//子窗体public partial class Form2 : Form{//【3】第3步:声明委托public WT子呼叫 wt子呼叫;// 属性 public Form2(string str, string str2){InitializeComponent();this.Text = str2;}public  void  父消息(string str,string str2){textBox2_接收框.Text = str + str2;}private void btn1发送消息(object sender, EventArgs e)//触发按键{//【1】第5步:使用委托变量来调用所关联的方法//wt("测试", "123");wt子呼叫(this.Text.ToString(), textBox1_发送框.Text.ToString()); // 子窗编号 +  内容}}
}

delegate使用方法C#(Demo)相关推荐

  1. 在请求完成后回调delegate的方法。然而回调时经常遇到这种情况:delegate已经被释放...

    最近的项目遇到了网络请求,需要在请求完成后回调delegate的方法.然而回调时经常遇到这种情况:delegate已经被释放,这时调用其方法则会引起crash. objc的runtime中有两种判断类 ...

  2. Python小练习2:pandas.Dataframe使用方法示例demo

    pandas.Dataframe使用方法示例demo 本文通过一个实例来介绍pandas.Dataframe的各种常用操作,问题总结并修改自coursera上南京大学的课程:用Python玩转数据. ...

  3. Protocol与Delegate 使用方法详解

    你要知道的KVC.KVO.Delegate.Notification都在这里 转载请注明出处 http://blog.csdn.net/u014205968/article/details/78224 ...

  4. delegate 委托方法

    一先定义一个委托方法 ---------第一个类XX //定议委托 public event ordinary Ordinary; //定议委托方法 public delegate void ordi ...

  5. new,virtual,override,interface,delegate,event-------------C#——方法实现总结

    C#--方法实现总结 本文分两部分来写,第一部分:C#方法实现的理解与问题,第二部分:C#中方法实现的种类. 第一部分:C#方法实现的理解与问题 理解: 1. 使用virtual和override关键 ...

  6. Delegate使用方法

    在程序中我们往往需要两个视图之间传值,用delegate可以解决这个问题. (1)定义delegate #import <UIKit/UIKit.h>@protocol SetPhotoD ...

  7. android 桌面图标的点击放大效果,Android仿英语流利说取词放大控件的实现方法(附demo源码下载)...

    本文实例讲述了Android仿英语流利说取词放大控件的实现方法.分享给大家供大家参考,具体如下: 1 取词放大控件 英语流利说是一款非常帮的口语学习app,在app的修炼页面长按屏幕,会弹出一个放大镜 ...

  8. java fileupload 进度_Java上传文件进度条的实现方法(附demo源码下载)

    本文实例讲述了Java上传文件进度条的实现方法.分享给大家供大家参考,具体如下: 东西很简单,主要用到commons-fileupload,其中有一个progressListener的接口,该接口可以 ...

  9. 【Java调试】通过SqlSessionFactory类对象获取mapper文件内的动态SQL在执行时的完整SQL及参数(2种使用方法+测试Demo及结果)

    1. 问题 最近开发新功能,调试 mapper.xml 里的SQL,遇到了极其痛苦的事情: 没有 p6spy SQL无法输出到工作台. mapper 接口没有实现 MyBatis 的 BaseMapp ...

最新文章

  1. ASP.NET Core 异常和错误处理 - ASP.NET Core 基础教程 - 简单教程,简单编程
  2. 函数onsize()与onsizing()区别
  3. 前端传值后端接收不到_解决vue get请求传参后端接收不到参数值(java sptingboot)
  4. 未能加载程序集或它的一个依赖项_英伟达发布kaolin:一个用于加速3D深度学习研究的PyTorch库...
  5. 3.cocos2dx之Menu,通过menu来实现场景的切换
  6. Python笔记-U2控件操作和操作超时
  7. js parseInt()和Number()区别
  8. Java语言基础(4)
  9. 矩形液体包装纸箱行业调研报告 - 市场现状分析与发展前景预测
  10. 完全跨域的单点登录(SSO)解决方案源码解析
  11. linux系统移植和根文件系统制作
  12. 编程基本功:知识、经历可以获得,能力不可能提升
  13. tomcat启动时报错ports are invalid,默认端口不要为-1
  14. 七年级计算机基本结构,七年级信息技术计算机基本组成和工作原理
  15. OSChina 周六乱弹 —— 感谢女装红薯开办了这个网站
  16. [C++]typedef typename什么意思?
  17. java之冒泡排序8个数
  18. cocoscreator 模拟点击
  19. matlab——求矩阵最大特征值对应的特征向量
  20. 网页设计~登陆页面源代码

热门文章

  1. Node服务器 - koa框架
  2. PDF怎样删除偶数页面
  3. 所谓的高情商就是会说话2
  4. Android状态栏介绍
  5. R如何对表格中某个变量进行统计
  6. addEventListener的3个参数
  7. 攻防世界-Misc题目练习
  8. 模仿天天动听桌面歌词
  9. java毕业设计商超销售系统源码+lw文档+mybatis+系统+mysql数据库+调试
  10. 非常全面:72页ChatGPT研究框架(2023)ppt(附下载)