zoukankan      html  css  js  c++  java
  • 简单的实现QQ通信功能(五)

    第五部分:聊天界面的设计及代码

    一:效果图及界面设计

    1. 效果图:

    2. 界面设计:

    (1)左上角显示朋友的头像和“某某正在和某某聊天”。

    (2)中间的聊天窗口用了一个ListView,视图用详细信息Details,设置了一列用来显示主项,只用了其中的主项(里面加载头像和需要显示的信息及消息内容),没有设置子项信息。

    (3)TextBox用来写消息。

    (4)一个发送的Button。

    (5)界面用Dock布局。

    (6)imageList1里面放用户的ico图标,imageList2放用户头像,时钟timer1来查询显示聊天消息内容。

    3. 用到的各个控件的名称:

    聊天内容显示窗口chatwindow,写信息文本框senderword,发送按钮btnsender

    二:代码设计:

           private string _Friendname;
    
            public string Friendname
            {
                get { return _Friendname; }
                set { _Friendname = value; }
            }
            private string _Mename;
    
            public string Mename
            {
                get { return _Mename; }
                set { _Mename = value; }
            }
            public Chat()
            {
                InitializeComponent();
            }
            //构造函数重载
            public Chat(string friendname,string mename)
                : this()
            {
                _Friendname = friendname;
                _Mename = mename;
            }
            //加载
            private void Chat_Load(object sender, EventArgs e)
            {
                //加载左上角的ico及显示文字
                UsersTableAdapter adp = new UsersTableAdapter();
                qqdata.UsersDataTable table = adp.GetDataByUsername(_Friendname);
    //将取出的Image图片转为Icon格式的 Bitmap a
    = (Bitmap)imageList1.Images[table[0].PhotoCode-1]; this.Icon = System.Drawing.Icon.FromHandle(a.GetHicon()); this.Text = getmemoname(_Mename) + "正在和" + getmemoname(_Friendname) + "聊天"; } //根据用户名获取昵称的方法 private string getmemoname(string name) { UsersTableAdapter adp1 = new UsersTableAdapter(); qqdata.UsersDataTable tab = new qqdata.UsersDataTable(); tab = adp1.GetDataByUsername(name); return tab[0].Memo; } //按下发送键 private void btnsender_Click(object sender, EventArgs e) { string nr = senderword.Text; DateTime sj = DateTime.Now; //将自己发送的聊天内容,时间传到数据库 new ChatTableAdapter().InsertChat(_Mename,_Friendname,nr,sj,0); senderword.Text = ""; //将自己发送的内容直接显示出来,添加显示(非绑定) qqdata.UsersDataTable tab = new UsersTableAdapter().GetDataByUsername(_Mename); //造主项 ListViewItem item = new ListViewItem(); //设置主项信息 item.Text = getmemoname(_Mename) + sj.ToString() + "说:" + nr; item.ImageIndex = tab[0].PhotoCode - 1; chatwindow.Items.Add(item); } //时间控件循环查 private void timer1_Tick(object sender, EventArgs e) { //数据库内查找此朋友发来的未读消息,添加显示出来,显示完设置已读 qqdata.ChatDataTable tab2 = new ChatTableAdapter().GetDataBySenderAndReceiver(_Friendname,_Mename,0); foreach (qqdata.ChatRow row in tab2.Rows) { qqdata.UsersDataTable tab = new UsersTableAdapter().GetDataByUsername(row.Sender); //造主项 ListViewItem item = new ListViewItem(); //设置主项信息 item.Text = getmemoname(row.Sender) + row.Time.ToString() + "说:" + row.Content; item.ImageIndex = tab[0].PhotoCode - 1; //标记为已读 if (row.Sender == _Friendname) { new ChatTableAdapter().UpdateState(1, row.Ids); } chatwindow.Items.Add(item); } } //窗体关闭的时候给N赋值为0,控制自定义控件头像在聊天关闭后来消息提醒 private void Chat_FormClosed(object sender, FormClosedEventArgs e) { Friendsmode.N = 0; }
  • 相关阅读:
    功能点方法
    学数答题160908-数论不等式
    学数答题160903-函数方程
    学数答题160906-不等式最值
    学数答题160905-函数方程
    学数答题160904-不等式
    学数答题160903-三角函数
    kitti-b站教程
    kitti数据集介绍
    SLAM:理论与实践
  • 原文地址:https://www.cnblogs.com/Alvin-ftd/p/4079713.html
Copyright © 2011-2022 走看看