zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C#委托和事件开发中的实例-类操纵窗体动态显示内容

c#实例事件开发 内容 窗体 委托 操纵
2023-09-14 09:10:03 时间

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