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

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

概述好了,从这节起,我们可能要暂时远离我们的象棋库了,因为我们要开始进入一些周边的事情了。 像登陆啊,登陆后创建房间大厅啊,进入后除了象棋还有用户列表,聊天窗口等等,中间少不了WCF通讯。 好了,开始登陆小节,先上一张小图: 看,多简洁,一个ID一个昵称一个登陆就完了。虽然简洁,可是也会有很多想法的。 不过想法待会再说,新建页面先:对着Silverlight应用程序右键-》添加新建项-》Silverl 好了,从这节起,我们可能要暂时远离我们的象棋库了,因为我们要开始进入一些周边的事情了。

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

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

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

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

-》输入:Login.xaml

回车一页面就出来了。

往页面里拉两个TextBlock,两个TextBox,一个button[双击后就有一个Click事件了],如下:

  < GrID  x:name ="LayoutRoot"  Background ="White"  Height ="144"  WIDth ="192" >
        
< TextBox  Height ="23"  HorizontalAlignment ="left"  margin ="37,68,0"  name ="txtNickname"  VerticalAlignment ="top"  WIDth ="143"   />
        
< button  Content ="登陆"  Height ="23"  HorizontalAlignment ="left"  margin ="65,109,0"  name ="btnLogin"  VerticalAlignment ="top"  WIDth ="75"  Click ="btnLogin_Click"   />
        
< TextBlock  Height ="23"  HorizontalAlignment ="left"  margin ="6,0"  name ="textBlock1"  Text ="昵称:"  VerticalAlignment ="top"  WIDth ="35"   />
        
< TextBox   Height ="23"  HorizontalAlignment ="left"  margin ="37,29,0"  name ="txtUserID"  VerticalAlignment ="top"  WIDth ="143"   />
        
< TextBlock  Height ="23"  HorizontalAlignment ="left"  margin ="6,0"  name ="textBlock2"  Text ="ID:"  VerticalAlignment ="top"   />
    
</ GrID >

 

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

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

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

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

全局变量:

GuID userID; // 用户ID
string  nickname  =   "" ; // 昵称

 

事件代码:

private   voID  btnLogin_Click( object  sender, RoutedEventArgs e)
        {
            nickname 
=  txtNickname.Text.Trim();
            
if  (nickname  ==   "" )
            {
                MessageBox.Show(
" 请输入昵称! " );
                
return ;
            }
            
if  (nickname.Contains( " , " ))
            {
                MessageBox.Show(
" 昵称不能包含非法字符! " );
                
return ;
            }
            btnLogin.IsEnabled 
=   false ;
            
// 设置cookie
            System.windows.browser.HTMLPage.document.cookies  = userID  +   " , "   +  nickname;
            
// 紧接着转到房间页面去,咋转?
        }

 

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

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

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

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();
        }

 

最长一点的就是从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就算了,我们再看看这下代码:

GrID root  =   new  GrID(); // 全局变量
private   voID  Application_Startup( object  sender, StartupEventArgs e)
        {
            
this .RootVisual  =  root;
            root.Children.Add(
new  Login());
        }
//自定义方法转向。
        
public   voID  RedirectTo(Control ct)
        {
            root.Children.Clear();
            root.Children.Add(ct);
        }

 

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

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

 

// 这是原来的方法
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)
            {
            }
        }
// 我们把它改成这样:
private   voID  ReportErrorTodoM(ApplicationUnhandledExceptionEventArgs e)
        {
            
try
            {
                
string  errorMsg  =  e.ExceptionObject.Message  +  e.ExceptionObject.StackTrace;
                errorMsg 
=  errorMsg.Replace( ' " ' , @"\n");

                System.windows.browser.HTMLPage.Window.Alert(
" Error:  "   +  errorMsg );
            }
            
catch  (Exception)
            {
            }
        }

 

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

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

  // 紧接着转到房间页面去,咋转?就这里补上一行代码而已
            ((App)(Application.Current)).RedirectTo( new  MainPage());

 

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

起始登陆:

点击登陆,转入MainPage页

OK,正常转向了。

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

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

总结

以上是内存溢出为你收集整理的Silverlight+WCF 新手实例 象棋 登陆与转向(十一)全部内容,希望文章能够帮你解决Silverlight+WCF 新手实例 象棋 登陆与转向(十一)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1009193.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存