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

一:效果图及界面设计

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[].PhotoCode-];
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[].Memo;
} //按下发送键
private void btnsender_Click(object sender, EventArgs e)
{
string nr = senderword.Text;
DateTime sj = DateTime.Now; //将自己发送的聊天内容,时间传到数据库
new ChatTableAdapter().InsertChat(_Mename,_Friendname,nr,sj,);
senderword.Text = ""; //将自己发送的内容直接显示出来,添加显示(非绑定)
qqdata.UsersDataTable tab = new UsersTableAdapter().GetDataByUsername(_Mename);
//造主项
ListViewItem item = new ListViewItem();
//设置主项信息
item.Text = getmemoname(_Mename) + sj.ToString() + "说:" + nr;
item.ImageIndex = tab[].PhotoCode - ;
chatwindow.Items.Add(item);
} //时间控件循环查
private void timer1_Tick(object sender, EventArgs e)
{
//数据库内查找此朋友发来的未读消息,添加显示出来,显示完设置已读
qqdata.ChatDataTable tab2 = new ChatTableAdapter().GetDataBySenderAndReceiver(_Friendname,_Mename,); 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[].PhotoCode - ;
//标记为已读
if (row.Sender == _Friendname)
{
new ChatTableAdapter().UpdateState(, row.Ids);
} chatwindow.Items.Add(item);
} }
//窗体关闭的时候给N赋值为0,控制自定义控件头像在聊天关闭后来消息提醒
private void Chat_FormClosed(object sender, FormClosedEventArgs e)
{
Friendsmode.N = ;
}

简单的实现QQ通信功能(五)的更多相关文章

  1. 简单的实现QQ通信功能(二)

    第二部分:功能需求以及大体思路 一:功能需求: 1. 角色:登录用户. 2. 登录: (1)检查用户名和密码是否正确,正确登录成功,否则提醒用户名或密码错误. (2)登录时可以选择登录状态,送入数据库 ...

  2. 简单的实现QQ通信功能(四)

    第四部分:主界面的设计及代码 一:效果图及界面设计 1. 效果图: 2. 界面设计: (1)上面显示自己信息用一个PictureBox和两个Label,用来显示自己的头像和昵称备注名. (2)下面用了 ...

  3. 简单的实现QQ通信功能(三)

    第三部分:登陆界面的设计及代码 一:效果图及界面设计 1. 效果图: 2. 界面设计: (1)仿照QQ的登陆界面,右上角放了三个Label,用来做关闭.最小化和设置,使用了它们的Click事件当做按钮 ...

  4. 简单的实现QQ通信功能(一)

    第一部分:数据库的设计,数据集的建立 一:数据库的设计: 1.用户表:包含用户名.密码.昵称.性别.备注.状态.头像代号和最后登录时间. 2.朋友关系表:自增长列为主键列,用户名和好友名,还有朋友的状 ...

  5. 经测试稳定可用的蓝牙链接通信Demo,记录过程中遇到的问题的思考和解决办法,并整理后给出一个Utils类可以简单调用来实现蓝牙功能

    说明:这是本人在蓝牙开发过程中遇到过的问题记录和分析,以及解决办法. 在研究过程中,许多的前人给出的解决方案和思路指导对我相当有帮助,但并非都是可采取的解决方法, 经过本人对这些方法的测试和使用过后, ...

  6. Android 微信分享与QQ分享功能

    微信分享与QQ分享功能现在都挺常见的,可以根据一些第三方社会化分功能快速实现,不过多多少少都不怎么纯净,最好都是自己看官方文档来实现就最好了~ 一.微信分享 微信分享功能需要先在微信开放平台注册应用并 ...

  7. jsp+servlet+mysql 实现简单的银行登录转账功能

    jsp+servlet+mysql 实现简单的银行登录转账功能 [前期的准备] html(登录界面),servlet(处理业务逻辑),jsp(主要实现界面),mysql(实现与数据库的简单的交互)先从 ...

  8. 网页中插入QQ在线功能

    网页中插入QQ在线功能 本随笔记录的是网页中如何插入qq在线聊天,这里讲解的是 普通QQ在线聊天操作. 例:第一种方式  使用 tencent://message/?uin=QQ号码&Site ...

  9. UEditor编辑器和php简单的实现socket通信

    一.UEditor编辑器 使用这个编辑器是需要先下载编辑器文件,记得下载的时候放入自己的网站中,既然是php中使用,自然我下载的就是php的UEditor编辑器了,然后是utf-8的 其实使用很简单, ...

随机推荐

  1. mapreduce源码分析总结

    一 MapReduce概述 Map/Reduce是一个用于大规模数据处理的分布式计算模型,它最初是由Google工程师设计并实现的,Google已经将它完整的MapReduce论 文公开发布了.其中对 ...

  2. bzoj1914

    这道题用转化补集的思想一下就很简单了考虑不包括原点的三角形,显然对于一个点,它与原点构成的直线在这条直线同侧的任意两点和这个点构成的三角形一定不是黄金三角形为了避免重复我们只考虑直线上方的两点然后我们 ...

  3. 注意EntityFramework.extended中的坑

    EntityFramework.extended 的好处就不用多说了 详情:https://github.com/loresoft/EntityFramework.Extended 但是使用时还是要注 ...

  4. BZOJ1895: Pku3580 supermemo

    1895: Pku3580 supermemo Time Limit: 15 Sec  Memory Limit: 64 MBSubmit: 77  Solved: 47[Submit][Status ...

  5. 使用 Azure Site Recovery 灾难恢复至 Azure 的功能现已正式发布

    ABHISHEK A. HEMRAJANI 云 + Enterprise项目经理 自我们宣布发布使用 Azure SiteRecovery 灾难恢复至 Azure的功能预览版以来,这几个月着实令人 ...

  6. 全新 D 系列虚拟机型号

    Kenaz KwaAzure计算运行时项目经理 今天,我们宣布将发布名为D系列的Windows Azure 新VM型号,并支持虚拟机和 Web/Worker Role.这些虚拟机型号最多可以提供 11 ...

  7. .net,sessionState的Session共享问题解决方案

    最近项目因为要负载均衡所以就使用了sessionState的Session共享,但是却发现多台服务器中有个别服务器的Session没有共享,于是就有了这篇文章,下面开始说说. 这个基本上就分两种情况: ...

  8. MongoDB实战开发 【零基础学习,附完整Asp.net示例】

    MongoDB实战开发 [零基础学习,附完整Asp.net示例] 阅读目录 开始 下载MongoDB,并启动它 在C#使用MongoDB 重构(简化)代码 使用MongoDB的客户端查看数据 使用Mo ...

  9. 彻底解决:请求被中止: 未能创建 SSL/TLS 安全通道

    最近有个项目要调用客户用java写的带https的webservice,对方提供了证书文件 test.pfx,我这里调用方式如下: //webservice代理类 SvcService svc = n ...

  10. codeforces 652D Nested Segments 离散化+树状数组

    题意:给你若干个区间,询问每个区间包含几个其它区间 分析:区间范围比较大,然后离散化,按右端点排序,每次更新树状数组中的区间左端点,查询区间和 注:(都是套路) #include<cstdio& ...