天天看点

Silverlight+WCF 新手实例 象棋 登陆与转向(十一)

好了,从这节起,我们可能要暂时远离我们的象棋库了,因为我们要开始进入一些周边的事情了。

像登陆啊,登陆后创建房间大厅啊,进入后除了象棋还有用户列表,聊天窗口等等,中间少不了wcf通讯。

好了,开始登陆小节,先上一张小图:

Silverlight+WCF 新手实例 象棋 登陆与转向(十一)

看,多简洁,一个id一个昵称一个登陆就完了。虽然简洁,可是也会有很多想法的。

不过想法待会再说,新建页面先:对着silverlight应用程序右键-》添加新建项-》silverlight用户控件

-》输入:login.xaml

回车一页面就出来了。

往页面里拉两个textblock,两个textbox,一个button[双击后就有一个click事件了],如下:

Silverlight+WCF 新手实例 象棋 登陆与转向(十一)
Silverlight+WCF 新手实例 象棋 登陆与转向(十一)

 <grid x:name="layoutroot" background="white" height="144" width="192">

        <textbox height="23" horizontalalignment="left" margin="37,68,0,0" name="txtnickname" verticalalignment="top" width="143" />

        <button content="登陆" height="23" horizontalalignment="left" margin="65,109,0,0" name="btnlogin" verticalalignment="top" width="75" click="btnlogin_click" />

        <textblock height="23" horizontalalignment="left" margin="6,68,0,0" name="textblock1" text="昵称:" verticalalignment="top" width="35" />

        <textbox  height="23" horizontalalignment="left" margin="37,29,0,0" name="txtuserid" verticalalignment="top" width="143" />

        <textblock height="23" horizontalalignment="left" margin="6,29,0,0" name="textblock2" text="id:" verticalalignment="top" />

    </grid>

Silverlight+WCF 新手实例 象棋 登陆与转向(十一)

改下名称改下id,噢,注意,没id了,全都是name了。

好,界面有好,双击那个button也有btnlogin_click事件了。

我们右键,查看代码,进入cs代码页面:

我们先看一下btnlogin_click事件写什么代码:

全局变量:

guid userid;//用户id

string nickname = "";//昵称

事件代码:

Silverlight+WCF 新手实例 象棋 登陆与转向(十一)
Silverlight+WCF 新手实例 象棋 登陆与转向(十一)

private void btnlogin_click(object sender, routedeventargs e)

        {

            nickname = txtnickname.text.trim();

            if (nickname == "")

            {

                messagebox.show("请输入昵称!");

                return;

            }

            if (nickname.contains(","))

                messagebox.show("昵称不能包含非法字符!");

            btnlogin.isenabled = false;

            //设置cookie

            system.windows.browser.htmlpage.document.cookies =userid + "," + nickname;

            //紧接着转到房间页面去,咋转?

        }

Silverlight+WCF 新手实例 象棋 登陆与转向(十一)

对昵称进行判断,然后写cookie,之后页面转向,这里少了一个id,还有就是页面咋转的问题。

为什么这里不对id是不是为空进行判断?因为我们要补充一个load方法,让页面加载时,先从cookie里读读看有没有用户id和昵称,

有的话就直接显示在文件框上:

Silverlight+WCF 新手实例 象棋 登陆与转向(十一)
Silverlight+WCF 新手实例 象棋 登陆与转向(十一)

public login()

            initializecomponent();

            load();

        private void load()

            loadfromcookie();

            txtuserid.text = userid.tostring();

            txtuserid.isreadonly = true;

            txtnickname.text = nickname;

        private void loadfromcookie()

            string cookies = system.windows.browser.htmlpage.document.cookies;

            if (cookies.contains(","))

                string[] para = cookies.split(',');

                if (para.length == 2 && para[0].length == guid.empty.tostring().length)

                {

                    userid = new guid(para[0]);

                    nickname = para[1];

                    return;

                }

            userid = guid.newguid();

Silverlight+WCF 新手实例 象棋 登陆与转向(十一)

最长一点的就是从cookie里拿id和昵称,按“,”号分隔下,如果没cookie,默认就的id就newguid()一下了。

读取后,我们默认给txtuserid设置了值并设置为只读,所以啊,我们的click事件里并没有对id进行处理了。

接下来我们来看看怎么转向?其实转向啊,博园里就有相关文章了,很n个人写过,不过都是一个样的,谁是第二手来源已说不清了。

不过原创的一定是微软官方了。

我们看一下silverlight应用程序下,是不是有一个app.xaml,我们点进去看看它的代码,看下这行:

private void application_startup(object sender, startupeventargs e)

            this.rootvisual = new mainpage();

默认第一手启动的是mainpage,如果我们换成new login(),那启动的首页面就是login页了。

不过了,这里不是设为login就算了,我们再看看这下代码:

Silverlight+WCF 新手实例 象棋 登陆与转向(十一)
Silverlight+WCF 新手实例 象棋 登陆与转向(十一)

grid root = new grid();//全局变量

            this.rootvisual = root;

            root.children.add(new login());

//自定义方法转向。

        public void redirectto(control ct)

            root.children.clear();

            root.children.add(ct);

Silverlight+WCF 新手实例 象棋 登陆与转向(十一)

看到没有,小小改动了两行代码,只要调用redirectto方法,来切换root控件,就可以实现转向了。

这里我们顺便改一下另一行代码,最下面那行:

Silverlight+WCF 新手实例 象棋 登陆与转向(十一)
Silverlight+WCF 新手实例 象棋 登陆与转向(十一)

//这是原来的方法

private void reporterrortodom(applicationunhandledexceptioneventargs e)

            try

                string errormsg = e.exceptionobject.message + e.exceptionobject.stacktrace;

                errormsg = errormsg.replace('"', '\'').replace("\r\n", @"\n");

                system.windows.browser.htmlpage.window.eval("throw new error(\"unhandled error in silverlight application " + errormsg + "\");");

            catch (exception)

//我们把它改成这样:

                system.windows.browser.htmlpage.window.alert("error: " + errormsg );

Silverlight+WCF 新手实例 象棋 登陆与转向(十一)

其实就是把eval改成alert,这样在出现未捕获异常的时候,弹出下说明就行了,不用弹出那个调试器。

ok了,转向函数已经有了,我们可以在登陆页里写上转行代码了:

 //紧接着转到房间页面去,咋转?就这里补上一行代码而已

            ((app)(application.current)).redirectto(new mainpage());

我们运行f5一下看下效果:

起始登陆:

Silverlight+WCF 新手实例 象棋 登陆与转向(十一)

点击登陆,转入mainpage页

Silverlight+WCF 新手实例 象棋 登陆与转向(十一)

ok,正常转向了。

登陆就先讲到这了,当然,随着wcf通讯开始后,我们肯定会回来登陆页做很多事情,而且会在app里也初始化很多代码的。

下节,我们创建房间大厅,然后让转向转到房间大厅里。

版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:

http://www.cnblogs.com/cyq1162/archive/2010/07/12/1775535.html