• Silverlight+WCF 新手实例 象棋 主界面控件消息传递(二十六)


    赶紧接着上一节:Silverlight+WCF 新手实例 象棋 主界面-实时聊天区(二十五) 

    这节我们实现上节没实现的纠结的进出房间的消息提示

    我们清楚的知道,我们每个区都是一个用户控件,我们的在线用户进出时,得到聊天区域显示信息,这就涉及到用户控件之间的消息传递了。

    在线用户区说:反正我是没权直接去实时聊天区写东西,没办法,找中介委托设置一下了。

    那谁是中介呢?委托谁呢?当然是衣食父母Index.xaml了,是它撑着整个家庭的。

    好了,知道中介了,那我就签个委托书了:

    回到OnlineUser.xaml.cs里,签写全局的委托书[HelpSetSystemMsg]:

     public partial class OnlineUser : UserControl
        {
            
    public delegate void HelpSetSystemMsg(string msg);
            
    public event HelpSetSystemMsg HelpSetSystemMsgEvent;
            
    public OnlineUser()
            {
               
    //..省略。。。
            }

            
    void client_NotifyUserUpdateReceived(object sender, GameService.NotifyUserUpdateReceivedEventArgs e)
            {
               
    //..省略。。。
            }

            
    void client_GetPlayerListCompleted(object sender, GameService.GetPlayerListCompletedEventArgs e)
            {
               
    //..省略。。。
            }
        }

    OK,委托书有了,我只管调了,其它事情让Index.xaml中介帮我搞定。

    当有用户进出的时候,此时会收到消息,然后委托人家帮我设置一下消息:

    void client_NotifyUserUpdateReceived(object sender, GameService.NotifyUserUpdateReceivedEventArgs e)
            {
                
    //...省略一堆原有代码...
                HelpSetSystemMsgEvent("系统消息:"+e.player.NickName + (e.isEnter?" 进入":"退出")+"房间");
            }

    好了,我这边不管了,反正我按委托书上的办,其它你们搞定了。

    接着衣食父母这边呢[Index.xmal.cs]

    收了人家的委托,自然要办事了,以前没人找我办事,孩子都不管了,现在有人找了,孩子间要通讯,得提升一个高度管理才行:

    于是,构造函数里的实例化,全先调到全局定义了:

     public partial class Index : UserControl
        {
            Chess chessControl;
            OnlineUser onlineUserControl;
            Chat chatControl;
            
    public Index()
            {
                InitializeComponent();
                chessControl
    =new Chess();//实例化控件
                chessBoard.Child = chessControl;//加载控件
                onlineUserControl = new OnlineUser();//今天新加的在线用户
                onlineUserBoard.Child = onlineUserControl;
                chatControl 
    = new Chat();//也是今天新加的---看这里看这里两行
                chatBoard.Child = chatControl;
            }
        }

    好了,得帮孩子做点事件了:

    public partial class Index : UserControl
        {
            
    //..省略三行...       
            public Index()
            {
               
    //..省略N行...

                
    //下面为委托事件
                onlineUserControl.HelpSetSystemMsgEvent += new OnlineUser.HelpSetSystemMsg(onlineUserControl_HelpSetSystemMsgEvent);
            }

            
    void onlineUserControl_HelpSetSystemMsgEvent(string msg)
            {
                chatControl.AddMsg(msg);
            }
        }

    看,两行代码搞写,在onlineUser的委托中,调用了chat的AddMsg[我有先见之明,所以手痒定义了这个方法]

    好了,到此,Index.xaml的事也做完了

    至于ChatControl,上节不知觉的实现了AddMsg方法,刚好对口可以被调用,省事去另写方法。

    OK,少不了F5运行看看效果:

    看,消息提示了,OK,本小节就到此了,关于控件消息传递,以后章节会经常用到,大伙看仔细点。

    版权声明:本文原创发表于 博客园,作者为 路过秋天 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
    个人微信公众号
    创业QQ群:617713515
    Donation(扫码支持作者):支付宝:
    Donation(扫码支持作者):微信:
  • 相关阅读:
    Character 比较注意先要转换成字符串类型
    ibats注意
    初试体验java多线程
    解压jar
    Velocity语法--转载
    python 批量请求url
    java.lang.NoClassDefFoundError
    疑问
    sql常用语句--转载
    Spring AOP高级——源码实现(3)AopProxy代理对象之JDK动态代理的创建过程
  • 原文地址:https://www.cnblogs.com/cyq1162/p/1784374.html
Copyright © 2020-2023  润新知