委托在窗体通信方面的见解

  首次博客内容是将自己对于委托在窗体通信方面的应用做一次总结,也算是将自己的见解用言语来表达出来吧。在开始接触委托时云里雾里,完全没有这个概念的存在,更不用提委托用于窗体通信之中这么高深的运用了尽管在现在看来我还是觉得委托用在窗体通信中是一件很神奇的事情,不是说没有弄懂,而是说这里面的逻辑思维也值得我们去学习(思维是个关键的东西,一旦理解了,也会顺水推舟)。

 

  首先委托的格式想必是一目了然 

public delegate void MessageDele(string Message);

   ​委托的五大步骤:

    1.声明委托

    2.根据委托创建具体方法

    3.创建委托变量

    4.委托变量关联具体方法

    5.调用委托​

  然而在此处如果我们将窗体通信想象成主窗体和从窗体通信的话,那么必然存在一个问题,委托变量的放置问题。(本次只考虑主从窗体通信这种特殊情形,其余情形照搬该逻辑思路即可了)。例如,如果是主窗体向从窗体发送信息,是在主窗体里面定义委托变量并且绑定相关从窗体的方法,还是从窗体内定义委托变量,并且将委托变量与自身的相关方法进行绑定(该方法好比说是将主窗体传过来的信息展现出来),然后在主窗体中创建从窗体对象后,调用从窗体对象的委托变量用来发送信息呢。又或是在从窗体向主窗体​发送信息情况下,委托变量是跟随谁的问题,一种是将委托变量定义在从窗体中,在主窗体中创建从窗体对象,然后通过从窗体对象去调用内部成员委托变量,并且绑定主窗体中的相关方法,另一种情况是主窗体中定义委托变量,并且绑定相关方法,再主窗体中创建从窗体对象,通过从窗体去调用主窗体中的委托(然而基本上这种方式完全不太推荐使用,不是说不可以用而是实现的步骤太过于复杂,付出的成本大于了其收益)。

 

一、主窗体向从窗体发送信息​

  主窗体中定义委托变量:

public partial class FrmMain : Form
{
    //​【3】创建委托变量
    public MessageDele objMessageDele;

    public FrmMain()
    {
        InitializeComponent();

        FrmOther objFrmOther = new FrmOther();

        objFrmOther.Show();

        //【4】委托变量绑定方法​
        objMessageDele += objFrmOther.Message;
    }

    //【5】调用​委托变量
    private void btnclick_Click(object sender, EventArgs e)
    {
        objMessageDele(txt1.Text.ToString());
    }
}

//【1】声明委托(定义一个函数原型:返回值+参数类型+个数)
public delegate void ShowCount(string message);

   窗体提供委托实现方法:

public partial class FrmOther : Form
{
    public FrmOther()
    {
        InitializeComponent();
    }

    //【2】根据委托创建具体方法​
    public void Message(string message)
    {
        label1.Text = message;
    }
}

 

二、从窗体中定义委托变量 

  主窗体调用从窗体并发送消息:

public partial class FrmMain : Form
{
    FrmOther objFrmOther;

    public FrmMain()
    {
        InitializeComponent();
        objFrmOther = new FrmOther();
        objFrmOther.Show();
    }

    private void btnSend_Click(object sender, EventArgs e)
    {
        //[5]调用委托变量传递信息
        objFrmOther.objmessageDele(this.txtMessageSend.Text.Trim().ToString());
    }
}

     从窗体声明委托并实现方法:

public partial class FrmOther : Form
{
    public FrmOther()
    {
        InitializeComponent();

        //[4]委托变量关联方法
        objmessageDele += Message1;
    }

    //[3]创建委托变量
    public MessageDelegate objmessageDele;

    //[2]创建具体方法
    private void Message1(string text)
    {
        lblMessage.Text = text;
    }
}

//[1]声明委托
public delegate void MessageDelegate(string text);

 

  两种方法的实现结果都是差不都的即都是主窗体发送消息然后从窗体接受消息并且显示消息内容。但是委托变量的归属问题却产生了,哪一种方式更应该被推荐使用呢。​

  其实委托的引入就是为了将需要的方法整合到一起,从这个观点来说应该将委托变量和方法放在同一级下即是选用主窗体中定义委托变量毕竟从多方面考虑 如果是多个从窗体接受信息,那么委托的优势在这里也就消失了,由此来看必定是在主窗体中一次将委托变量绑定方法,然后调用的时候只需进行委托变量的调用,如果委托变量放在从窗体中,那么在主窗体中调用每一个从窗体对象的委托时是如此的繁琐,也就失去了委托存在的意义了。

 

三、从窗体向主窗体发送信息​

public partial class Form1 : Form
{
    FrmOther objfrmOther;
    public MessageDele objmessageDele;

    public Form1()
    {
        InitializeComponent();
        objfrmOther = new FrmOther();

        //[4]委托变量绑定方法
        objfrmOther.objMessageDele += showMessage;
        objfrmOther.Show();
    }

    //[2]根据委托创建方法
    public void showMessage(string text)
    {
        this.lblMessage.Text = text;
    }
}

 

四、从窗体中定义委托变量

public partial class FrmOther : Form
{
    public FrmOther()
    {
        InitializeComponent();
    }

    //[3]创建委托变量
    public MessageDele objMessageDele;

    //[5]调用委托实现方法
    private void btnSend_Click(object sender, EventArgs e)
    {
        objMessageDele(this.txtSend.Text.Trim().ToString());
    }
}

//[1]声明委托
public delegate void MessageDele(string text);

   

  这是相对来说比较好的选择,毕竟我们要选择的必定是最优选择,在主窗体中创建委托变量是一种浪费时间的做法,不推荐使用。在这里仅仅是做了委托在窗体通信方面的相关实例,委托其他方面并未涉及,以后的更新中将会出现委托的深一步的运用。​委托在窗体通信方面的应用还是比较热门的,毕竟响应速度比起通过刷新来判断是否有新消息的接入所用的时间少之又少​。

 

转载于:https://www.cnblogs.com/CKExp/p/10520100.html

乐播投屏是一款简单好用、功能强大的专业投屏软件,支持手机投屏电视、手机投电脑、电脑投电视等多种投屏方式。 多端兼容与跨网投屏:支持手机、平板、电脑等多种设备之间的自由组合投屏,且无需连接 WiFi,通过跨屏技术打破网络限制,扫一扫即可投屏。 广泛的应用支持:支持 10000+APP 投屏,包括综合视频、网盘与浏览器、美韩剧、斗鱼、虎牙等直播平台,还能将央视、湖南卫视等各大卫视的直播内容一键投屏。 高清流畅投屏体验:腾讯独家智能音画调校技术,支持 4K 高清画质、240Hz 超高帧率,低延迟不卡顿,能为用户提供更高清、流畅的视觉享受。 会议办公功能强大:拥有全球唯一的 “超级投屏空间”,扫码即投,无需安装。支持多人共享投屏、远程协作批注,PPT、Excel、视频等文件都能流畅展示,还具备企业级安全加密,保障会议资料不泄露。 多人互动功能:支持多人投屏,邀请好友加入投屏互动,远程也可加入。同时具备一屏多显、语音互动功能,支持多人连麦,实时语音交流。 文件支持全面:支持 PPT、PDF、Word、Excel 等办公文件,以及视频、图片等多种类型文件的投屏,还支持网盘直投,无需下载和转格式。 特色功能丰富:投屏时可同步录制投屏画面,部分版本还支持通过触控屏或电视端外接鼠标反控电脑,以及在投屏过程中用画笔实时标注等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值