C#委托和事件开发中的实例-类操纵窗体动态显示内容
C#委托和事件-类操纵窗体内容
刚学C#不久,学委托和事件的时候概念很模糊,不知道啥时候用,最近开发C#发现,其他类想控制窗体显示内容,普通的方法无效,得用委托和事件,虽然不知道啥原因,在这里记录一下吧!建议点赞收藏起来哦!
情景:我想在框选内容的时候在窗体显示框选的信息,判断框选功能不在窗体类中
1、在框选判断的类中创建委托和事件
public static event Action<string> OnOutputMsg;//静态委托事件
public void btnEvent(string info)
{
if (OnOutputMsg != null)
{
OnOutputMsg(info);
}
}
2、在判断框选的时候调用事件
if (IsSelected)
{
....
btnEvent(Data.Info);
}
3、需要动态显示内容的窗体-调用委托(委托的多播)
CubeElement.OnOutputMsg += new Action<string>(DisMessage);
4、窗体中显示内容的方法
public void DisMessage(string Info)
{
cubeInfoLabel1.Text = Info;
}
声明委托
delegate < return type> < delegate-name> < parameter list>
如:public delegate int MyDelegate (string s);
上面的委托可被用于引用任何一个带有一个单一的 string 参数的方法,并返回一个 int 类型变量。
实例化委托
一旦声明了委托类型,委托对象必须使用 new 关键字来创建,且与一个特定的方法有关。当创建委托时,传递到 new 语句的参数就像方法调用一样书写,但是不带有参数。例如:
public delegate void printString(string s);
…
printString ps1 = new printString(WriteToScreen);
printString ps2 = new printString(WriteToFile);
委托的简单写法:Action,Func
Action至少0个参数,最多16个参数 ,但是返回值必须是Void
如:public delegate void Action(T obj);
Func只有带泛型的一种形式,Action有带泛型和不带的两种
Func 委托必须要带有一个返回值
可以有0个或多达16个参数类型
最后一个泛型参数代表返回类型,前面的都是参数类型
参数类型必须跟指向的方法的参数类型按照顺序对应
如:public delegate TResult Func< outTResult>();
…
如:Func pFunc = new Func(() =>
{
return “薪薪代码很酷”;
});
Console.WriteLine(pFunc.Invoke());
Func<string, string> pFuncParsInfo = new Func<string, string>((name)=>
{
return $“{name}很酷”;
});
Console.WriteLine(pFuncParsInfo.Invoke(“薪薪代码”));
}
相关文章
- C# 多线程多文件批量下载---子线程中更新UI 实例
- c#关键字详解
- C#中往数据库插入/更新时候关于NUll空值的处理
- C#人爱学不学9[C#5.0异步实例+WPF自己的MVVM Async应用 1/12]
- C#.NET常见问题(FAQ)-如何把定义存放类实例的数组
- C#.NET常见问题(FAQ)-public private protectd internal有什么区别
- C# winform 学习(二)
- C#使用全局钩子(hook),SetWindowsHookEx返回0、不回调的解决
- asp.net中c# TextBox.MaxLength例子
- C# 调用 Outlook发送邮件实例
- C# 海康DVR客户端开发系列(2)—— 封装API
- ActiveMQ c# 系列——实例(二)
- C# Socket 线程
- C# MessageBox用法实例 (附效果图)
- switch与if效率实例解析·5年以下编程经验必看【C#】
- c# 控制职能运行单一实例,再次运行显示已经运行的实例
- C#使用ActiveMQ实例
- C#文件操作,万余字归纳建议收藏
- C# 委托多播实例【通俗易懂】
- (29)C#里简单地使用MySQL数据库
- C# 利用反射根据类名创建类的实例对象
- C#根据输入的字符串来创建类的实例
- C# 中await前后执行线程的问题
- C#创建Windows窗体应用程序实例2【学生管理信息系统】
- C#创建Windows窗体应用程序实例7【鼠标事件】
- C#创建Windows窗体应用程序实例8【通用对话框】
- C#创建Windows窗体应用程序实例9【菜单设计】