简单的实现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的 其实使用很简单, ...
随机推荐
- [Hadoop源码解读](三)MapReduce篇之Job类
下面,我们只涉及MapReduce 1,而不涉及YARN. 当我们在写MapReduce程序的时候,通常,在main函数里,我们会像下面这样做.建立一个Job对象,设置它的JobName,然后配置输入 ...
- Webform——注册验证
服务器控件和客户端控件的交替使用,主要还是获取到各个控件的值,直接用C#或Js判断是否符合条件就可以. 这里是以服务器控件为例子,至于客户端控件则需要写JS代码 .UserBF public clas ...
- 使用PowerShell脚本部署定时器到MOSS2010
转:http://www.77site.com/tech/1087042010072906074113_2012050808152911.html 第一章 前言 在此次练习中,您将了解到如何使用Pow ...
- nyoj 括号匹配
这个方程有两种形式,本文采用 if(s[i]=s[j]) dp[i][j]=d[i-1][j-1] dp[i][j]=min(dp[i][k]+dp[k+1][j],dp[i][j]) (i=&l ...
- Html笔记(四)图像
图像标签: <img> <img src="../dir/file" alt="说明文字" height width border/> ...
- codeforce 621A Wet Shark and Odd and Even
水 最大偶数和 #include<iostream> #include<string> #include<algorithm> #include<cstdli ...
- HW3.18
import javax.swing.JOptionPane; public class Solution { public static void main(String[] args) { Str ...
- httpclient在抓取网页时出现速度慢的情况分析
问题: 最近在使用httpclient3.0 来做项目,在一台机器部署系统后,发现此机器比其它机器在抓取页面的速度上慢了大概4s,左右. 项目是部署在局域内网,所以代码中都是直接写的IP地址 .在使用 ...
- win7 下恢复“经典任务栏”/“快速启动栏”,关闭“窗口自动最大化” -摘自网络
1.自动放大窗口 鼠标把窗口拖到屏幕边缘时,win7会自做聪明的把窗口放大,有时候这个很烦人. 解决办法: 运行“REGEDIT”打开注册表,找到 “HKEY_CURRENT_USER\Control ...
- hdoj 5522 Numbers
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5522 水题:暴力过 #include<stdio.h> #include<strin ...