文章教程

21.6系统主界面模块

8/31/2020 9:56:04 PM 人评论 次浏览

本聊天室系统的主界面分为如下3个部分。

(1)用户列表界面:显示当前在聊天室内的用户。

(2)信息显示界面:显示系统内用户的聊天信息。

(3)发布表单界面:用于发布用户的聊天信息。

本节将详细讲解上述3个部分的具体实现过程。

在上述3个部分中,信息显示界面是核心,在本节的内容中,将详细讲解显示聊天信息界面的实现过程。

在线聊天界面文件LiaoTian.aspx的功能是为在线用户提供聊天表单,并实现用户间的聊天处理。其具体实现过程如下。

(1)插入1个ListBox控件,用于显示此聊天室内的在线用户。

(2)插入1个TextBox控件,用于显示在线聊天信息。

(3)插入1个TextBox控件,供用户输入发布的聊天信息。

(4)插入1个Button控件,用于激活聊天内容的发布处理事件。

(5)插入1个Timer控件,用于定时刷新聊天页面的信息。

在线聊天处理页面文件LiaoTian.aspx.cs的功能是获取并显示系统内此聊天室的在线用户,并对用户发布的聊天信息进行处理。其具体实现过程如下。

(1)引入命名空间和声明ChatRoom类。

(2)通过Page_Load获取聊天室的编号,并进行初始化处理。

(3)通过函数ChatUserInit( )初始化聊天室信息。

(4)定义函数ShowUserData( ),显示在线用户信息。

(5)定义函数ShowMessageData( ),显示用户发布的聊天室信息。

(6)定义函数btUser_Tick(object sender,EventArgs e),实现聊天室的定式刷新处理。

(7)定义函数btnCommit_Click(object sender,EventArgs e),将新发布的信息添加到系统库中。

上述操作实现的具体运行流程如图21-6所示。

图21-6 在线聊天处理运行流程图

下面介绍上述功能的具体实现过程。

1.Page_Load初始化

事件Page_Load(object sender, EventArgs e)实现页面的初始化处理,其具体实现过程如下。

(1)通过Session["UserID"]值判断用户是否登录。

(2)获取当前聊天室的编号ID,并保存在ChatID中。

(3)分别调用函数ChatUserInit( )和函数ShowUserData( ),显示用户的信息。

上述功能对应的实现代码如下。

using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
//引入新的命名空间
using ASPNETAJAXWeb.AjaxChat;
using System.Data.SqlClient;
using System.Text;
using System.Collections.Generic;
public partial class ChatRoom : System.Web.UI.Page
{
  int chatID = −1;
  protected void Page_Load(object sender, EventArgs e)
  { //如果用户未登录,则重定向到登录页面
    if(Session["UserID"] == null)
    {
      Response.Redirect("~/Login.aspx");
      return;
    }
    //获取聊天室的ID值
    if(Request.Params["ChatID"] != null)
    {
      chatID = Int32.Parse(Request.Params["ChatID"].ToString());
    }
    if(!Page.IsPostBack)
    { //初始化聊天室信息
      ChatUserInit();
      ShowUserData();
    }    
  }

2.定义函数ChatUserInit()

函数ChatUserInit( )的功能是初始化此聊天室的信息,并使用ViewState保存用户进入聊天室的时间。其对应的实现代码如下。

  private void ChatUserInit()
  {  //保存进入聊天室的时间
    ViewState["StartDate"] = DateTime.Now.ToString();
    //设置用户进入的聊天室
    for(int i = 0; i < ASP.global_asax.Users.Count; i++)
    {
      if(ASP.global_asax.Users[i].UserID.ToString() == Session["UserID"].ToString())
      {
        ASP.global_asax.Users[i].ChatID = chatID;
        break;
      }
    }
  }

3.定义函数ShowUserData()

函数ShowUserData( )的功能是获取此聊天室内当前的在线用户信息。其对应的实现代码如下。

  private void ShowUserData()
  { //获取聊天室的用户
    List<UserInfo> users = new List<UserInfo>();
    foreach(UserInfo ui in ASP.global_asax.Users)
    {
      if(ui.ChatID == chatID)
      {
        users.Add(ui);
      }
    }
    //显示聊天室的用户
    lbUser.DataSource = users;
    lbUser.DataValueField = "UserID";
    lbUser.DataTextField = "Username";
    lbUser.DataBind();
  }

4.定义函数ShowMessageData()

函数ShowMessageData()的功能是定义Message()数组,通过数据库访问层方法GetNeirong(chatID)获取聊天室内的聊天信息,并将聊天信息详细地显示出来。其对应的实现代码如下。

  private void ShowMessageData()
  { //获取所有消息
    Message message = new Message();
    DataSet ds = message.GetNeirong(chatID);
    if(ds == null || ds.Tables.Count <= 0 || ds.Tables[0].Rows.Count <= 0) return;
    //过滤进入该聊天室之前的消息,保留进入该聊天室之后的消息
    DataView dv = ds.Tables[0].DefaultView;
    dv.RowFilter = string.Format("CreateDate >= '{0}'",DateTime.Parse(ViewState ["StartDate"].ToString()));
    //构建聊天的消息
    StringBuilder sbMessage = new StringBuilder();
    foreach(DataRowView row in dv)
    { //设置一条消息
      string singleMessage=row["Username"].ToString()+"在[" + row["CreateDate"]. ToString() + "]发表:\n";
      singleMessage += "  " + row["Message"].ToString() + "\n";
      sbMessage.Append(singleMessage);
    }
    //显示聊天消息
    tbChatMessage.Text = sbMessage.ToString();
  }

5.刷新和发布处理

刷新和发布处理即实现页面的定时刷新处理和新内容的发布处理,上述功能的实现函数如下。

  • 函数tUser_Tick(object sender,EventArgs e):实现聊天页面的定时刷新。
  • 函数tUser_Tick(object sender,EventArgs e):调用数据库访问层的方法AddNeirong(string message, int userID,int chatID),将新发布的数据添加到系统库中。

上述功能对应的实现代码如下。

  protected void tUser_Tick(object sender,EventArgs e)
  { //定时显示聊天室的信息
    ShowMessageData();
    ShowUserData();
  }
  protected void btnCommit_Click(object sender,EventArgs e)
  { //发送新消息并显示消息
    Message message = new Message();
    if (message.AddNeirong(tbMessage.Text, Int32.Parse(Session["UserID"].ToString()), chatID) > 0)
    { //显示消息
      ShowMessageData();
    }    
  }

教程类别