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(“薪薪代码”));
}