简单的实现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[].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通信功能(五)的更多相关文章
- 简单的实现QQ通信功能(二)
第二部分:功能需求以及大体思路 一:功能需求: 1. 角色:登录用户. 2. 登录: (1)检查用户名和密码是否正确,正确登录成功,否则提醒用户名或密码错误. (2)登录时可以选择登录状态,送入数据库 ...
- 简单的实现QQ通信功能(四)
第四部分:主界面的设计及代码 一:效果图及界面设计 1. 效果图: 2. 界面设计: (1)上面显示自己信息用一个PictureBox和两个Label,用来显示自己的头像和昵称备注名. (2)下面用了 ...
- 简单的实现QQ通信功能(三)
第三部分:登陆界面的设计及代码 一:效果图及界面设计 1. 效果图: 2. 界面设计: (1)仿照QQ的登陆界面,右上角放了三个Label,用来做关闭.最小化和设置,使用了它们的Click事件当做按钮 ...
- 简单的实现QQ通信功能(一)
第一部分:数据库的设计,数据集的建立 一:数据库的设计: 1.用户表:包含用户名.密码.昵称.性别.备注.状态.头像代号和最后登录时间. 2.朋友关系表:自增长列为主键列,用户名和好友名,还有朋友的状 ...
- 经测试稳定可用的蓝牙链接通信Demo,记录过程中遇到的问题的思考和解决办法,并整理后给出一个Utils类可以简单调用来实现蓝牙功能
说明:这是本人在蓝牙开发过程中遇到过的问题记录和分析,以及解决办法. 在研究过程中,许多的前人给出的解决方案和思路指导对我相当有帮助,但并非都是可采取的解决方法, 经过本人对这些方法的测试和使用过后, ...
- Android 微信分享与QQ分享功能
微信分享与QQ分享功能现在都挺常见的,可以根据一些第三方社会化分功能快速实现,不过多多少少都不怎么纯净,最好都是自己看官方文档来实现就最好了~ 一.微信分享 微信分享功能需要先在微信开放平台注册应用并 ...
- jsp+servlet+mysql 实现简单的银行登录转账功能
jsp+servlet+mysql 实现简单的银行登录转账功能 [前期的准备] html(登录界面),servlet(处理业务逻辑),jsp(主要实现界面),mysql(实现与数据库的简单的交互)先从 ...
- 网页中插入QQ在线功能
网页中插入QQ在线功能 本随笔记录的是网页中如何插入qq在线聊天,这里讲解的是 普通QQ在线聊天操作. 例:第一种方式 使用 tencent://message/?uin=QQ号码&Site ...
- UEditor编辑器和php简单的实现socket通信
一.UEditor编辑器 使用这个编辑器是需要先下载编辑器文件,记得下载的时候放入自己的网站中,既然是php中使用,自然我下载的就是php的UEditor编辑器了,然后是utf-8的 其实使用很简单, ...
随机推荐
- 配置Memcache服务器并实现主从复制功能(repcached)(转)
1.repcached介绍repcached 是日本人开发的实现memcached复制功能,它是一个单 master单 slave的方案,但它的 master/slave都是可读写的,而且可以相互同步 ...
- OpenGL绘制自由落体小球
OpenGL绘制自由落体小球 一. 程序运行的软硬件环境 本次设计在window10系统下进行,运用C++进行编写,在CodeBlocks环境下使用OpenGL进行设计. 所需环境配置分为2部分 ...
- curl 使用简介
Libcurl使用介绍: 四个关键函数: 1. curl_easy_init() 初始化curl环境,新建curl对象,返回对象句柄,使用举例: CURL *handler = cur ...
- Tyvj P1729 文艺平衡树 Splay
题目: http://tyvj.cn/p/1729 P1729 文艺平衡树 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 此为平衡树系列第二道:文艺平衡树 ...
- 动态链接库(DLL)的使用
2013-07-04 http://blog.csdn.net/blpluto/article/details/5715182 感觉挺好,推荐去看看.
- centos6.4 yum kvm
1. 安装软件包: yum -y install virt-manager; yum install qemu-kvm yum install libvirt yum install libvi ...
- 教程-Delphi各种退出break,continue, exit,abort, halt, runerror
delphi中表示跳出的有break,continue, exit,abort, halt, runerror.1.break 强制退出循环(只能放在循环中),用于从For语句,while语句或rep ...
- A Tour of Go The new function
The expression new(T) allocates a zeroed T value and returns a pointer to it. var t *T = new(T) or t ...
- eas bos 编辑界面 editUIt 属性值为空
在编辑界面,我们可以正常的保存某个值到数据库,同时列表界面也可以正常显示. 但是当我们再次打开这个编辑界面的时候,该属性值缺无法显示. 通常情况下,通过下面两个方法可以解决 方法一: 在编辑界面重写一 ...
- hdu 3996 (最大权闭合图)
题意:有n个区域布局,每个区域有一些金矿,挖开金矿需要一定的费用,可以得到一定的利润,要想挖开一个金矿,必须挖开所有在这个金矿上边的金矿,求最大利益,给的数据价值太大,用64位. 分析:如果一个金矿可 ...